@erudit-js/prose 4.0.0 → 4.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 (129) hide show
  1. package/dist/app/composables/context.d.ts +6 -1
  2. package/dist/app/default/Inliners.vue +11 -11
  3. package/dist/app/default/Mix.vue +11 -11
  4. package/dist/app/default/Text.vue +25 -25
  5. package/dist/app/language/element.d.ts +1 -1
  6. package/dist/app/shared/Prose.vue +40 -40
  7. package/dist/app/shared/Render.vue +51 -51
  8. package/dist/app/shared/assets/block.svg +2 -2
  9. package/dist/app/shared/assets/check.svg +2 -2
  10. package/dist/app/shared/assets/inliner.svg +2 -2
  11. package/dist/app/shared/assets/plus.svg +2 -2
  12. package/dist/app/shared/block/AsideMenu.vue +44 -44
  13. package/dist/app/shared/block/AsideMenuButton.vue +51 -51
  14. package/dist/app/shared/block/AsideMenuCopyLink.vue +40 -40
  15. package/dist/app/shared/block/AsideMenuSeparator.vue +3 -3
  16. package/dist/app/shared/block/Block.vue +270 -270
  17. package/dist/app/shared/inliner/Inliner.vue +11 -11
  18. package/dist/app/shared/photoswipe/style.css +22 -22
  19. package/dist/elements/accent/Accent.vue +89 -88
  20. package/dist/elements/accent/AccentColumnSection.vue +61 -61
  21. package/dist/elements/accent/AccentRowSections.vue +64 -64
  22. package/dist/elements/callout/Callout.vue +81 -81
  23. package/dist/elements/callout/_global.d.ts +15 -15
  24. package/dist/elements/caption/Caption.vue +44 -44
  25. package/dist/elements/caption/_global.d.ts +26 -26
  26. package/dist/elements/details/Details.vue +49 -49
  27. package/dist/elements/details/_global.d.ts +27 -27
  28. package/dist/elements/details/icon.svg +2 -2
  29. package/dist/elements/diagram/Diagram.vue +356 -360
  30. package/dist/elements/diagram/_global.d.ts +19 -19
  31. package/dist/elements/emphasis/Emphasis.vue +25 -25
  32. package/dist/elements/emphasis/_global.d.ts +18 -18
  33. package/dist/elements/flex/Flex.vue +36 -36
  34. package/dist/elements/flex/_global.d.ts +23 -23
  35. package/dist/elements/gallery/Gallery.vue +56 -56
  36. package/dist/elements/gallery/_global.d.ts +18 -18
  37. package/dist/elements/heading/Heading.vue +44 -44
  38. package/dist/elements/heading/_global.d.ts +42 -42
  39. package/dist/elements/heading/icon.svg +2 -2
  40. package/dist/elements/horizontalLine/HorizontalLine.vue +6 -6
  41. package/dist/elements/horizontalLine/_global.d.ts +17 -17
  42. package/dist/elements/image/Image.vue +15 -15
  43. package/dist/elements/image/ImageElement.vue +80 -80
  44. package/dist/elements/image/_global.d.ts +18 -18
  45. package/dist/elements/lineBreak/LineBreak.vue +3 -3
  46. package/dist/elements/lineBreak/_global.d.ts +18 -18
  47. package/dist/elements/link/BlockLink.vue +159 -108
  48. package/dist/elements/link/Link.vue +119 -92
  49. package/dist/elements/link/core.js +1 -1
  50. package/dist/elements/link/dependency/_global.d.ts +47 -47
  51. package/dist/elements/link/dependency/app.d.ts +2 -2
  52. package/dist/elements/link/dependency/core.d.ts +12 -18
  53. package/dist/elements/link/dependency/core.js +1 -17
  54. package/dist/elements/link/reference/_global.d.ts +49 -49
  55. package/dist/elements/link/reference/languages/en.d.ts +2 -3
  56. package/dist/elements/link/reference/languages/en.js +5 -1
  57. package/dist/elements/link/reference/languages/ru.d.ts +2 -3
  58. package/dist/elements/link/reference/languages/ru.js +5 -1
  59. package/dist/elements/link/reference/phrases.d.ts +5 -0
  60. package/dist/elements/link/reference/phrases.js +1 -0
  61. package/dist/elements/link/step.d.ts +16 -0
  62. package/dist/elements/link/step.js +36 -0
  63. package/dist/elements/link/storage.d.ts +9 -5
  64. package/dist/elements/link/storage.js +4 -4
  65. package/dist/elements/list/List.vue +58 -58
  66. package/dist/elements/list/_global.d.ts +50 -50
  67. package/dist/elements/math/_global.d.ts +79 -72
  68. package/dist/elements/math/_global.ts +3 -3
  69. package/dist/elements/math/block.d.ts +2 -0
  70. package/dist/elements/math/block.js +42 -29
  71. package/dist/elements/math/components/BlockMath.vue +30 -30
  72. package/dist/elements/math/components/InlinerMath.vue +65 -65
  73. package/dist/elements/math/components/Katex.vue +88 -88
  74. package/dist/elements/math/components/MathGroup.vue +58 -41
  75. package/dist/elements/paragraph/Paragraph.vue +25 -25
  76. package/dist/elements/paragraph/_global.d.ts +27 -27
  77. package/dist/elements/paragraph/icon.svg +3 -3
  78. package/dist/elements/problem/_global.d.ts +257 -112
  79. package/dist/elements/problem/app.d.ts +7 -7
  80. package/dist/elements/problem/app.js +13 -12
  81. package/dist/elements/problem/assets/actions/answer.svg +2 -2
  82. package/dist/elements/problem/assets/actions/check.svg +2 -2
  83. package/dist/elements/problem/assets/actions/generate.svg +2 -2
  84. package/dist/elements/problem/assets/actions/hint.svg +2 -2
  85. package/dist/elements/problem/assets/actions/note.svg +2 -2
  86. package/dist/elements/problem/assets/actions/solution.svg +2 -2
  87. package/dist/elements/problem/assets/icon.svg +2 -2
  88. package/dist/elements/problem/components/Problem.vue +22 -22
  89. package/dist/elements/problem/components/ProblemButton.vue +20 -20
  90. package/dist/elements/problem/components/ProblemButtonGenerate.vue +96 -0
  91. package/dist/elements/problem/components/ProblemContainer.vue +8 -8
  92. package/dist/elements/problem/components/ProblemContent.vue +266 -356
  93. package/dist/elements/problem/components/ProblemExpander.vue +7 -7
  94. package/dist/elements/problem/components/ProblemExpanderSection.vue +57 -57
  95. package/dist/elements/problem/components/ProblemHeader.vue +100 -100
  96. package/dist/elements/problem/components/Problems.vue +83 -83
  97. package/dist/elements/problem/components/SubProblem.vue +14 -14
  98. package/dist/elements/problem/components/expanders/Check.vue +200 -153
  99. package/dist/elements/problem/components/expanders/Checks.vue +146 -146
  100. package/dist/elements/problem/components/expanders/DefaultPlusSections.vue +36 -38
  101. package/dist/elements/problem/components/expanders/Hint.vue +26 -26
  102. package/dist/elements/problem/core.d.ts +55 -28
  103. package/dist/elements/problem/core.js +2 -1
  104. package/dist/elements/problem/languages/{en.d.ts → problem/en.d.ts} +1 -1
  105. package/dist/elements/problem/languages/problem/en.js +6 -0
  106. package/dist/elements/problem/languages/{ru.d.ts → problem/ru.d.ts} +1 -1
  107. package/dist/elements/problem/languages/problem/ru.js +6 -0
  108. package/dist/elements/problem/languages/problems/en.d.ts +3 -0
  109. package/dist/elements/problem/languages/problems/en.js +6 -0
  110. package/dist/elements/problem/languages/problems/ru.d.ts +3 -0
  111. package/dist/elements/problem/languages/problems/ru.js +6 -0
  112. package/dist/elements/problem/languages/shared/en.d.ts +3 -0
  113. package/dist/elements/problem/languages/{en.js → shared/en.js} +12 -3
  114. package/dist/elements/problem/languages/shared/ru.d.ts +3 -0
  115. package/dist/elements/problem/languages/{ru.js → shared/ru.js} +12 -3
  116. package/dist/elements/problem/phrases.d.ts +4 -0
  117. package/dist/elements/problem/problemCheck.d.ts +166 -0
  118. package/dist/elements/problem/problemCheck.js +203 -0
  119. package/dist/elements/problem/problemContent.d.ts +2 -120
  120. package/dist/elements/problem/problemContent.js +2 -127
  121. package/dist/elements/problem/problemScript.d.ts +6 -1
  122. package/dist/elements/table/Table.vue +100 -100
  123. package/dist/elements/table/_global.d.ts +36 -36
  124. package/dist/elements/video/Video.vue +110 -110
  125. package/dist/elements/video/_global.d.ts +18 -18
  126. package/dist/resolve.d.ts +2 -1
  127. package/dist/resolve.js +8 -5
  128. package/package.json +4 -4
  129. package/types.d.ts +4 -4
