@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,38 +1,36 @@
1
- <script lang="ts" setup>
2
- import { watchEffect } from 'vue';
3
- import {
4
- isProseElement,
5
- type AnySchema,
6
- type ProseElement,
7
- } from '@jsprose/core';
8
-
9
- import { problemSectionSchema } from '../../problemContent.js';
10
- import { useArrayContainsAnchor } from '../../../../app/composables/anchor.js';
11
- import ProblemExpander from '../ProblemExpander.vue';
12
- import ProblemExpanderSection from '../ProblemExpanderSection.vue';
13
- import Render from '../../../../app/shared/Render.vue';
14
-
15
- const { value } = defineProps<{ value: ProseElement<AnySchema> }>();
16
-
17
- const defaultBlocks = value.children!.filter(
18
- (element) => !isProseElement(element, problemSectionSchema),
19
- );
20
-
21
- const sections = value.children!.filter((element) =>
22
- isProseElement(element, problemSectionSchema),
23
- ) as ProseElement<typeof problemSectionSchema>[];
24
- </script>
25
-
26
- <template>
27
- <ProblemExpander>
28
- <div v-if="defaultBlocks.length" class="py-(--proseAsideWidth)">
29
- <Render v-for="child of defaultBlocks" :element="child" />
30
- </div>
31
- <ProblemExpanderSection
32
- v-if="sections.length"
33
- v-for="section of sections"
34
- :title="section.data"
35
- :element="section"
36
- />
37
- </ProblemExpander>
38
- </template>
1
+ <script lang="ts" setup>
2
+ import {
3
+ isProseElement,
4
+ type AnySchema,
5
+ type ProseElement,
6
+ } from '@jsprose/core';
7
+
8
+ import { problemSectionSchema } from '../../problemContent.js';
9
+ import ProblemExpander from '../ProblemExpander.vue';
10
+ import ProblemExpanderSection from '../ProblemExpanderSection.vue';
11
+ import Render from '../../../../app/shared/Render.vue';
12
+
13
+ const { value } = defineProps<{ value: ProseElement<AnySchema> }>();
14
+
15
+ const defaultBlocks = value.children!.filter(
16
+ (element) => !isProseElement(element, problemSectionSchema),
17
+ );
18
+
19
+ const sections = value.children!.filter((element) =>
20
+ isProseElement(element, problemSectionSchema),
21
+ ) as ProseElement<typeof problemSectionSchema>[];
22
+ </script>
23
+
24
+ <template>
25
+ <ProblemExpander>
26
+ <div v-if="defaultBlocks.length" class="py-(--proseAsideWidth)">
27
+ <Render v-for="child of defaultBlocks" :element="child" />
28
+ </div>
29
+ <ProblemExpanderSection
30
+ v-if="sections.length"
31
+ v-for="section of sections"
32
+ :title="section.data"
33
+ :element="section"
34
+ />
35
+ </ProblemExpander>
36
+ </template>
@@ -1,26 +1,26 @@
1
- <script lang="ts" setup>
2
- import type { ProseElement } from '@jsprose/core';
3
-
4
- import type { problemHintSchema } from '../../problemContent.js';
5
- import { useProblemPhrase } from '../../composables/phrase.js';
6
- import ProblemExpander from '../ProblemExpander.vue';
7
- import Render from '../../../../app/shared/Render.vue';
8
- import ProblemExpanderSection from '../ProblemExpanderSection.vue';
9
-
10
- defineProps<{ value: ProseElement<typeof problemHintSchema>[] }>();
11
- const phrase = await useProblemPhrase();
12
- </script>
13
-
14
- <template>
15
- <ProblemExpander>
16
- <div v-if="value.length === 1" class="py-(--proseAsideWidth)">
17
- <Render v-for="child of value[0]!.children" :element="child" />
18
- </div>
19
- <ProblemExpanderSection
20
- v-else
21
- v-for="(hint, i) of value"
22
- :title="phrase.action_hint + ' ' + (i + 1)"
23
- :element="hint"
24
- />
25
- </ProblemExpander>
26
- </template>
1
+ <script lang="ts" setup>
2
+ import type { ProseElement } from '@jsprose/core';
3
+
4
+ import type { problemHintSchema } from '../../problemContent.js';
5
+ import { useProblemPhrase } from '../../composables/phrase.js';
6
+ import ProblemExpander from '../ProblemExpander.vue';
7
+ import Render from '../../../../app/shared/Render.vue';
8
+ import ProblemExpanderSection from '../ProblemExpanderSection.vue';
9
+
10
+ defineProps<{ value: ProseElement<typeof problemHintSchema>[] }>();
11
+ const phrase = await useProblemPhrase();
12
+ </script>
13
+
14
+ <template>
15
+ <ProblemExpander>
16
+ <div v-if="value.length === 1" class="py-(--proseAsideWidth)">
17
+ <Render v-for="child of value[0]!.children" :element="child" />
18
+ </div>
19
+ <ProblemExpanderSection
20
+ v-else
21
+ v-for="(hint, i) of value"
22
+ :title="phrase.action_hint + ' ' + (i + 1)"
23
+ :element="hint"
24
+ />
25
+ </ProblemExpander>
26
+ </template>
@@ -93,68 +93,95 @@ declare const _default: [{
93
93
  name: "problemCheck";
94
94
  type: "block";
95
95
  linkable: false;
96
- Data: import("./problemContent.js").ProblemCheckData;
96
+ Data: import("./problemCheck.js").ProblemCheckData;
97
97
  Storage: undefined;
98
- Children: import("@jsprose/core").BlockSchema[];
98
+ Children: import("./problemCheck.js").ProblemCheckSchema[] | undefined;
99
99
  }, {
100
100
  ProblemCheck: import("@jsprose/core").Tag<"ProblemCheck", {
101
101
  name: "problemCheck";
102
102
  type: "block";
103
103
  linkable: false;
104
- Data: import("./problemContent.js").ProblemCheckData;
104
+ Data: import("./problemCheck.js").ProblemCheckData;
105
105
  Storage: undefined;
106
- Children: import("@jsprose/core").BlockSchema[];
106
+ Children: import("./problemCheck.js").ProblemCheckSchema[] | undefined;
107
107
  }, ({
108
108
  label?: string;
109
109
  hint?: string;
110
110
  placeholder?: string;
111
111
  } & (((Pick<{
112
- answer: string | number | RegExp | undefined;
113
- answers: (string | number | RegExp | undefined)[];
114
- set: ((string | number | RegExp | undefined) | (string | number | RegExp | undefined)[])[] | {
115
- separator: string;
116
- values: ((string | number | RegExp | undefined) | (string | number | RegExp | undefined)[])[];
112
+ yes: true;
113
+ no: true;
114
+ answer: import("./problemCheck.js").ProblemCheckValue;
115
+ answers: (import("./problemCheck.js").ProblemCheckValueDefined | import("./problemCheck.js").ProblemCheckValueDefined[])[] | {
116
+ ordered?: boolean;
117
+ separator?: string;
118
+ values: (import("./problemCheck.js").ProblemCheckValueDefined | import("./problemCheck.js").ProblemCheckValueDefined[])[];
117
119
  };
118
120
  script: string;
119
121
  }, "answer"> & {
120
- set?: undefined;
122
+ yes?: undefined;
123
+ no?: undefined;
121
124
  answers?: undefined;
122
125
  script?: undefined;
123
126
  }) | (Pick<{
124
- answer: string | number | RegExp | undefined;
125
- answers: (string | number | RegExp | undefined)[];
126
- set: ((string | number | RegExp | undefined) | (string | number | RegExp | undefined)[])[] | {
127
- separator: string;
128
- values: ((string | number | RegExp | undefined) | (string | number | RegExp | undefined)[])[];
127
+ yes: true;
128
+ no: true;
129
+ answer: import("./problemCheck.js").ProblemCheckValue;
130
+ answers: (import("./problemCheck.js").ProblemCheckValueDefined | import("./problemCheck.js").ProblemCheckValueDefined[])[] | {
131
+ ordered?: boolean;
132
+ separator?: string;
133
+ values: (import("./problemCheck.js").ProblemCheckValueDefined | import("./problemCheck.js").ProblemCheckValueDefined[])[];
129
134
  };
130
135
  script: string;
131
- }, "set"> & {
136
+ }, "yes"> & {
132
137
  answer?: undefined;
138
+ no?: undefined;
133
139
  answers?: undefined;
134
140
  script?: undefined;
135
141
  }) | (Pick<{
136
- answer: string | number | RegExp | undefined;
137
- answers: (string | number | RegExp | undefined)[];
138
- set: ((string | number | RegExp | undefined) | (string | number | RegExp | undefined)[])[] | {
139
- separator: string;
140
- values: ((string | number | RegExp | undefined) | (string | number | RegExp | undefined)[])[];
142
+ yes: true;
143
+ no: true;
144
+ answer: import("./problemCheck.js").ProblemCheckValue;
145
+ answers: (import("./problemCheck.js").ProblemCheckValueDefined | import("./problemCheck.js").ProblemCheckValueDefined[])[] | {
146
+ ordered?: boolean;
147
+ separator?: string;
148
+ values: (import("./problemCheck.js").ProblemCheckValueDefined | import("./problemCheck.js").ProblemCheckValueDefined[])[];
149
+ };
150
+ script: string;
151
+ }, "no"> & {
152
+ answer?: undefined;
153
+ yes?: undefined;
154
+ answers?: undefined;
155
+ script?: undefined;
156
+ }) | (Pick<{
157
+ yes: true;
158
+ no: true;
159
+ answer: import("./problemCheck.js").ProblemCheckValue;
160
+ answers: (import("./problemCheck.js").ProblemCheckValueDefined | import("./problemCheck.js").ProblemCheckValueDefined[])[] | {
161
+ ordered?: boolean;
162
+ separator?: string;
163
+ values: (import("./problemCheck.js").ProblemCheckValueDefined | import("./problemCheck.js").ProblemCheckValueDefined[])[];
141
164
  };
142
165
  script: string;
143
166
  }, "answers"> & {
144
167
  answer?: undefined;
145
- set?: undefined;
168
+ yes?: undefined;
169
+ no?: undefined;
146
170
  script?: undefined;
147
171
  }) | (Pick<{
148
- answer: string | number | RegExp | undefined;
149
- answers: (string | number | RegExp | undefined)[];
150
- set: ((string | number | RegExp | undefined) | (string | number | RegExp | undefined)[])[] | {
151
- separator: string;
152
- values: ((string | number | RegExp | undefined) | (string | number | RegExp | undefined)[])[];
172
+ yes: true;
173
+ no: true;
174
+ answer: import("./problemCheck.js").ProblemCheckValue;
175
+ answers: (import("./problemCheck.js").ProblemCheckValueDefined | import("./problemCheck.js").ProblemCheckValueDefined[])[] | {
176
+ ordered?: boolean;
177
+ separator?: string;
178
+ values: (import("./problemCheck.js").ProblemCheckValueDefined | import("./problemCheck.js").ProblemCheckValueDefined[])[];
153
179
  };
154
180
  script: string;
155
181
  }, "script"> & {
156
182
  answer?: undefined;
157
- set?: undefined;
183
+ yes?: undefined;
184
+ no?: undefined;
158
185
  answers?: undefined;
159
186
  })) & (import("@jsprose/core").TagChildren | import("@jsprose/core").NoTagChildren))) & {}>;
160
187
  }, undefined>;
@@ -1,6 +1,7 @@
1
1
  import { defineEruditProseCoreElements } from "../../coreElement.js";
2
2
  import { problemCoreElement } from "./problem.js";
3
- import { problemAnswer, problemCheckCoreElement, problemDescriptionCoreElement, problemHintCoreElement, problemNote, problemSectionCoreElement, problemSolution } from "./problemContent.js";
3
+ import { problemCheckCoreElement } from "./problemCheck.js";
4
+ import { problemAnswer, problemDescriptionCoreElement, problemHintCoreElement, problemNote, problemSectionCoreElement, problemSolution } from "./problemContent.js";
4
5
  import { problemsCoreElement, subProblemCoreElement } from "./problems.js";
5
6
  export default defineEruditProseCoreElements(
6
7
  problemDescriptionCoreElement,
@@ -1,3 +1,3 @@
1
- import type { ProblemPhrases } from '../phrases.js';
1
+ import type { ProblemPhrases } from '../../phrases.js';
2
2
  declare const _default: ProblemPhrases;
3
3
  export default _default;
@@ -0,0 +1,6 @@
1
+ import { defineElementLanguage } from "../../../../app/language/element.js";
2
+ import en from "../shared/en.js";
3
+ export default defineElementLanguage({
4
+ ...en,
5
+ element_name: "Problem"
6
+ });
@@ -1,3 +1,3 @@
1
- import type { ProblemPhrases } from '../phrases.js';
1
+ import type { ProblemPhrases } from '../../phrases.js';
2
2
  declare const _default: ProblemPhrases;
3
3
  export default _default;
@@ -0,0 +1,6 @@
1
+ import { defineElementLanguage } from "../../../../app/language/element.js";
2
+ import ru from "../shared/ru.js";
3
+ export default defineElementLanguage({
4
+ ...ru,
5
+ element_name: "Задача"
6
+ });
@@ -0,0 +1,3 @@
1
+ import type { ProblemPhrases } from '../../phrases.js';
2
+ declare const _default: ProblemPhrases;
3
+ export default _default;
@@ -0,0 +1,6 @@
1
+ import { defineElementLanguage } from "../../../../app/language/element.js";
2
+ import en from "../shared/en.js";
3
+ export default defineElementLanguage({
4
+ ...en,
5
+ element_name: "Problems"
6
+ });
@@ -0,0 +1,3 @@
1
+ import type { ProblemPhrases } from '../../phrases.js';
2
+ declare const _default: ProblemPhrases;
3
+ export default _default;
@@ -0,0 +1,6 @@
1
+ import { defineElementLanguage } from "../../../../app/language/element.js";
2
+ import ru from "../shared/ru.js";
3
+ export default defineElementLanguage({
4
+ ...ru,
5
+ element_name: "Задачи"
6
+ });
@@ -0,0 +1,3 @@
1
+ import type { ProblemPhrases } from '../../phrases.js';
2
+ declare const _default: ProblemPhrases;
3
+ export default _default;
@@ -1,6 +1,6 @@
1
- import { defineElementLanguage } from "../../../app/language/element.js";
1
+ import { defineElementLanguage } from "../../../../app/language/element.js";
2
2
  export default defineElementLanguage({
3
- element_name: "Problem",
3
+ element_name: "",
4
4
  "level.example": "Example",
5
5
  "level.easy": "Elementary",
6
6
  "level.medium": "Intermediate",
@@ -20,5 +20,14 @@ export default defineElementLanguage({
20
20
  action_note: "Note",
21
21
  action_check: "Check",
22
22
  action_generate: "Similar",
23
- seed_explain: "The seed from which all random values in the problem are calculated. Same seeds = completely identical problems."
23
+ seed_explain: "The seed from which all random values in the problem are calculated. Same seeds = completely identical problems.",
24
+ yes_regexp: /^\s*(yes|y|true|1)\s*$/i,
25
+ no_regexp: /^\s*(no|n|false|0)\s*$/i,
26
+ boolean_check_hint: "Yes/No",
27
+ array_check_hint: (ordered, separator) => {
28
+ let hint = "";
29
+ hint += separator === "," ? "Comma separated." : `Separator "${separator}".`;
30
+ hint += ordered ? " Order matters." : " In any order.";
31
+ return hint;
32
+ }
24
33
  });
@@ -0,0 +1,3 @@
1
+ import type { ProblemPhrases } from '../../phrases.js';
2
+ declare const _default: ProblemPhrases;
3
+ export default _default;
@@ -1,6 +1,6 @@
1
- import { defineElementLanguage } from "../../../app/language/element.js";
1
+ import { defineElementLanguage } from "../../../../app/language/element.js";
2
2
  export default defineElementLanguage({
3
- element_name: "Задача",
3
+ element_name: "",
4
4
  "level.example": "Пример",
5
5
  "level.easy": "Ликбез",
6
6
  "level.medium": "Нормальный",
@@ -20,5 +20,14 @@ export default defineElementLanguage({
20
20
  action_note: "Примечание",
21
21
  action_check: "Проверить",
22
22
  action_generate: "Аналог",
23
- seed_explain: "Зерно, от которого высчитываются все случайные величины в задаче. Одинаковые зерна = полностью идентичные задачи."
23
+ seed_explain: "Зерно, от которого высчитываются все случайные величины в задаче. Одинаковые зерна = полностью идентичные задачи.",
24
+ yes_regexp: /^\s*(да|1)\s*$/i,
25
+ no_regexp: /^\s*(нет|0)\s*$/i,
26
+ boolean_check_hint: "Да/Нет",
27
+ array_check_hint: (ordered, separator) => {
28
+ let hint = "";
29
+ hint += separator === "," ? "Через запятую." : `Разделитель "${separator}".`;
30
+ hint += ordered ? " Порядок важен." : " В любом порядке.";
31
+ return hint;
32
+ }
24
33
  });
@@ -13,4 +13,8 @@ export type ProblemPhrases = ElementPhrases<{
13
13
  action_check: string;
14
14
  action_generate: string;
15
15
  seed_explain: string;
16
+ yes_regexp: RegExp;
17
+ no_regexp: RegExp;
18
+ boolean_check_hint: string;
19
+ array_check_hint: (ordered: boolean, separator: string) => string;
16
20
  }>;
@@ -0,0 +1,166 @@
1
+ import { type NoTagChildren, type TagChildren } from '@jsprose/core';
2
+ export interface ProblemCheckInfo {
3
+ label?: string;
4
+ hint?: string;
5
+ placeholder?: string;
6
+ }
7
+ export type ProblemCheckData = ProblemCheckInfo & {
8
+ serializedValidator: any;
9
+ };
10
+ export type ProblemCheckSchema = {
11
+ name: 'problemCheck';
12
+ type: 'block';
13
+ linkable: false;
14
+ Data: ProblemCheckData;
15
+ Storage: undefined;
16
+ Children: ProblemCheckSchema[] | undefined;
17
+ };
18
+ export declare const problemCheckSchema: {
19
+ name: "problemCheck";
20
+ type: "block";
21
+ linkable: false;
22
+ Data: ProblemCheckData;
23
+ Storage: undefined;
24
+ Children: ProblemCheckSchema[] | undefined;
25
+ };
26
+ type UndefinedOnly<T> = {
27
+ [K in keyof T]?: undefined;
28
+ };
29
+ type OneOf<T extends Record<string, any>> = {
30
+ [K in keyof T]: Pick<T, K> & UndefinedOnly<Omit<T, K>>;
31
+ }[keyof T];
32
+ export declare const ProblemCheck: import("@jsprose/core").Tag<"ProblemCheck", {
33
+ name: "problemCheck";
34
+ type: "block";
35
+ linkable: false;
36
+ Data: ProblemCheckData;
37
+ Storage: undefined;
38
+ Children: ProblemCheckSchema[] | undefined;
39
+ }, ({
40
+ label?: string;
41
+ hint?: string;
42
+ placeholder?: string;
43
+ } & (OneOf<{
44
+ yes: true;
45
+ no: true;
46
+ answer: ProblemCheckValue;
47
+ answers: (ProblemCheckValueDefined | ProblemCheckValueDefined[])[] | {
48
+ ordered?: boolean;
49
+ separator?: string;
50
+ values: (ProblemCheckValueDefined | ProblemCheckValueDefined[])[];
51
+ };
52
+ script: string;
53
+ }> & (TagChildren | NoTagChildren))) & {}>;
54
+ export declare const problemCheckRegistryItem: import("@jsprose/core").RegistryItem<{
55
+ name: "problemCheck";
56
+ type: "block";
57
+ linkable: false;
58
+ Data: ProblemCheckData;
59
+ Storage: undefined;
60
+ Children: ProblemCheckSchema[] | undefined;
61
+ }, {
62
+ ProblemCheck: import("@jsprose/core").Tag<"ProblemCheck", {
63
+ name: "problemCheck";
64
+ type: "block";
65
+ linkable: false;
66
+ Data: ProblemCheckData;
67
+ Storage: undefined;
68
+ Children: ProblemCheckSchema[] | undefined;
69
+ }, ({
70
+ label?: string;
71
+ hint?: string;
72
+ placeholder?: string;
73
+ } & (OneOf<{
74
+ yes: true;
75
+ no: true;
76
+ answer: ProblemCheckValue;
77
+ answers: (ProblemCheckValueDefined | ProblemCheckValueDefined[])[] | {
78
+ ordered?: boolean;
79
+ separator?: string;
80
+ values: (ProblemCheckValueDefined | ProblemCheckValueDefined[])[];
81
+ };
82
+ script: string;
83
+ }> & (TagChildren | NoTagChildren))) & {}>;
84
+ }, undefined>;
85
+ export declare const problemCheckCoreElement: {
86
+ registryItem: import("@jsprose/core").RegistryItem<{
87
+ name: "problemCheck";
88
+ type: "block";
89
+ linkable: false;
90
+ Data: ProblemCheckData;
91
+ Storage: undefined;
92
+ Children: ProblemCheckSchema[] | undefined;
93
+ }, {
94
+ ProblemCheck: import("@jsprose/core").Tag<"ProblemCheck", {
95
+ name: "problemCheck";
96
+ type: "block";
97
+ linkable: false;
98
+ Data: ProblemCheckData;
99
+ Storage: undefined;
100
+ Children: ProblemCheckSchema[] | undefined;
101
+ }, ({
102
+ label?: string;
103
+ hint?: string;
104
+ placeholder?: string;
105
+ } & (OneOf<{
106
+ yes: true;
107
+ no: true;
108
+ answer: ProblemCheckValue;
109
+ answers: (ProblemCheckValueDefined | ProblemCheckValueDefined[])[] | {
110
+ ordered?: boolean;
111
+ separator?: string;
112
+ values: (ProblemCheckValueDefined | ProblemCheckValueDefined[])[];
113
+ };
114
+ script: string;
115
+ }> & (TagChildren | NoTagChildren))) & {}>;
116
+ }, undefined>;
117
+ };
118
+ export interface ProblemCheckValidatorBoolean {
119
+ type: 'boolean';
120
+ answer: boolean;
121
+ }
122
+ export type ProblemCheckValue = undefined | number | string | RegExp;
123
+ export type ProblemCheckValueDefined = Exclude<ProblemCheckValue, undefined>;
124
+ export interface ProblemCheckValidatorValue {
125
+ type: 'value';
126
+ answer: ProblemCheckValue;
127
+ }
128
+ export interface ProblemCheckValidatorArray {
129
+ type: 'array';
130
+ ordered: boolean;
131
+ separator: string;
132
+ answers: (ProblemCheckValueDefined | ProblemCheckValueDefined[])[];
133
+ }
134
+ export interface ProblemCheckValidatorScript {
135
+ type: 'script';
136
+ name: string;
137
+ }
138
+ export type ProblemCheckValidator = ProblemCheckValidatorBoolean | ProblemCheckValidatorValue | ProblemCheckValidatorArray | ProblemCheckValidatorScript;
139
+ export declare function toSerializableValidator(validator: ProblemCheckValidator): ProblemCheckValidatorBoolean | ProblemCheckValidatorScript | {
140
+ type: string;
141
+ answer: string | number | {
142
+ readonly type: "regexp";
143
+ readonly source: string;
144
+ readonly flags: string;
145
+ } | undefined;
146
+ ordered?: undefined;
147
+ separator?: undefined;
148
+ answers?: undefined;
149
+ } | {
150
+ type: string;
151
+ ordered: boolean;
152
+ separator: string;
153
+ answers: (string | number | {
154
+ readonly type: "regexp";
155
+ readonly source: string;
156
+ readonly flags: string;
157
+ } | (string | number | {
158
+ readonly type: "regexp";
159
+ readonly source: string;
160
+ readonly flags: string;
161
+ } | undefined)[] | undefined)[];
162
+ answer?: undefined;
163
+ };
164
+ export declare function fromSerializableValidator(serializedValidator: any): ProblemCheckValidator;
165
+ export declare function checkProblemAnswer(answer: string, yesRegexp: RegExp, noRegexp: RegExp, validator: ProblemCheckValidator): boolean;
166
+ export {};