@@ -1,112 +1,257 @@
1
- import type { ProblemCustomAttribute as PAC } from './shared.js';
2
-
3
- /**
4
- * Problems are used to present exercises and questions to the reader.
5
- * See the example for a full breakdown of the sub-elements available.
6
- *
7
- * All problems are added to TOC and search by default (can be disabled via tag properties).
8
- *
9
- * @title Problem
10
- * @layout block
11
- * @example
12
- * ```tsx
13
- * // Static problem
14
- * <Problem title="Find the square" level="easy">
15
- * <ProblemDescription>
16
- * <P>What is the square of 2?</P>
17
- * <P>Think carefully about your answer before proceeding to the hints and solution.</P>
18
- * </ProblemDescription>
19
- *
20
- * <ProblemHint>
21
- * <P>Recall that squaring a number means multiplying it by itself.</P>
22
- * </ProblemHint>
23
- * <ProblemHint>
24
- * <P>For example, the square of 3 is 9, since 3 * 3 = 9.</P>
25
- * </ProblemHint>
26
- * // More hints...
27
- *
28
- * <ProblemSolution>
29
- * <P>Some general phrases visible immediately.</P>
30
- *
31
- * <ProblemSection title="Detailed Solution">
32
- * <P>The square of 2 is 4, since 2 * 2 = 4.</P>
33
- * </ProblemSection>
34
- * // More sections...
35
- *
36
- * </ProblemSolution>
37
- *
38
- * <ProblemAnswer>
39
- * <P><M>4</M></P>
40
- * </ProblemAnswer>
41
- *
42
- * <ProblemCheck label="The square of 2 is" answer={4} />
43
- * // More checks...
44
- *
45
- * <ProblemNote>
46
- * In fact, you can find the square of any number by multiplying it by itself!
47
- * </ProblemNote>
48
- * </Problem>
49
- *
50
- * // Script problem
51
- * export const fooScript = defineProblemScript({
52
- * isGenerator: true,
53
- * })(({ initial, random }) => {
54
- * const a = initial.nextInt(1, 10);
55
- * const b = initial.nextInt(1, 10);
56
- *
57
- * return (
58
- * <>
59
- * <ProblemDescription>
60
- * What is <M>{a} + {b}</M>?
61
- * </ProblemDescription>
62
- * <ProblemAnswer>
63
- * <M>{a + b}</M>
64
- * </ProblemAnswer>
65
- * <ProblemCheck label="The answer is" answer={a + b} />
66
- * </>
67
- * );
68
- * });
69
- *
70
- * <Problem title="Addition Problem" level="medium" script={fooScript} />
71
- * ```
72
- */
73
- export const Problem = '_tag_';
74
- export const ProblemDescription = '_tag_';
75
- export const ProblemHint = '_tag_';
76
- export const ProblemSection = '_tag_';
77
- export const ProblemSolution = '_tag_';
78
- export const ProblemAnswer = '_tag_';
79
- export const ProblemNote = '_tag_';
80
- export const ProblemCheck = '_tag_';
81
-
82
- /**
83
- * Problem set is a collection of related problems presented together.
84
- * `<Problems>` tag contains general problem information and insude can have multiple `<SubProblem>` tags.
85
- *
86
- * Each `<SubProblem>` contains the same problem content tags as single `<Problem>` tag.
87
- *
88
- * All problems are added to TOC and search by default (can be disabled via tag properties).
89
- *
90
- * @title Problems
91
- * @layout block
92
- * @example
93
- * ```tsx
94
- * // export const problemScript = defineProblemScript(...) ~> see Problem docs for details
95
- * <Problems title="Sample Problem Set" level="hard">
96
- * <SubProblem label="Example">
97
- * <ProblemDescription>
98
- * This is an example sub-problem.
99
- * </ProblemDescription>
100
- * </SubProblem>
101
- *
102
- * <SubProblem script={problemScript} />
103
- * </Problems>
104
- * ```
105
- */
106
- export const Problems = '_tag_';
107
- export const SubProblem = '_tag_';
108
-
109
- /**
110
- * Typeguard for creating custom problem attributes.
111
- */
112
- export type ProblemCustomAttribute = PAC;
1
+ import type { ProblemCustomAttribute as PAC } from './shared.js';
2
+ import type { ProblemRandom as _ProblemRandom } from './rng.js';
3
+
4
+ /**
5
+ * Problems are used to present exercises and questions to the reader.
6
+ *
7
+ * Allowed children inside `<Problem>`:
8
+ * - `<ProblemDescription>`
9
+ * - `<ProblemCheck>` (repeatable)
10
+ * - `<ProblemHint>` (repeatable)
11
+ * - `<ProblemAnswer>` (optionally with `<ProblemSection>`)
12
+ * - `<ProblemSolution>` (optionally with `<ProblemSection>`)
13
+ * - `<ProblemNote>` (optionally with `<ProblemSection>`)
14
+ *
15
+ * @title Problem
16
+ * @layout block
17
+ * @example
18
+ * ```tsx
19
+ * <Problem title="Find the square" level="easy">
20
+ * <ProblemDescription>
21
+ * <P>What is the square of 2?</P>
22
+ * <P>Think carefully about your answer before proceeding to the hints and solution.</P>
23
+ * </ProblemDescription>
24
+ *
25
+ * <ProblemHint>
26
+ * <P>Recall that squaring a number means multiplying it by itself.</P>
27
+ * </ProblemHint>
28
+ * <ProblemHint>
29
+ * <P>For example, the square of 3 is 9, since 3 * 3 = 9.</P>
30
+ * </ProblemHint>
31
+ * // More hints...
32
+ *
33
+ * <ProblemSolution>
34
+ * <P>Some general phrases visible immediately.</P>
35
+ *
36
+ * <ProblemSection title="Detailed Solution">
37
+ * <P>The square of 2 is 4, since 2 * 2 = 4.</P>
38
+ * </ProblemSection>
39
+ * // More sections...
40
+ *
41
+ * </ProblemSolution>
42
+ *
43
+ * <ProblemAnswer>
44
+ * <P><M>4</M></P>
45
+ * </ProblemAnswer>
46
+ *
47
+ * <ProblemCheck label="The square of 2 is" answer={4} />
48
+ *
49
+ * <ProblemNote>
50
+ * In fact, you can find the square of any number by multiplying it by itself!
51
+ * </ProblemNote>
52
+ * </Problem>
53
+ * ```
54
+ */
55
+ export const Problem = '_tag_';
56
+
57
+ /**
58
+ * Problem description.
59
+ *
60
+ * Can be used inside `<Problem>` or `<SubProblem>`.
61
+ *
62
+ * @title ProblemDescription
63
+ * @layout block
64
+ * @example
65
+ * ```tsx
66
+ * <ProblemDescription>
67
+ * <P>State the problem in your own words.</P>
68
+ * </ProblemDescription>
69
+ * ```
70
+ */
71
+ export const ProblemDescription = '_tag_';
72
+
73
+ /**
74
+ * A hint for the problem. Multiple hints can be provided.
75
+ *
76
+ * Can be used inside `<Problem>` or `<SubProblem>`.
77
+ *
78
+ * @title ProblemHint
79
+ * @layout block
80
+ * @example
81
+ * ```tsx
82
+ * <ProblemHint>
83
+ * <P>Try rewriting the expression in a simpler form.</P>
84
+ * </ProblemHint>
85
+ * ```
86
+ */
87
+ export const ProblemHint = '_tag_';
88
+
89
+ /**
90
+ * A titled section used inside `<ProblemSolution>` or `<ProblemAnswer>`.
91
+ *
92
+ * @title ProblemSection
93
+ * @layout block
94
+ * @example
95
+ * ```tsx
96
+ * <ProblemSection title="Method">
97
+ * <P>Show the steps.</P>
98
+ * </ProblemSection>
99
+ * ```
100
+ */
101
+ export const ProblemSection = '_tag_';
102
+
103
+ /**
104
+ * The problem solution.
105
+ *
106
+ * Can contain plain content and `<ProblemSection>` blocks.
107
+ * Can be used inside `<Problem>` or `<SubProblem>`.
108
+ *
109
+ * @title ProblemSolution
110
+ * @layout block
111
+ * @example
112
+ * ```tsx
113
+ * <ProblemSolution>
114
+ * <P>Start with the key idea.</P>
115
+ *
116
+ * <ProblemSection title="Details">
117
+ * <P>Then provide the full derivation.</P>
118
+ * </ProblemSection>
119
+ * </ProblemSolution>
120
+ * ```
121
+ */
122
+ export const ProblemSolution = '_tag_';
123
+
124
+ /**
125
+ * The final answer (usually concise).
126
+ *
127
+ * Can contain plain content and `<ProblemSection>` blocks.
128
+ * Can be used inside `<Problem>` or `<SubProblem>`.
129
+ *
130
+ * @title ProblemAnswer
131
+ * @layout block
132
+ * @example
133
+ * ```tsx
134
+ * <ProblemAnswer>
135
+ * <P><M>42</M></P>
136
+ * </ProblemAnswer>
137
+ * ```
138
+ */
139
+ export const ProblemAnswer = '_tag_';
140
+
141
+ /**
142
+ * A note shown after the checks/solution.
143
+ *
144
+ * Can be used inside `<Problem>` or `<SubProblem>`.
145
+ *
146
+ * @title ProblemNote
147
+ * @layout block
148
+ * @example
149
+ * ```tsx
150
+ * <ProblemNote>
151
+ * Remember to double-check units.
152
+ * </ProblemNote>
153
+ * ```
154
+ */
155
+ export const ProblemNote = '_tag_';
156
+
157
+ /**
158
+ * Defines an answer check for a problem.
159
+ *
160
+ * Can be used inside `<Problem>` or `<SubProblem>`.
161
+ *
162
+ * Validator props (exactly one per `<ProblemCheck>`):
163
+ * - `yes`: boolean-like answer, validated via locale yes/no patterns.
164
+ * - `no`: boolean-like answer, validated via locale yes/no patterns.
165
+ * - `answer`: exact expected value.
166
+ * - `number` -> numeric equality
167
+ * - `string` -> exact string match
168
+ * - `RegExp` -> `test()` match
169
+ * - `undefined` -> expects an empty answer
170
+ * - `answers`: multi-part answer (split by `separator`, default `,`, unordered by default).
171
+ * - Use `{ ordered, separator, values }` to configure matching.
172
+ * - Each position in `values` can be a single expected value or an array of expected values (any-of).
173
+ * - `script`: named script validator.
174
+ *
175
+ * You can nest `<ProblemCheck>` inside another `<ProblemCheck>` to group multiple checks.
176
+ *
177
+ * @title ProblemCheck
178
+ * @layout block
179
+ * @example
180
+ * ```tsx
181
+ * <ProblemCheck label="2 is even" yes />
182
+ * <ProblemCheck label="Enter nothing" answer={undefined} />
183
+ * <ProblemCheck label="The square of 2 is" answer={4} />
184
+ * <ProblemCheck
185
+ * label="Enter roots"
186
+ * answers={{ ordered: false, separator: ',', values: [2, [-2, /-?2/]] }}
187
+ * />
188
+ * <ProblemCheck script="myCustomValidator" />
189
+ *
190
+ * <ProblemCheck label="Grouped checks" yes>
191
+ * <ProblemCheck label="Also accept 42" answer={42} />
192
+ * </ProblemCheck>
193
+ * ```
194
+ */
195
+ export const ProblemCheck = '_tag_';
196
+
197
+ /**
198
+ * Problem set is a collection of related problems presented together.
199
+ *
200
+ * Allowed children inside `<Problems>`:
201
+ * - `<SubProblem>` (repeatable)
202
+ *
203
+ * Each `<SubProblem>` can contain the same child tags as `<Problem>`.
204
+ *
205
+ * @title Problems
206
+ * @layout block
207
+ * @example
208
+ * ```tsx
209
+ * // export const problemScript = defineProblemScript(...) ~> see Problem docs for details
210
+ * <Problems title="Sample Problem Set" level="hard">
211
+ * <SubProblem label="Example">
212
+ * <ProblemDescription>
213
+ * This is an example sub-problem.
214
+ * </ProblemDescription>
215
+ * </SubProblem>
216
+ *
217
+ * <SubProblem script={problemScript} />
218
+ * </Problems>
219
+ * ```
220
+ */
221
+ export const Problems = '_tag_';
222
+
223
+ /**
224
+ * A single problem inside a `<Problems>` set.
225
+ *
226
+ * Allowed children inside `<SubProblem>`:
227
+ * - `<ProblemDescription>`
228
+ * - `<ProblemHint>` (repeatable)
229
+ * - `<ProblemSolution>` (optionally with `<ProblemSection>`)
230
+ * - `<ProblemAnswer>` (optionally with `<ProblemSection>`)
231
+ * - `<ProblemCheck>` (repeatable)
232
+ * - `<ProblemNote>`
233
+ *
234
+ * @title SubProblem
235
+ * @layout block
236
+ * @example
237
+ * ```tsx
238
+ * <SubProblem label="A">
239
+ * <ProblemDescription>
240
+ * <P>Solve for <M>x</M>.</P>
241
+ * </ProblemDescription>
242
+ *
243
+ * <ProblemCheck answer={42} />
244
+ * </SubProblem>
245
+ * ```
246
+ */
247
+ export const SubProblem = '_tag_';
248
+
249
+ /**
250
+ * Typeguard for creating custom problem attributes.
251
+ */
252
+ export type ProblemCustomAttribute = PAC;
253
+
254
+ /**
255
+ * Typeguard for problem RNG.
256
+ */
257
+ export type ProblemRandom = _ProblemRandom;
@@ -5,13 +5,6 @@ declare const _default: (import("../../app/appElement.js").AppElement<{
5
5
  Data: import("./problem.js").ProblemData;
6
6
  Storage: import("./storage.js").ProblemScriptStorage;
7
7
  Children: import("./problemContent.js").ProblemContentChild[];
8
- }> | import("../../app/appElement.js").AppElement<{
9
- name: "subProblem";
10
- type: "block";
11
- linkable: false;
12
- Data: import("./problems.js").SubProblemData;
13
- Storage: import("./storage.js").ProblemScriptStorage;
14
- Children: import("./problemContent.js").ProblemContentChild[];
15
8
  }> | import("../../app/appElement.js").AppElement<{
16
9
  name: "problems";
17
10
  type: "block";
@@ -26,5 +19,12 @@ declare const _default: (import("../../app/appElement.js").AppElement<{
26
19
  Storage: import("./storage.js").ProblemScriptStorage;
27
20
  Children: import("./problemContent.js").ProblemContentChild[];
28
21
  })[];
22
+ }> | import("../../app/appElement.js").AppElement<{
23
+ name: "subProblem";
24
+ type: "block";
25
+ linkable: false;
26
+ Data: import("./problems.js").SubProblemData;
27
+ Storage: import("./storage.js").ProblemScriptStorage;
28
+ Children: import("./problemContent.js").ProblemContentChild[];
29
29
  }>)[];
30
30
  export default _default;
@@ -1,27 +1,28 @@
1
1
  import { defineEruditProseAppElement } from "../../app/appElement.js";
2
2
  import { problemSchema } from "./problem.js";
3
3
  import { problemsSchema, subProblemSchema } from "./problems.js";
4
+ const icon = () => import("./assets/icon.svg?raw");
4
5
  export default [
5
6
  defineEruditProseAppElement({
6
7
  schema: problemSchema,
7
8
  component: () => import("./components/Problem.vue"),
9
+ icon,
8
10
  languages: {
9
- en: () => import("./languages/en.js"),
10
- ru: () => import("./languages/ru.js")
11
- },
12
- icon: () => import("./assets/icon.svg?raw")
13
- }),
14
- defineEruditProseAppElement({
15
- schema: subProblemSchema,
16
- component: () => import("./components/SubProblem.vue")
11
+ en: () => import("./languages/problem/en.js"),
12
+ ru: () => import("./languages/problem/ru.js")
13
+ }
17
14
  }),
18
15
  defineEruditProseAppElement({
19
16
  schema: problemsSchema,
20
17
  component: () => import("./components/Problems.vue"),
18
+ icon,
21
19
  languages: {
22
- en: () => import("./languages/en.js"),
23
- ru: () => import("./languages/ru.js")
24
- },
25
- icon: () => import("./assets/icon.svg?raw")
20
+ en: () => import("./languages/problems/en.js"),
21
+ ru: () => import("./languages/problems/ru.js")
22
+ }
23
+ }),
24
+ defineEruditProseAppElement({
25
+ schema: subProblemSchema,
26
+ component: () => import("./components/SubProblem.vue")
26
27
  })
27
28
  ];
@@ -1,3 +1,3 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20">
2
- <path d="M8.86,13.75l5.75-5.75-1.14-1.14-4.61,4.61-2.32-2.32-1.14,1.14,3.47,3.47ZM10,18.15c-1.13,0-2.19-.21-3.18-.64-.99-.43-1.86-1.01-2.59-1.74-.73-.73-1.31-1.6-1.74-2.59-.43-.99-.64-2.05-.64-3.18,0-1.13.21-2.19.64-3.18s1.01-1.86,1.74-2.59c.73-.73,1.6-1.31,2.59-1.74s2.05-.64,3.18-.64c1.13,0,2.19.21,3.18.64.99.43,1.86,1.01,2.59,1.74.73.73,1.31,1.6,1.74,2.59.43.99.64,2.05.64,3.18s-.22,2.19-.64,3.18c-.43.99-1.01,1.86-1.74,2.59s-1.6,1.31-2.59,1.74c-.99.43-2.05.64-3.18.64M10,16.52c1.82,0,3.36-.63,4.63-1.9s1.9-2.81,1.9-4.63-.63-3.36-1.9-4.63c-1.26-1.26-2.81-1.9-4.63-1.9-1.82,0-3.36.63-4.63,1.9s-1.9,2.81-1.9,4.63c0,1.82.63,3.36,1.9,4.63,1.26,1.26,2.81,1.9,4.63,1.9"/>
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20">
2
+ <path d="M8.86,13.75l5.75-5.75-1.14-1.14-4.61,4.61-2.32-2.32-1.14,1.14,3.47,3.47ZM10,18.15c-1.13,0-2.19-.21-3.18-.64-.99-.43-1.86-1.01-2.59-1.74-.73-.73-1.31-1.6-1.74-2.59-.43-.99-.64-2.05-.64-3.18,0-1.13.21-2.19.64-3.18s1.01-1.86,1.74-2.59c.73-.73,1.6-1.31,2.59-1.74s2.05-.64,3.18-.64c1.13,0,2.19.21,3.18.64.99.43,1.86,1.01,2.59,1.74.73.73,1.31,1.6,1.74,2.59.43.99.64,2.05.64,3.18s-.22,2.19-.64,3.18c-.43.99-1.01,1.86-1.74,2.59s-1.6,1.31-2.59,1.74c-.99.43-2.05.64-3.18.64M10,16.52c1.82,0,3.36-.63,4.63-1.9s1.9-2.81,1.9-4.63-.63-3.36-1.9-4.63c-1.26-1.26-2.81-1.9-4.63-1.9-1.82,0-3.36.63-4.63,1.9s-1.9,2.81-1.9,4.63c0,1.82.63,3.36,1.9,4.63,1.26,1.26,2.81,1.9,4.63,1.9"/>
3
3
  </svg>
@@ -1,3 +1,3 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
2
- <path d="M28.58,6.4l-7.8,20.14c-.26.67-1.01,1-1.68.74-.16-.06-.3-.15-.43-.27l-4.39-4.21-2.7,2.7c-.26.26-.66.26-.92,0-.12-.12-.19-.29-.19-.46v-5.87l-6.74-6.46c-.52-.5-.54-1.32-.04-1.84.17-.18.38-.3.62-.36l22.74-5.84c.7-.18,1.4.24,1.58.94.06.26.05.54-.05.79h0ZM25.42,7.88l-14.25,9.29,2.26,2.16,12-11.45h0Z"/>
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
2
+ <path d="M28.58,6.4l-7.8,20.14c-.26.67-1.01,1-1.68.74-.16-.06-.3-.15-.43-.27l-4.39-4.21-2.7,2.7c-.26.26-.66.26-.92,0-.12-.12-.19-.29-.19-.46v-5.87l-6.74-6.46c-.52-.5-.54-1.32-.04-1.84.17-.18.38-.3.62-.36l22.74-5.84c.7-.18,1.4.24,1.58.94.06.26.05.54-.05.79h0ZM25.42,7.88l-14.25,9.29,2.26,2.16,12-11.45h0Z"/>
3
3
  </svg>
@@ -1,3 +1,3 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16">
2
- <path d="M2,2v1.5h2.1l-.37.3c-.6.6-1.02,1.25-1.27,1.95-.3.7-.45,1.42-.45,2.17,0,1.4.42,2.65,1.27,3.75.8,1.05,1.87,1.77,3.22,2.17v-1.57c-.9-.35-1.62-.92-2.17-1.72-.55-.75-.82-1.62-.82-2.62,0-.55.1-1.07.3-1.57.2-.55.55-1.05,1.05-1.5l.15-.15v1.8h1.5V2H2ZM9.5,2.23v1.57c.9.3,1.62.85,2.17,1.65.55.75.82,1.62.82,2.62,0,.55-.1,1.07-.3,1.57-.25.55-.57,1.05-.97,1.5l-.22.15v-1.8h-1.5v4.5h4.5v-1.5h-2.02l.22-.22c.65-.65,1.1-1.32,1.35-2.02.3-.75.45-1.47.45-2.17,0-1.4-.42-2.65-1.27-3.75-.8-1.1-1.87-1.82-3.22-2.17v.07Z"/>
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16">
2
+ <path d="M2,2v1.5h2.1l-.37.3c-.6.6-1.02,1.25-1.27,1.95-.3.7-.45,1.42-.45,2.17,0,1.4.42,2.65,1.27,3.75.8,1.05,1.87,1.77,3.22,2.17v-1.57c-.9-.35-1.62-.92-2.17-1.72-.55-.75-.82-1.62-.82-2.62,0-.55.1-1.07.3-1.57.2-.55.55-1.05,1.05-1.5l.15-.15v1.8h1.5V2H2ZM9.5,2.23v1.57c.9.3,1.62.85,2.17,1.65.55.75.82,1.62.82,2.62,0,.55-.1,1.07-.3,1.57-.25.55-.57,1.05-.97,1.5l-.22.15v-1.8h-1.5v4.5h4.5v-1.5h-2.02l.22-.22c.65-.65,1.1-1.32,1.35-2.02.3-.75.45-1.47.45-2.17,0-1.4-.42-2.65-1.27-3.75-.8-1.1-1.87-1.82-3.22-2.17v.07Z"/>
3
3
  </svg>
@@ -1,3 +1,3 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22 22">
2
- <path d="M11,6.36c2.56,0,4.64,2.08,4.64,4.64,0,1.72-.93,3.21-2.32,4.02v1.39c0,.43-.35.77-.77.77h-3.09c-.43,0-.77-.35-.77-.77v-1.39c-1.38-.8-2.32-2.3-2.32-4.02,0-2.56,2.08-4.64,4.64-4.64M12.55,17.95v.77c0,.43-.35.77-.77.77h-1.55c-.43,0-.77-.35-.77-.77v-.77h3.09ZM17.18,10.23h2.32v1.55h-2.32v-1.55ZM2.5,10.23h2.32v1.55h-2.32v-1.55ZM11.77,2.5v2.32h-1.55v-2.32h1.55ZM5.53,4.43l1.65,1.65-1.1,1.09-1.65-1.64,1.1-1.1ZM14.83,6.08l1.64-1.65,1.11,1.1-1.65,1.64-1.1-1.1Z"/>
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22 22">
2
+ <path d="M11,6.36c2.56,0,4.64,2.08,4.64,4.64,0,1.72-.93,3.21-2.32,4.02v1.39c0,.43-.35.77-.77.77h-3.09c-.43,0-.77-.35-.77-.77v-1.39c-1.38-.8-2.32-2.3-2.32-4.02,0-2.56,2.08-4.64,4.64-4.64M12.55,17.95v.77c0,.43-.35.77-.77.77h-1.55c-.43,0-.77-.35-.77-.77v-.77h3.09ZM17.18,10.23h2.32v1.55h-2.32v-1.55ZM2.5,10.23h2.32v1.55h-2.32v-1.55ZM11.77,2.5v2.32h-1.55v-2.32h1.55ZM5.53,4.43l1.65,1.65-1.1,1.09-1.65-1.64,1.1-1.1ZM14.83,6.08l1.64-1.65,1.11,1.1-1.65,1.64-1.1-1.1Z"/>
3
3
  </svg>
@@ -1,3 +1,3 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16.97 16.97">
2
- <path d="M10.41,4.64c0-.31.2-.57.43-.79.21-.2.34-.45.34-.72,0-.63-.69-1.15-1.53-1.15s-1.53.51-1.53,1.15c0,.28.13.53.35.73.22.2.42.46.42.76,0,.41-.33.74-.74.75-.02,0-.03,0-.05,0-.77-.05-1.54-.13-2.31-.23-.31-.04-.6.17-.65.49,0,.05,0,.11,0,.16.11.76.19,1.53.23,2.31.02.41-.29.76-.7.78-.02,0-.03,0-.05,0-.3,0-.56-.19-.76-.42-.2-.22-.45-.35-.73-.35-.63,0-1.15.69-1.15,1.53s.51,1.53,1.15,1.53c.27,0,.52-.13.72-.34.21-.23.48-.43.79-.43.42,0,.77.34.77.76,0,.01,0,.02,0,.03-.04.96-.12,1.91-.24,2.86-.04.31.18.6.49.64.8.11,1.62.19,2.44.24.41.02.76-.29.78-.7,0-.02,0-.03,0-.05,0-.3-.19-.56-.42-.76-.22-.2-.35-.45-.35-.73,0-.63.69-1.15,1.53-1.15s1.53.51,1.53,1.15c0,.27-.13.52-.34.72-.23.21-.43.48-.43.79,0,.42.34.77.76.77,0,0,.02,0,.03,0,1.02-.04,2.04-.12,3.03-.26.26-.03.46-.24.49-.49.13-1,.22-2.01.26-3.03.01-.42-.32-.78-.74-.79,0,0-.02,0-.03,0-.31,0-.57.2-.79.43-.2.21-.45.34-.72.34-.63,0-1.15-.69-1.15-1.53s.51-1.53,1.15-1.53c.28,0,.53.13.73.35.2.22.46.42.76.42.41,0,.75-.33.75-.74,0-.02,0-.03,0-.05-.05-.82-.13-1.63-.24-2.44-.04-.31-.33-.53-.64-.49-.94.13-1.89.21-2.86.24-.42.01-.77-.32-.79-.74,0-.01,0-.02,0-.03"/>
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16.97 16.97">
2
+ <path d="M10.41,4.64c0-.31.2-.57.43-.79.21-.2.34-.45.34-.72,0-.63-.69-1.15-1.53-1.15s-1.53.51-1.53,1.15c0,.28.13.53.35.73.22.2.42.46.42.76,0,.41-.33.74-.74.75-.02,0-.03,0-.05,0-.77-.05-1.54-.13-2.31-.23-.31-.04-.6.17-.65.49,0,.05,0,.11,0,.16.11.76.19,1.53.23,2.31.02.41-.29.76-.7.78-.02,0-.03,0-.05,0-.3,0-.56-.19-.76-.42-.2-.22-.45-.35-.73-.35-.63,0-1.15.69-1.15,1.53s.51,1.53,1.15,1.53c.27,0,.52-.13.72-.34.21-.23.48-.43.79-.43.42,0,.77.34.77.76,0,.01,0,.02,0,.03-.04.96-.12,1.91-.24,2.86-.04.31.18.6.49.64.8.11,1.62.19,2.44.24.41.02.76-.29.78-.7,0-.02,0-.03,0-.05,0-.3-.19-.56-.42-.76-.22-.2-.35-.45-.35-.73,0-.63.69-1.15,1.53-1.15s1.53.51,1.53,1.15c0,.27-.13.52-.34.72-.23.21-.43.48-.43.79,0,.42.34.77.76.77,0,0,.02,0,.03,0,1.02-.04,2.04-.12,3.03-.26.26-.03.46-.24.49-.49.13-1,.22-2.01.26-3.03.01-.42-.32-.78-.74-.79,0,0-.02,0-.03,0-.31,0-.57.2-.79.43-.2.21-.45.34-.72.34-.63,0-1.15-.69-1.15-1.53s.51-1.53,1.15-1.53c.28,0,.53.13.73.35.2.22.46.42.76.42.41,0,.75-.33.75-.74,0-.02,0-.03,0-.05-.05-.82-.13-1.63-.24-2.44-.04-.31-.33-.53-.64-.49-.94.13-1.89.21-2.86.24-.42.01-.77-.32-.79-.74,0-.01,0-.02,0-.03"/>
3
3
  </svg>
@@ -1,3 +1,3 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 560">
2
- <path d="M119.1,480c-8.15,0-14.95-2.75-20.41-8.26-5.51-5.45-8.26-12.25-8.26-20.41s2.75-14.9,8.26-20.41c5.45-5.45,12.25-8.18,20.41-8.18h229.09c8.15,0,14.95,2.73,20.41,8.18s8.26,12.31,8.26,20.41c0,8.15-2.75,14.95-8.26,20.41-5.45,5.51-12.25,8.26-20.41,8.26H119.1ZM119.1,365.42c-8.1,0-14.9-2.75-20.41-8.26-5.45-5.45-8.18-12.25-8.18-20.41s2.73-14.9,8.18-20.41c5.51-5.45,12.31-8.18,20.41-8.18h401c8.15,0,14.95,2.73,20.41,8.18,5.51,5.51,8.26,12.31,8.26,20.41s-2.75,14.95-8.26,20.41c-5.45,5.51-12.25,8.26-20.41,8.26H119.1ZM119.1,250.83c-8.1,0-14.9-2.73-20.41-8.18-5.45-5.51-8.18-12.31-8.18-20.41s2.73-14.95,8.18-20.41c5.51-5.51,12.31-8.26,20.41-8.26h401c8.15,0,14.95,2.75,20.41,8.26,5.51,5.45,8.26,12.25,8.26,20.41s-2.75,14.9-8.26,20.41c-5.45,5.45-12.25,8.18-20.41,8.18H119.1ZM119.1,136.25c-8.1,0-14.9-2.73-20.41-8.18-5.45-5.51-8.18-12.31-8.18-20.41s2.73-14.95,8.18-20.41c5.51-5.51,12.31-8.26,20.41-8.26h401c8.15,0,14.95,2.75,20.41,8.26,5.51,5.45,8.26,12.25,8.26,20.41s-2.75,14.9-8.26,20.41c-5.45,5.45-12.25,8.18-20.41,8.18H119.1Z"/>
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 560">
2
+ <path d="M119.1,480c-8.15,0-14.95-2.75-20.41-8.26-5.51-5.45-8.26-12.25-8.26-20.41s2.75-14.9,8.26-20.41c5.45-5.45,12.25-8.18,20.41-8.18h229.09c8.15,0,14.95,2.73,20.41,8.18s8.26,12.31,8.26,20.41c0,8.15-2.75,14.95-8.26,20.41-5.45,5.51-12.25,8.26-20.41,8.26H119.1ZM119.1,365.42c-8.1,0-14.9-2.75-20.41-8.26-5.45-5.45-8.18-12.25-8.18-20.41s2.73-14.9,8.18-20.41c5.51-5.45,12.31-8.18,20.41-8.18h401c8.15,0,14.95,2.73,20.41,8.18,5.51,5.51,8.26,12.31,8.26,20.41s-2.75,14.95-8.26,20.41c-5.45,5.51-12.25,8.26-20.41,8.26H119.1ZM119.1,250.83c-8.1,0-14.9-2.73-20.41-8.18-5.45-5.51-8.18-12.31-8.18-20.41s2.73-14.95,8.18-20.41c5.51-5.51,12.31-8.26,20.41-8.26h401c8.15,0,14.95,2.75,20.41,8.26,5.51,5.45,8.26,12.25,8.26,20.41s-2.75,14.9-8.26,20.41c-5.45,5.45-12.25,8.18-20.41,8.18H119.1ZM119.1,136.25c-8.1,0-14.9-2.73-20.41-8.18-5.45-5.51-8.18-12.31-8.18-20.41s2.73-14.95,8.18-20.41c5.51-5.51,12.31-8.26,20.41-8.26h401c8.15,0,14.95,2.75,20.41,8.26,5.51,5.45,8.26,12.25,8.26,20.41s-2.75,14.9-8.26,20.41c-5.45,5.45-12.25,8.18-20.41,8.18H119.1Z"/>
3
3
  </svg>
@@ -1,3 +1,3 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 800 800">
2
- <path d="M400,715.16c-43.6,0-84.57-8.27-122.91-24.82-38.34-16.55-71.7-39-100.06-67.37-28.36-28.36-50.82-61.72-67.37-100.06-16.55-38.34-24.82-79.32-24.82-122.91s8.27-84.57,24.82-122.91c16.55-38.34,39-71.7,67.37-100.06,28.36-28.36,61.72-50.82,100.06-67.37,38.34-16.55,79.32-24.82,122.91-24.82,34.14,0,66.45,4.99,96.91,14.97,30.47,9.98,58.57,23.9,84.31,41.76l-45.7,46.49c-19.96-12.61-41.23-22.46-63.82-29.55-22.59-7.09-46.49-10.64-71.7-10.64-69.86,0-129.35,24.56-178.46,73.67-49.11,49.11-73.67,108.6-73.67,178.46s24.56,129.35,73.67,178.46c49.11,49.11,108.6,73.67,178.46,73.67s129.35-24.56,178.46-73.67c49.11-49.11,73.67-108.6,73.67-178.46,0-9.45-.53-18.91-1.58-28.36-1.05-9.45-2.63-18.65-4.73-27.58l51.21-51.21c5.78,16.81,10.24,34.14,13.39,52,3.15,17.86,4.73,36.24,4.73,55.15,0,43.6-8.27,84.57-24.82,122.91-16.55,38.34-39,71.7-67.37,100.06-28.36,28.36-61.72,50.82-100.06,67.37-38.34,16.55-79.32,24.82-122.91,24.82ZM355.88,544.97l-133.94-133.94,44.12-44.12,89.82,89.82,315.16-315.95,44.12,44.12-359.29,360.07Z"/>
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 800 800">
2
+ <path d="M400,715.16c-43.6,0-84.57-8.27-122.91-24.82-38.34-16.55-71.7-39-100.06-67.37-28.36-28.36-50.82-61.72-67.37-100.06-16.55-38.34-24.82-79.32-24.82-122.91s8.27-84.57,24.82-122.91c16.55-38.34,39-71.7,67.37-100.06,28.36-28.36,61.72-50.82,100.06-67.37,38.34-16.55,79.32-24.82,122.91-24.82,34.14,0,66.45,4.99,96.91,14.97,30.47,9.98,58.57,23.9,84.31,41.76l-45.7,46.49c-19.96-12.61-41.23-22.46-63.82-29.55-22.59-7.09-46.49-10.64-71.7-10.64-69.86,0-129.35,24.56-178.46,73.67-49.11,49.11-73.67,108.6-73.67,178.46s24.56,129.35,73.67,178.46c49.11,49.11,108.6,73.67,178.46,73.67s129.35-24.56,178.46-73.67c49.11-49.11,73.67-108.6,73.67-178.46,0-9.45-.53-18.91-1.58-28.36-1.05-9.45-2.63-18.65-4.73-27.58l51.21-51.21c5.78,16.81,10.24,34.14,13.39,52,3.15,17.86,4.73,36.24,4.73,55.15,0,43.6-8.27,84.57-24.82,122.91-16.55,38.34-39,71.7-67.37,100.06-28.36,28.36-61.72,50.82-100.06,67.37-38.34,16.55-79.32,24.82-122.91,24.82ZM355.88,544.97l-133.94-133.94,44.12-44.12,89.82,89.82,315.16-315.95,44.12,44.12-359.29,360.07Z"/>
3
3
  </svg>
@@ -1,22 +1,22 @@
1
- <script setup lang="ts">
2
- import type { ProseElement } from '@jsprose/core';
3
-
4
- import { problemSchema } from '../problem.js';
5
- import Block from '../../../app/shared/block/Block.vue';
6
- import ProblemContainer from './ProblemContainer.vue';
7
- import ProblemHeader from './ProblemHeader.vue';
8
- import ProblemContent from './ProblemContent.vue';
9
-
10
- const { element } = defineProps<{
11
- element: ProseElement<typeof problemSchema>;
12
- }>();
13
- </script>
14
-
15
- <template>
16
- <Block :element>
17
- <ProblemContainer>
18
- <ProblemHeader :info="element.data.info" />
19
- <ProblemContent :element :initialElements="element.children" />
20
- </ProblemContainer>
21
- </Block>
22
- </template>
1
+ <script setup lang="ts">
2
+ import type { ProseElement } from '@jsprose/core';
3
+
4
+ import { problemSchema } from '../problem.js';
5
+ import Block from '../../../app/shared/block/Block.vue';
6
+ import ProblemContainer from './ProblemContainer.vue';
7
+ import ProblemHeader from './ProblemHeader.vue';
8
+ import ProblemContent from './ProblemContent.vue';
9
+
10
+ const { element } = defineProps<{
11
+ element: ProseElement<typeof problemSchema>;
12
+ }>();
13
+ </script>
14
+
15
+ <template>
16
+ <Block :element>
17
+ <ProblemContainer>
18
+ <ProblemHeader :info="element.data.info" />
19
+ <ProblemContent :element :initialElements="element.children" />
20
+ </ProblemContainer>
21
+ </Block>
22
+ </template>
@@ -1,20 +1,20 @@
1
- <script lang="ts" setup>
2
- defineProps<{ active?: boolean }>();
3
- </script>
4
-
5
- <template>
6
- <button
7
- :class="[
8
- `bg-bg-main border-border/80 text-main-xs micro:px-2.5 min-w-[30px]
9
- cursor-pointer rounded border px-1.5 py-[5px] font-semibold shadow
10
- shadow-[light-dark(#d9d9d9,#3c3c3c)]
11
- transition-[color,background,border,box-shadow]`,
12
- {
13
- 'border-brand/50 bg-brand/10 text-brand': active,
14
- ['text-text-muted hocus:text-brand hocus:border-brand/50']: !active,
15
- },
16
- ]"
17
- >
18
- <slot></slot>
19
- </button>
20
- </template>
1
+ <script lang="ts" setup>
2
+ defineProps<{ active?: boolean }>();
3
+ </script>
4
+
5
+ <template>
6
+ <button
7
+ :class="[
8
+ `bg-bg-main border-border/80 text-main-xs micro:px-2.5 min-w-[30px]
9
+ cursor-pointer rounded border px-1.5 py-[5px] font-semibold shadow
10
+ shadow-[light-dark(#d9d9d9,#3c3c3c)]
11
+ transition-[color,background,border,box-shadow]`,
12
+ {
13
+ 'border-brand/50 bg-brand/10 text-brand': active,
14
+ ['text-text-muted hocus:text-brand hocus:border-brand/50']: !active,
15
+ },
16
+ ]"
17
+ >
18
+ <slot></slot>
19
+ </button>
20
+ </template>