@seamlet/astro 2.0.0 → 2.2.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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,16 @@
1
1
  # Changelog
2
2
 
3
+ ## 2.2.0
4
+
5
+ - Moving parts: `data-cms-popover` (`POPOVER_ATTRIBUTE`) on a part of the page that moves, or on a marked element, has its fields edited in the editor's popover instead of typed in place, and in the editor the part holds still while the pointer is over it and once one of its fields is chosen: the bridge pauses its CSS animations and transitions and sets `data-cms-held` (`HELD_ATTRIBUTE`), by which a site stops motion it runs with a script. The protocol is the same, so every editor reads it.
6
+
7
+ ## 2.1.0
8
+
9
+ - The visitor's consent is a document of its own, as 152-ФЗ asks since 1 September 2025: `privacyConsentFields()` and `privacyConsentTextOf(source)` make it, at `/consent` of the site (`CONSENT_PAGE_PATH`), and the checkbox of `RequestForm.astro` links to it and to the policy («Даю согласие на обработку персональных данных и принимаю политику их обработки»; `consentHref` names another page).
10
+ - `privacyPolicyTextOf` follows the sections Роскомнадзор recommends a policy to have: general provisions, purposes with the data, subjects, ways, terms and erasure of each, legal grounds, the data and whose it is, how it is processed and protected (the commission to Seamlet, storage in Russia, notice of leaks), and how it is corrected, erased and asked about, with the terms of the law.
11
+
12
+ A site with a form adds the page `/consent` (or passes `consentHref`).
13
+
3
14
  ## 2.0.0
4
15
 
5
16
  - The consent of a form links to the business's own policy, a page of the site (`policyHref`, `/privacy` by default, `PRIVACY_PAGE_PATH`), not to texts kept by the CMS: the business is the operator of its visitors' data, and the CMS only passes requests on. `privacyPolicyFields()` is the policy as content and `privacyPolicyTextOf({ siteTitle, operator, forms })` a template to start it with.
package/README.md CHANGED
@@ -373,6 +373,20 @@ A field is edited where it is seen, so the editor opens what hides it when a per
373
373
 
374
374
  What was opened stays open while the page is rendered anew after every edit: a part is known again by its `id`, or else by the field marked on it, in it or around it.
375
375
 
376
+ ### Moving parts
377
+
378
+ A text that moves (a marquee, a flipping board, a turning stamp) cannot be typed where it stands, and a moving thing is hard to click. Give such a part, or the marked element itself, the attribute `data-cms-popover` (`POPOVER_ATTRIBUTE`): its fields are edited in the editor's popover, never typed on the page, and in the editor the part holds still while the pointer is over it and once one of its fields is chosen. The bridge pauses the part's CSS animations and transitions itself and sets `data-cms-held` (`HELD_ATTRIBUTE`) on it; motion the site runs with a script stops while that attribute is there. Outside the editor nothing changes.
379
+
380
+ ```astro
381
+ ---
382
+ import { POPOVER_ATTRIBUTE } from "@seamlet/astro/schema";
383
+ ---
384
+
385
+ <div class="marquee" {...{ [POPOVER_ATTRIBUTE]: "" }}>
386
+ <p {...edit("specials", "line")}>{content.specials.line}</p>
387
+ </div>
388
+ ```
389
+
376
390
  ## Requests
377
391
 
378
392
  A visitor sends the business a request from the site: «Обратный звонок», «Рассчитать стоимость», «Бронь столика». The site declares its forms, gives them to `defineSeamletSite` and renders them; the CMS passes every request on by mail to the people who edit the site and keeps nothing once it is delivered.
@@ -420,9 +434,9 @@ import { estimateForm } from "../forms";
420
434
 
421
435
  The fields are `requestText` (a line), `requestLongText` (several lines), `requestPhone`, `requestEmail` and `requestChoice` (one of `options`); each may be `required`, and a text has a `maxLength` (200 for a line, 2000 for several by default). A field's name is a name such as `phone` or `preferredTime`. The form's `title` names its requests in the CMS and in the letters.
422
436
 
423
- `RequestForm.astro` renders plain elements with classes (`seamlet-form`, `seamlet-form-field`, `seamlet-form-issue`, `seamlet-form-consent`, `seamlet-form-submit`, `seamlet-form-sent`, `seamlet-form-failed`), which the site styles from around it: `.contacts :global(.seamlet-form-field)`. Its props are the `form`, the words of the button (`submitLabel`), what the visitor reads once the request is sent or could not be (`sentText`, `failedText`), the page of the business's policy the consent links to (`policyHref`, the site's own `/privacy` by default, `PRIVACY_PAGE_PATH`) and `instance`, which tells apart two forms of the same id on one page.
437
+ `RequestForm.astro` renders plain elements with classes (`seamlet-form`, `seamlet-form-field`, `seamlet-form-issue`, `seamlet-form-consent`, `seamlet-form-submit`, `seamlet-form-sent`, `seamlet-form-failed`), which the site styles from around it: `.contacts :global(.seamlet-form-field)`. Its props are the `form`, the words of the button (`submitLabel`), what the visitor reads once the request is sent or could not be (`sentText`, `failedText`), the pages of the visitor's consent and of the business's policy the checkbox links to (`consentHref` and `policyHref`, the site's own `/consent` and `/privacy` by default, `CONSENT_PAGE_PATH` and `PRIVACY_PAGE_PATH`) and `instance`, which tells apart two forms of the same id on one page.
424
438
 
425
- The visitor consents with a checkbox of its own, never checked beforehand, on the terms of the business's policy, a page of the site: `/privacy` unless `policyHref` names another. The business is the operator of its visitors' data and publishes its policy; Seamlet only passes a request on by its commission. `privacyPolicyFields()` is the policy as content the owner edits, and `privacyPolicyTextOf({ siteTitle, operator, forms })` starts it with the business's details and what its forms ask (152-ФЗ): put it in the initial content and render it with `RichText` at `/privacy`. While the CMS has nobody to mail a site's requests to, it takes none, and the form says it could not send. Without a script the form is posted to the CMS, which answers with a page of its own; with the package's script (on every page, loaded only where a form is) the visitor stays on the page. The script checks what was typed with the code the CMS checks it with (`readRequestValues`), says what to fix under each field and sends the request.
439
+ The visitor consents with a checkbox of its own, never checked beforehand, linking to two pages of the site: the consent, a document of its own as 152-ФЗ asks (`/consent` unless `consentHref` names another), and the business's policy (`/privacy` unless `policyHref` names another). The business is the operator of its visitors' data and publishes both; Seamlet only passes a request on by its commission. `privacyConsentFields()` and `privacyPolicyFields()` are the two as content the owner edits, and `privacyConsentTextOf(source)` and `privacyPolicyTextOf(source)` (`source` is `{ siteTitle, operator, forms }`) start them with the business's details and what its forms ask, the policy in the sections Роскомнадзор recommends: put them in the initial content and render each with `RichText` at its page. While the CMS has nobody to mail a site's requests to, it takes none, and the form says it could not send. Without a script the form is posted to the CMS, which answers with a page of its own; with the package's script (on every page, loaded only where a form is) the visitor stays on the page. The script checks what was typed with the code the CMS checks it with (`readRequestValues`), says what to fix under each field and sends the request.
426
440
 
427
441
  The site's own code hears every step from events on the form element, which bubble:
428
442
 
@@ -2,10 +2,11 @@
2
2
  // A form of the site's requests as plain elements, which the site styles from around it
3
3
  // (`.contacts :global(.seamlet-form-field)`). Without a script it is a form posted to the CMS, and
4
4
  // the CMS answers with a page of its own; the package's script sends it in place. The checkbox of
5
- // consent stands apart from the fields and is never checked beforehand, as the law asks: the
6
- // visitor consents on the terms of the business's policy, a page of the site itself.
5
+ // consent stands apart from the fields and is never checked beforehand, as the law asks, and links
6
+ // to the consent and the policy of the business, pages of the site itself.
7
7
  import { cmsOrigin, siteId } from "virtual:seamlet/config";
8
8
  import {
9
+ CONSENT_PAGE_PATH,
9
10
  maxLengthOf,
10
11
  PRIVACY_PAGE_PATH,
11
12
  REQUEST_CONSENT_KEY,
@@ -25,6 +26,8 @@ interface Props {
25
26
  readonly sentText?: string;
26
27
  /** What the visitor reads when the request could not be sent. */
27
28
  readonly failedText?: string;
29
+ /** Where the visitor's consent is: the site's `/consent` unless it says another page. */
30
+ readonly consentHref?: string;
28
31
  /** Where the business's policy is: the site's `/privacy` unless it says another page. */
29
32
  readonly policyHref?: string;
30
33
  /** Tells two forms of the same id on one page apart, in the ids of their elements. */
@@ -37,6 +40,7 @@ const {
37
40
  submitLabel = "Отправить",
38
41
  sentText = "Спасибо! Заявка отправлена, мы скоро свяжемся с вами.",
39
42
  failedText = "Не получилось отправить заявку. Попробуйте ещё раз чуть позже.",
43
+ consentHref = CONSENT_PAGE_PATH,
40
44
  policyHref = PRIVACY_PAGE_PATH,
41
45
  instance = form.id,
42
46
  class: className,
@@ -142,9 +146,13 @@ const isLineField = (field: RequestField): field is LineField =>
142
146
  aria-describedby={issueIdOf(REQUEST_CONSENT_KEY)}
143
147
  />
144
148
  <label for={idOf(REQUEST_CONSENT_KEY)}>
145
- Даю согласие на обработку персональных данных на условиях{" "}
149
+ Даю{" "}
150
+ <a href={consentHref} target="_blank" rel="noopener">
151
+ согласие на обработку персональных данных
152
+ </a>{" "}
153
+ и принимаю{" "}
146
154
  <a href={policyHref} target="_blank" rel="noopener">
147
- политики
155
+ политику их обработки
148
156
  </a>
149
157
  </label>
150
158
  <p
package/dist/bridge.js CHANGED
@@ -18,9 +18,11 @@ import {
18
18
  shortcutOf,
19
19
  toggleList,
20
20
  toggleMark
21
- } from "./chunk-XZDRTVJH.js";
21
+ } from "./chunk-CRGGWROR.js";
22
22
  import {
23
23
  FIELD_PATH_ATTRIBUTE,
24
+ HELD_ATTRIBUTE,
25
+ POPOVER_ATTRIBUTE,
24
26
  REVEALED_ATTRIBUTE,
25
27
  REVEAL_ATTRIBUTE,
26
28
  REVEAL_EVENT,
@@ -28,34 +30,12 @@ import {
28
30
  readRichText,
29
31
  resolveFieldPath,
30
32
  safeHref
31
- } from "./chunk-PAGIPRTS.js";
33
+ } from "./chunk-M5XOTSSU.js";
32
34
 
33
- // src/bridge/typed-fields.ts
34
- function typedKindAt(schema, path) {
35
- const target = resolveFieldPath(schema, path);
36
- if (target?.kind !== "field") return void 0;
37
- switch (target.field.kind) {
38
- case "text":
39
- return "plain";
40
- case "richText":
41
- return "rich";
42
- case "number":
43
- case "date":
44
- case "time":
45
- case "slug":
46
- case "image":
47
- case "file":
48
- case "link":
49
- case "url":
50
- case "toggle":
51
- case "choice":
52
- case "choices":
53
- case "reference":
54
- case "references":
55
- case "group":
56
- case "collection":
57
- return void 0;
58
- }
35
+ // src/bridge/dom-nodes.ts
36
+ function asElement(value) {
37
+ const isElement = typeof value === "object" && value !== null && "nodeType" in value && value.nodeType === Node.ELEMENT_NODE;
38
+ return isElement ? value : void 0;
59
39
  }
60
40
 
61
41
  // src/bridge/event-listening.ts
@@ -97,12 +77,6 @@ function listenToAll(listenings) {
97
77
  };
98
78
  }
99
79
 
100
- // src/bridge/dom-nodes.ts
101
- function asElement(value) {
102
- const isElement = typeof value === "object" && value !== null && "nodeType" in value && value.nodeType === Node.ELEMENT_NODE;
103
- return isElement ? value : void 0;
104
- }
105
-
106
80
  // src/bridge/page-markers.ts
107
81
  var MARKER_SELECTOR = `[${FIELD_PATH_ATTRIBUTE}]`;
108
82
  var HTML_NAMESPACE = "http://www.w3.org/1999/xhtml";
@@ -149,6 +123,115 @@ function isHtmlElement(value) {
149
123
  return asElement(value)?.namespaceURI === HTML_NAMESPACE;
150
124
  }
151
125
 
126
+ // src/bridge/held-motion.ts
127
+ var POPOVER_SELECTOR = `[${POPOVER_ATTRIBUTE}]`;
128
+ function isEditedInPopover(element) {
129
+ return element.closest(POPOVER_SELECTOR) !== null;
130
+ }
131
+ function holdMotionOnPage(document2) {
132
+ const paused = /* @__PURE__ */ new Map();
133
+ let hovered;
134
+ let chosenPath;
135
+ const chosenPart = () => {
136
+ if (chosenPath === void 0) return void 0;
137
+ const element = findMarkedElement(document2, chosenPath);
138
+ return element?.closest(POPOVER_SELECTOR) ?? void 0;
139
+ };
140
+ const update = () => {
141
+ const parts = /* @__PURE__ */ new Set([hovered, chosenPart()]);
142
+ for (const part of [...paused.keys()]) {
143
+ if (!parts.has(part)) release(part, paused);
144
+ }
145
+ for (const part of parts) {
146
+ if (part !== void 0 && !paused.has(part)) hold(part, paused);
147
+ }
148
+ };
149
+ const stopListening = listenToAll(
150
+ listeningsOf(document2, {
151
+ onPointerOver: (target) => {
152
+ hovered = partAround(target);
153
+ update();
154
+ },
155
+ onPointerLeave: () => {
156
+ hovered = void 0;
157
+ update();
158
+ },
159
+ onClick: (target) => {
160
+ const marked = markedElementAround(target);
161
+ const isMoving = marked !== void 0 && isEditedInPopover(marked.element);
162
+ chosenPath = isMoving ? marked.path : void 0;
163
+ update();
164
+ }
165
+ })
166
+ );
167
+ return {
168
+ holdAgain: update,
169
+ stop: () => {
170
+ stopListening();
171
+ for (const part of [...paused.keys()]) release(part, paused);
172
+ }
173
+ };
174
+ }
175
+ function listeningsOf(document2, listeners) {
176
+ return [
177
+ onDocument(document2, "mouseover", (event) => {
178
+ listeners.onPointerOver(event.target);
179
+ }),
180
+ onDocument(document2, "click", (event) => {
181
+ listeners.onClick(event.target);
182
+ }),
183
+ onElement(document2.documentElement, "mouseleave", listeners.onPointerLeave)
184
+ ];
185
+ }
186
+ function partAround(target) {
187
+ return asElement(target)?.closest(POPOVER_SELECTOR) ?? void 0;
188
+ }
189
+ function hold(part, paused) {
190
+ const running = animationsOf(part).filter(
191
+ (animation) => animation.playState === "running"
192
+ );
193
+ for (const animation of running) animation.pause();
194
+ part.setAttribute(HELD_ATTRIBUTE, "");
195
+ paused.set(part, running);
196
+ }
197
+ function release(part, paused) {
198
+ for (const animation of paused.get(part) ?? []) animation.play();
199
+ part.removeAttribute(HELD_ATTRIBUTE);
200
+ paused.delete(part);
201
+ }
202
+ function animationsOf(part) {
203
+ if (typeof part.getAnimations !== "function") return [];
204
+ return part.getAnimations({ subtree: true });
205
+ }
206
+
207
+ // src/bridge/typed-fields.ts
208
+ function typedKindAt(schema, path) {
209
+ const target = resolveFieldPath(schema, path);
210
+ if (target?.kind !== "field") return void 0;
211
+ switch (target.field.kind) {
212
+ case "text":
213
+ return "plain";
214
+ case "richText":
215
+ return "rich";
216
+ case "number":
217
+ case "date":
218
+ case "time":
219
+ case "slug":
220
+ case "image":
221
+ case "file":
222
+ case "link":
223
+ case "url":
224
+ case "toggle":
225
+ case "choice":
226
+ case "choices":
227
+ case "reference":
228
+ case "references":
229
+ case "group":
230
+ case "collection":
231
+ return void 0;
232
+ }
233
+ }
234
+
152
235
  // src/bridge/page-reveals.ts
153
236
  var DETAILS_SELECTOR = "details";
154
237
  var REVEAL_SELECTOR = `[${REVEAL_ATTRIBUTE}]`;
@@ -456,20 +539,20 @@ function followPresses(document2, onRelease) {
456
539
  clearTimeout(releaseTimer);
457
540
  isPressed = true;
458
541
  };
459
- const release = () => {
542
+ const release2 = () => {
460
543
  if (!isPressed) return;
461
544
  isPressed = false;
462
545
  releaseTimer = setTimeout(onRelease, 0);
463
546
  };
464
547
  const releaseOnMove = (event) => {
465
- if (event.buttons === 0) release();
548
+ if (event.buttons === 0) release2();
466
549
  };
467
550
  const stopListening = listenToAll([
468
551
  onDocument(document2, "pointerdown", press),
469
- onDocument(document2, "pointerup", release),
470
- onDocument(document2, "pointercancel", release),
552
+ onDocument(document2, "pointerup", release2),
553
+ onDocument(document2, "pointercancel", release2),
471
554
  onDocument(document2, "pointermove", releaseOnMove),
472
- ...onWindow(view, "blur", release)
555
+ ...onWindow(view, "blur", release2)
473
556
  ]);
474
557
  return {
475
558
  isPressed: () => isPressed,
@@ -990,7 +1073,8 @@ function createPageTyping(options) {
990
1073
  stop();
991
1074
  const { path } = start;
992
1075
  const element = findMarkedElement(options.document, path);
993
- if (element === void 0 || !start.canTypeIn(element)) {
1076
+ const canType = element !== void 0 && !isEditedInPopover(element) && start.canTypeIn(element);
1077
+ if (!canType) {
994
1078
  releasePrepared();
995
1079
  send({ type: "typing-refused", path });
996
1080
  reportIfOver();
@@ -1096,12 +1180,14 @@ function connectPage(document2, schema, send) {
1096
1180
  onTypingOver: showHeldPage
1097
1181
  });
1098
1182
  const presses = followPresses(document2, showHeldPage);
1183
+ const motion = holdMotionOnPage(document2);
1099
1184
  const renderer = createPageRenderer({
1100
1185
  document: document2,
1101
1186
  // Replacing the page under a text being typed would throw the typing away.
1102
1187
  canReplacePage: () => !typing.isTyping(),
1103
1188
  isPagePressed: presses.isPressed,
1104
1189
  onRendered: () => {
1190
+ motion.holdAgain();
1105
1191
  layout.reportNow();
1106
1192
  send({ type: "rendered" });
1107
1193
  },
@@ -1128,6 +1214,7 @@ function connectPage(document2, schema, send) {
1128
1214
  typing.stop();
1129
1215
  renderer.stop();
1130
1216
  presses.stop();
1217
+ motion.stop();
1131
1218
  layout.stop();
1132
1219
  stopListening();
1133
1220
  }
@@ -1170,7 +1257,8 @@ function clickOn(page, pointer) {
1170
1257
  return;
1171
1258
  }
1172
1259
  const kind = typedKindAt(page.schema, pointer.path);
1173
- if (kind !== void 0) page.typing.prepare(pointer.element, kind);
1260
+ const canBeTyped = kind !== void 0 && !isEditedInPopover(pointer.element);
1261
+ if (canBeTyped) page.typing.prepare(pointer.element, kind);
1174
1262
  page.send({
1175
1263
  type: "click",
1176
1264
  target: { path: pointer.path, point: pointer.point }
@@ -6,7 +6,7 @@ import {
6
6
  recordAt,
7
7
  recordPageAt,
8
8
  recordPagePath
9
- } from "./chunk-PAGIPRTS.js";
9
+ } from "./chunk-M5XOTSSU.js";
10
10
 
11
11
  // src/site-pages.ts
12
12
  function pagePathOf(rest) {
@@ -6,7 +6,7 @@ import {
6
6
  readRichText,
7
7
  resolveFieldPath,
8
8
  safeHref
9
- } from "./chunk-PAGIPRTS.js";
9
+ } from "./chunk-M5XOTSSU.js";
10
10
 
11
11
  // src/bridge/editor-shortcuts.ts
12
12
  function shortcutOf(event) {
@@ -26,6 +26,15 @@ function shortcutOf(event) {
26
26
  }
27
27
  }
28
28
 
29
+ // src/bridge/marked-paths.ts
30
+ function closestMarkedPath(path, isMarked) {
31
+ for (let length = path.length; length > 0; length -= 1) {
32
+ const candidate = formatFieldPath(path.slice(0, length));
33
+ if (isMarked(candidate)) return candidate;
34
+ }
35
+ return void 0;
36
+ }
37
+
29
38
  // src/bridge/image-fields.ts
30
39
  function imageFieldAt(schema, path) {
31
40
  const target = path === void 0 ? void 0 : resolveFieldPath(schema, path);
@@ -158,15 +167,6 @@ function carriesFiles(event) {
158
167
  return event.dataTransfer?.types.includes("Files") === true;
159
168
  }
160
169
 
161
- // src/bridge/marked-paths.ts
162
- function closestMarkedPath(path, isMarked) {
163
- for (let length = path.length; length > 0; length -= 1) {
164
- const candidate = formatFieldPath(path.slice(0, length));
165
- if (isMarked(candidate)) return candidate;
166
- }
167
- return void 0;
168
- }
169
-
170
170
  // src/bridge/rich-text-edits.ts
171
171
  function isCollapsed(selection) {
172
172
  return selection.start.line === selection.end.line && selection.start.offset === selection.end.offset;
@@ -674,12 +674,12 @@ function lengthOf2(spans) {
674
674
 
675
675
  export {
676
676
  shortcutOf,
677
+ closestMarkedPath,
677
678
  imageFieldAt,
678
679
  PROTOCOL_VERSION,
679
680
  readPageMessage,
680
681
  readEditorMessage,
681
682
  carriesFiles,
682
- closestMarkedPath,
683
683
  isCollapsed,
684
684
  formatsAt,
685
685
  linkSelectionAt,
@@ -987,6 +987,10 @@ var REVEAL_ATTRIBUTE = "data-cms-reveal";
987
987
  var REVEALED_ATTRIBUTE = "data-cms-revealed";
988
988
  var REVEAL_EVENT = "cms:reveal";
989
989
 
990
+ // src/schema/popover-markers.ts
991
+ var POPOVER_ATTRIBUTE = "data-cms-popover";
992
+ var HELD_ATTRIBUTE = "data-cms-held";
993
+
990
994
  // src/schema/image-position.ts
991
995
  var PERCENT = 100;
992
996
  var STEPS_PER_PERCENT = 10;
@@ -1830,11 +1834,26 @@ function requestsPathOf(siteId) {
1830
1834
 
1831
1835
  // src/schema/privacy-policy.ts
1832
1836
  var PRIVACY_PAGE_PATH = "/privacy";
1833
- var WITHDRAWAL_DAYS = 30;
1837
+ var CONSENT_PAGE_PATH = "/consent";
1834
1838
  var ANSWER_WORKING_DAYS = 10;
1839
+ var ANSWER_EXTENSION_WORKING_DAYS = 5;
1840
+ var CORRECTION_WORKING_DAYS = 7;
1841
+ var UNLAWFUL_STOP_WORKING_DAYS = 3;
1842
+ var UNLAWFUL_ERASE_WORKING_DAYS = 10;
1843
+ var ERASE_DAYS = 30;
1835
1844
  function privacyPolicyFields(options = {}) {
1845
+ return documentFields(
1846
+ options.label ?? "\u041F\u043E\u043B\u0438\u0442\u0438\u043A\u0430 \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u043A\u0438 \u043F\u0435\u0440\u0441\u043E\u043D\u0430\u043B\u044C\u043D\u044B\u0445 \u0434\u0430\u043D\u043D\u044B\u0445"
1847
+ );
1848
+ }
1849
+ function privacyConsentFields(options = {}) {
1850
+ return documentFields(
1851
+ options.label ?? "\u0421\u043E\u0433\u043B\u0430\u0441\u0438\u0435 \u043D\u0430 \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u043A\u0443 \u043F\u0435\u0440\u0441\u043E\u043D\u0430\u043B\u044C\u043D\u044B\u0445 \u0434\u0430\u043D\u043D\u044B\u0445"
1852
+ );
1853
+ }
1854
+ function documentFields(label) {
1836
1855
  return group({
1837
- label: options.label ?? "\u041F\u043E\u043B\u0438\u0442\u0438\u043A\u0430 \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u043A\u0438 \u043F\u0435\u0440\u0441\u043E\u043D\u0430\u043B\u044C\u043D\u044B\u0445 \u0434\u0430\u043D\u043D\u044B\u0445",
1856
+ label,
1838
1857
  fields: {
1839
1858
  title: text({ label: "\u0417\u0430\u0433\u043E\u043B\u043E\u0432\u043E\u043A", maxLength: 120 }),
1840
1859
  text: richText({ label: "\u0422\u0435\u043A\u0441\u0442" })
@@ -1842,34 +1861,97 @@ function privacyPolicyFields(options = {}) {
1842
1861
  });
1843
1862
  }
1844
1863
  function privacyPolicyTextOf(source) {
1864
+ const paragraphs = [
1865
+ ...generalProvisionsOf(source),
1866
+ ...purposesOf(source),
1867
+ ...legalGroundsOf(),
1868
+ ...dataScopeOf(source),
1869
+ ...processingOf(),
1870
+ ...subjectRequestsOf(source.operator),
1871
+ ...finalProvisions()
1872
+ ];
1873
+ return richTextOf(paragraphs.join("\n\n"));
1874
+ }
1875
+ function privacyConsentTextOf(source) {
1845
1876
  const { operator, siteTitle } = source;
1846
- const operatorName = `${operator.name} (\u0418\u041D\u041D ${operator.inn}, \u0430\u0434\u0440\u0435\u0441: ${operator.address})`;
1847
- const sentData = sentDataOf(source.forms);
1848
- return richTextOf(
1849
- [
1850
- "1. \u041E\u0431\u0449\u0438\u0435 \u043F\u043E\u043B\u043E\u0436\u0435\u043D\u0438\u044F",
1851
- `1.1. \u042D\u0442\u0430 \u043F\u043E\u043B\u0438\u0442\u0438\u043A\u0430 \u043E\u043F\u0438\u0441\u044B\u0432\u0430\u0435\u0442, \u043A\u0430\u043A ${operatorName} \u2014 \u0434\u0430\u043B\u0435\u0435 \xAB\u041E\u043F\u0435\u0440\u0430\u0442\u043E\u0440\xBB \u2014 \u043E\u0431\u0440\u0430\u0431\u0430\u0442\u044B\u0432\u0430\u0435\u0442 \u043F\u0435\u0440\u0441\u043E\u043D\u0430\u043B\u044C\u043D\u044B\u0435 \u0434\u0430\u043D\u043D\u044B\u0435 \u043F\u043E\u0441\u0435\u0442\u0438\u0442\u0435\u043B\u0435\u0439 \u0441\u0430\u0439\u0442\u0430 \xAB${siteTitle}\xBB, \u043A\u043E\u0442\u043E\u0440\u044B\u0435 \u043E\u0442\u043F\u0440\u0430\u0432\u043B\u044F\u044E\u0442 \u0437\u0430\u044F\u0432\u043A\u0438 \u0447\u0435\u0440\u0435\u0437 \u0435\u0433\u043E \u0444\u043E\u0440\u043C\u044B.`,
1852
- "1.2. \u041F\u043E\u043B\u0438\u0442\u0438\u043A\u0430 \u0441\u043E\u0441\u0442\u0430\u0432\u043B\u0435\u043D\u0430 \u043F\u043E \u0424\u0435\u0434\u0435\u0440\u0430\u043B\u044C\u043D\u043E\u043C\u0443 \u0437\u0430\u043A\u043E\u043D\u0443 \u043E\u0442 27.07.2006 \u2116 152-\u0424\u0417 \xAB\u041E \u043F\u0435\u0440\u0441\u043E\u043D\u0430\u043B\u044C\u043D\u044B\u0445 \u0434\u0430\u043D\u043D\u044B\u0445\xBB.",
1853
- "2. \u041A\u0430\u043A\u0438\u0435 \u0434\u0430\u043D\u043D\u044B\u0435 \u043E\u0431\u0440\u0430\u0431\u0430\u0442\u044B\u0432\u0430\u044E\u0442\u0441\u044F",
1854
- `2.1. \u0421\u0432\u0435\u0434\u0435\u043D\u0438\u044F, \u043A\u043E\u0442\u043E\u0440\u044B\u0435 \u043F\u043E\u0441\u0435\u0442\u0438\u0442\u0435\u043B\u044C \u0441\u0430\u043C \u0443\u043A\u0430\u0437\u044B\u0432\u0430\u0435\u0442 \u0432 \u0444\u043E\u0440\u043C\u0435 \u0437\u0430\u044F\u0432\u043A\u0438: ${sentData}.`,
1855
- "2.2. \u0410\u0434\u0440\u0435\u0441 \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u044B, \u0441 \u043A\u043E\u0442\u043E\u0440\u043E\u0439 \u043E\u0442\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0430 \u0437\u0430\u044F\u0432\u043A\u0430, \u0438 \u0432\u0440\u0435\u043C\u044F \u0435\u0451 \u043E\u0442\u043F\u0440\u0430\u0432\u043A\u0438.",
1856
- "2.3. \u041E\u043F\u0435\u0440\u0430\u0442\u043E\u0440 \u043D\u0435 \u043E\u0431\u0440\u0430\u0431\u0430\u0442\u044B\u0432\u0430\u0435\u0442 \u0441\u043F\u0435\u0446\u0438\u0430\u043B\u044C\u043D\u044B\u0435 \u043A\u0430\u0442\u0435\u0433\u043E\u0440\u0438\u0438 \u043F\u0435\u0440\u0441\u043E\u043D\u0430\u043B\u044C\u043D\u044B\u0445 \u0434\u0430\u043D\u043D\u044B\u0445 \u0438 \u0431\u0438\u043E\u043C\u0435\u0442\u0440\u0438\u0447\u0435\u0441\u043A\u0438\u0435 \u0434\u0430\u043D\u043D\u044B\u0435 \u0438 \u043F\u0440\u043E\u0441\u0438\u0442 \u043D\u0435 \u0443\u043A\u0430\u0437\u044B\u0432\u0430\u0442\u044C \u0438\u0445 \u0432 \u0437\u0430\u044F\u0432\u043A\u0435.",
1857
- "3. \u0426\u0435\u043B\u044C, \u043E\u0441\u043D\u043E\u0432\u0430\u043D\u0438\u0435 \u0438 \u0441\u043E\u0433\u043B\u0430\u0441\u0438\u0435",
1858
- "3.1. \u0426\u0435\u043B\u044C \u2014 \u0440\u0430\u0441\u0441\u043C\u043E\u0442\u0440\u0435\u0442\u044C \u0437\u0430\u044F\u0432\u043A\u0443 \u043F\u043E\u0441\u0435\u0442\u0438\u0442\u0435\u043B\u044F \u0438 \u0441\u0432\u044F\u0437\u0430\u0442\u044C\u0441\u044F \u0441 \u043D\u0438\u043C \u043F\u043E \u043D\u0435\u0439.",
1859
- "3.2. \u041E\u0441\u043D\u043E\u0432\u0430\u043D\u0438\u0435 \u2014 \u0441\u043E\u0433\u043B\u0430\u0441\u0438\u0435 \u043F\u043E\u0441\u0435\u0442\u0438\u0442\u0435\u043B\u044F. \u041E\u0442\u043C\u0435\u0447\u0430\u044F \u0441\u043E\u0433\u043B\u0430\u0441\u0438\u0435 \u0432 \u0444\u043E\u0440\u043C\u0435 \u043F\u0435\u0440\u0435\u0434 \u043E\u0442\u043F\u0440\u0430\u0432\u043A\u043E\u0439 \u0437\u0430\u044F\u0432\u043A\u0438, \u043F\u043E\u0441\u0435\u0442\u0438\u0442\u0435\u043B\u044C \u0441\u0432\u043E\u0431\u043E\u0434\u043D\u043E, \u0441\u0432\u043E\u0435\u0439 \u0432\u043E\u043B\u0435\u0439 \u0438 \u0432 \u0441\u0432\u043E\u0451\u043C \u0438\u043D\u0442\u0435\u0440\u0435\u0441\u0435 \u0434\u0430\u0451\u0442 \u041E\u043F\u0435\u0440\u0430\u0442\u043E\u0440\u0443 \u0441\u043E\u0433\u043B\u0430\u0441\u0438\u0435 \u043D\u0430 \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u043A\u0443 \u0443\u043A\u0430\u0437\u0430\u043D\u043D\u044B\u0445 \u0434\u0430\u043D\u043D\u044B\u0445 \u043D\u0430 \u0443\u0441\u043B\u043E\u0432\u0438\u044F\u0445 \u044D\u0442\u043E\u0439 \u043F\u043E\u043B\u0438\u0442\u0438\u043A\u0438.",
1860
- "4. \u041A\u0430\u043A \u043E\u0431\u0440\u0430\u0431\u0430\u0442\u044B\u0432\u0430\u044E\u0442\u0441\u044F \u0434\u0430\u043D\u043D\u044B\u0435",
1861
- "4.1. \u041E\u043F\u0435\u0440\u0430\u0442\u043E\u0440 \u0441\u043E\u0431\u0438\u0440\u0430\u0435\u0442, \u0437\u0430\u043F\u0438\u0441\u044B\u0432\u0430\u0435\u0442, \u0445\u0440\u0430\u043D\u0438\u0442, \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u0442, \u0443\u0434\u0430\u043B\u044F\u0435\u0442 \u0438 \u0443\u043D\u0438\u0447\u0442\u043E\u0436\u0430\u0435\u0442 \u0434\u0430\u043D\u043D\u044B\u0435 \u0441 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u0435\u043C \u0441\u0440\u0435\u0434\u0441\u0442\u0432 \u0430\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438.",
1862
- "4.2. \u041F\u0440\u0438\u0451\u043C \u0437\u0430\u044F\u0432\u043E\u043A \u0441 \u0444\u043E\u0440\u043C \u0441\u0430\u0439\u0442\u0430 \u043F\u043E \u043F\u043E\u0440\u0443\u0447\u0435\u043D\u0438\u044E \u041E\u043F\u0435\u0440\u0430\u0442\u043E\u0440\u0430 \u043E\u0431\u0435\u0441\u043F\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u0441\u0435\u0440\u0432\u0438\u0441 Seamlet: \u043E\u043D \u043F\u0435\u0440\u0435\u0434\u0430\u0451\u0442 \u0437\u0430\u044F\u0432\u043A\u0443 \u041E\u043F\u0435\u0440\u0430\u0442\u043E\u0440\u0443 \u0438 \u043D\u0435 \u0445\u0440\u0430\u043D\u0438\u0442 \u0435\u0451 \u0434\u043E\u043B\u044C\u0448\u0435, \u0447\u0435\u043C \u043D\u0443\u0436\u043D\u043E \u0434\u043B\u044F \u0434\u043E\u0441\u0442\u0430\u0432\u043A\u0438, \u0441\u043E\u0431\u043B\u044E\u0434\u0430\u044F \u043A\u043E\u043D\u0444\u0438\u0434\u0435\u043D\u0446\u0438\u0430\u043B\u044C\u043D\u043E\u0441\u0442\u044C \u0438 \u0442\u0440\u0435\u0431\u043E\u0432\u0430\u043D\u0438\u044F \u0441\u0442\u0430\u0442\u044C\u0438 19 \u0424\u0435\u0434\u0435\u0440\u0430\u043B\u044C\u043D\u043E\u0433\u043E \u0437\u0430\u043A\u043E\u043D\u0430 \u2116 152-\u0424\u0417. \u0414\u0430\u043D\u043D\u044B\u0435 \u0445\u0440\u0430\u043D\u044F\u0442\u0441\u044F \u0432 \u0420\u043E\u0441\u0441\u0438\u0439\u0441\u043A\u043E\u0439 \u0424\u0435\u0434\u0435\u0440\u0430\u0446\u0438\u0438.",
1863
- "4.3. \u041E\u043F\u0435\u0440\u0430\u0442\u043E\u0440 \u043D\u0435 \u0440\u0430\u0441\u043F\u0440\u043E\u0441\u0442\u0440\u0430\u043D\u044F\u0435\u0442 \u0434\u0430\u043D\u043D\u044B\u0435 \u0438 \u043D\u0435 \u043F\u0435\u0440\u0435\u0434\u0430\u0451\u0442 \u0438\u0445 \u0442\u0440\u0435\u0442\u044C\u0438\u043C \u043B\u0438\u0446\u0430\u043C, \u043A\u0440\u043E\u043C\u0435 \u0441\u043B\u0443\u0447\u0430\u0435\u0432, \u043F\u0440\u0435\u0434\u0443\u0441\u043C\u043E\u0442\u0440\u0435\u043D\u043D\u044B\u0445 \u0437\u0430\u043A\u043E\u043D\u043E\u043C.",
1864
- "5. \u0421\u0440\u043E\u043A\u0438",
1865
- "5.1. \u0414\u0430\u043D\u043D\u044B\u0435 \u0445\u0440\u0430\u043D\u044F\u0442\u0441\u044F, \u043F\u043E\u043A\u0430 \u044D\u0442\u043E \u043D\u0443\u0436\u043D\u043E \u0434\u043B\u044F \u0440\u0430\u0441\u0441\u043C\u043E\u0442\u0440\u0435\u043D\u0438\u044F \u0437\u0430\u044F\u0432\u043A\u0438, \u043D\u043E \u043D\u0435 \u0434\u043E\u043B\u044C\u0448\u0435 \u043E\u0434\u043D\u043E\u0433\u043E \u0433\u043E\u0434\u0430 \u0441\u043E \u0434\u043D\u044F \u0435\u0451 \u043E\u0442\u043F\u0440\u0430\u0432\u043A\u0438, \u043F\u043E\u0441\u043B\u0435 \u0447\u0435\u0433\u043E \u0443\u0434\u0430\u043B\u044F\u044E\u0442\u0441\u044F.",
1866
- `5.2. \u041F\u043E\u0441\u0435\u0442\u0438\u0442\u0435\u043B\u044C \u043C\u043E\u0436\u0435\u0442 \u043E\u0442\u043E\u0437\u0432\u0430\u0442\u044C \u0441\u043E\u0433\u043B\u0430\u0441\u0438\u0435, \u043D\u0430\u043F\u0438\u0441\u0430\u0432 \u041E\u043F\u0435\u0440\u0430\u0442\u043E\u0440\u0443 \u043D\u0430 ${operator.email}. \u0422\u043E\u0433\u0434\u0430 \u041E\u043F\u0435\u0440\u0430\u0442\u043E\u0440 \u043F\u0440\u0435\u043A\u0440\u0430\u0442\u0438\u0442 \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u043A\u0443 \u0438 \u0443\u0434\u0430\u043B\u0438\u0442 \u0434\u0430\u043D\u043D\u044B\u0435 \u0432 \u0442\u0435\u0447\u0435\u043D\u0438\u0435 ${String(WITHDRAWAL_DAYS)} \u0434\u043D\u0435\u0439, \u0435\u0441\u043B\u0438 \u0438\u043D\u043E\u0435 \u043D\u0435 \u043F\u0440\u0435\u0434\u0443\u0441\u043C\u043E\u0442\u0440\u0435\u043D\u043E \u0437\u0430\u043A\u043E\u043D\u043E\u043C.`,
1867
- "6. \u041F\u0440\u0430\u0432\u0430 \u043F\u043E\u0441\u0435\u0442\u0438\u0442\u0435\u043B\u044F",
1868
- `6.1. \u041F\u043E\u0441\u0435\u0442\u0438\u0442\u0435\u043B\u044C \u0432\u043F\u0440\u0430\u0432\u0435 \u0443\u0437\u043D\u0430\u0442\u044C, \u043A\u0430\u043A \u043E\u0431\u0440\u0430\u0431\u0430\u0442\u044B\u0432\u0430\u044E\u0442\u0441\u044F \u0435\u0433\u043E \u0434\u0430\u043D\u043D\u044B\u0435, \u043F\u043E\u0442\u0440\u0435\u0431\u043E\u0432\u0430\u0442\u044C \u0443\u0442\u043E\u0447\u043D\u0438\u0442\u044C, \u0437\u0430\u0431\u043B\u043E\u043A\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0438\u043B\u0438 \u0443\u0434\u0430\u043B\u0438\u0442\u044C \u0438\u0445, \u043E\u0442\u043E\u0437\u0432\u0430\u0442\u044C \u0441\u043E\u0433\u043B\u0430\u0441\u0438\u0435 \u0438 \u043E\u0431\u0436\u0430\u043B\u043E\u0432\u0430\u0442\u044C \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044F \u041E\u043F\u0435\u0440\u0430\u0442\u043E\u0440\u0430 \u0432 \u0420\u043E\u0441\u043A\u043E\u043C\u043D\u0430\u0434\u0437\u043E\u0440\u0435 \u0438\u043B\u0438 \u0432 \u0441\u0443\u0434\u0435. \u0414\u043B\u044F \u044D\u0442\u043E\u0433\u043E \u0434\u043E\u0441\u0442\u0430\u0442\u043E\u0447\u043D\u043E \u043D\u0430\u043F\u0438\u0441\u0430\u0442\u044C \u041E\u043F\u0435\u0440\u0430\u0442\u043E\u0440\u0443 \u043D\u0430 ${operator.email}; \u041E\u043F\u0435\u0440\u0430\u0442\u043E\u0440 \u043E\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0432 \u0442\u0435\u0447\u0435\u043D\u0438\u0435 ${String(ANSWER_WORKING_DAYS)} \u0440\u0430\u0431\u043E\u0447\u0438\u0445 \u0434\u043D\u0435\u0439.`,
1869
- "7. \u0418\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F \u043F\u043E\u043B\u0438\u0442\u0438\u043A\u0438",
1870
- "7.1. \u041E\u043F\u0435\u0440\u0430\u0442\u043E\u0440 \u043C\u043E\u0436\u0435\u0442 \u0438\u0437\u043C\u0435\u043D\u044F\u0442\u044C \u043F\u043E\u043B\u0438\u0442\u0438\u043A\u0443. \u041D\u043E\u0432\u0430\u044F \u0440\u0435\u0434\u0430\u043A\u0446\u0438\u044F \u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u0442 \u0441 \u043C\u043E\u043C\u0435\u043D\u0442\u0430 \u043F\u0443\u0431\u043B\u0438\u043A\u0430\u0446\u0438\u0438 \u043D\u0430 \u044D\u0442\u043E\u0439 \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0435."
1871
- ].join("\n\n")
1872
- );
1877
+ const paragraphs = [
1878
+ `\u041E\u0442\u043C\u0435\u0447\u0430\u044F \u0441\u043E\u0433\u043B\u0430\u0441\u0438\u0435 \u0432 \u0444\u043E\u0440\u043C\u0435 \u0437\u0430\u044F\u0432\u043A\u0438 \u043D\u0430 \u0441\u0430\u0439\u0442\u0435 \xAB${siteTitle}\xBB \u0438 \u043E\u0442\u043F\u0440\u0430\u0432\u043B\u044F\u044F \u0437\u0430\u044F\u0432\u043A\u0443, \u044F \u0441\u0432\u043E\u0431\u043E\u0434\u043D\u043E, \u0441\u0432\u043E\u0435\u0439 \u0432\u043E\u043B\u0435\u0439 \u0438 \u0432 \u0441\u0432\u043E\u0451\u043C \u0438\u043D\u0442\u0435\u0440\u0435\u0441\u0435 \u0434\u0430\u044E \u0441\u043E\u0433\u043B\u0430\u0441\u0438\u0435 \u043D\u0430 \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u043A\u0443 \u043C\u043E\u0438\u0445 \u043F\u0435\u0440\u0441\u043E\u043D\u0430\u043B\u044C\u043D\u044B\u0445 \u0434\u0430\u043D\u043D\u044B\u0445 \u043D\u0430 \u0441\u043B\u0435\u0434\u0443\u044E\u0449\u0438\u0445 \u0443\u0441\u043B\u043E\u0432\u0438\u044F\u0445.`,
1879
+ `1. \u041E\u043F\u0435\u0440\u0430\u0442\u043E\u0440: ${operatorDetailsOf(operator)}.`,
1880
+ `2. \u0426\u0435\u043B\u044C \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u043A\u0438: ${PURPOSE}.`,
1881
+ `3. \u041F\u0435\u0440\u0441\u043E\u043D\u0430\u043B\u044C\u043D\u044B\u0435 \u0434\u0430\u043D\u043D\u044B\u0435: ${sentDataOf(source.forms)}, \u0430 \u0442\u0430\u043A\u0436\u0435 \u0430\u0434\u0440\u0435\u0441 \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u044B, \u0441 \u043A\u043E\u0442\u043E\u0440\u043E\u0439 \u043E\u0442\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0430 \u0437\u0430\u044F\u0432\u043A\u0430, \u0438 \u0432\u0440\u0435\u043C\u044F \u0435\u0451 \u043E\u0442\u043F\u0440\u0430\u0432\u043A\u0438.`,
1882
+ `4. \u0414\u0435\u0439\u0441\u0442\u0432\u0438\u044F \u0441 \u0434\u0430\u043D\u043D\u044B\u043C\u0438: ${ACTIONS}. \u041E\u0431\u0440\u0430\u0431\u043E\u0442\u043A\u0430 \u0441\u043C\u0435\u0448\u0430\u043D\u043D\u0430\u044F, \u0441 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u0435\u043C \u0441\u0440\u0435\u0434\u0441\u0442\u0432 \u0430\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438.`,
1883
+ `5. \u041E\u043F\u0435\u0440\u0430\u0442\u043E\u0440 \u043F\u043E\u0440\u0443\u0447\u0430\u0435\u0442 \u043F\u0440\u0438\u0451\u043C \u0438 \u043F\u0435\u0440\u0435\u0434\u0430\u0447\u0443 \u0437\u0430\u044F\u0432\u043E\u043A ${PROCESSOR}. \u0421\u0435\u0440\u0432\u0438\u0441 \u043F\u0435\u0440\u0435\u0434\u0430\u0451\u0442 \u0437\u0430\u044F\u0432\u043A\u0443 \u041E\u043F\u0435\u0440\u0430\u0442\u043E\u0440\u0443 \u0438 \u043D\u0435 \u0445\u0440\u0430\u043D\u0438\u0442 \u0435\u0451 \u0434\u043E\u043B\u044C\u0448\u0435, \u0447\u0435\u043C \u043D\u0443\u0436\u043D\u043E \u0434\u043B\u044F \u0434\u043E\u0441\u0442\u0430\u0432\u043A\u0438. \u0414\u0430\u043D\u043D\u044B\u0435 \u043D\u0435 \u0440\u0430\u0441\u043F\u0440\u043E\u0441\u0442\u0440\u0430\u043D\u044F\u044E\u0442\u0441\u044F \u0438 \u043D\u0435 \u043F\u0435\u0440\u0435\u0434\u0430\u044E\u0442\u0441\u044F \u0437\u0430 \u043F\u0440\u0435\u0434\u0435\u043B\u044B \u0420\u043E\u0441\u0441\u0438\u0439\u0441\u043A\u043E\u0439 \u0424\u0435\u0434\u0435\u0440\u0430\u0446\u0438\u0438.`,
1884
+ `6. \u0421\u043E\u0433\u043B\u0430\u0441\u0438\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u0442 \u0434\u043E \u0434\u043E\u0441\u0442\u0438\u0436\u0435\u043D\u0438\u044F \u0446\u0435\u043B\u0438 \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u043A\u0438, \u043D\u043E \u043D\u0435 \u0434\u043E\u043B\u044C\u0448\u0435 \u043E\u0434\u043D\u043E\u0433\u043E \u0433\u043E\u0434\u0430 \u0441\u043E \u0434\u043D\u044F \u043E\u0442\u043F\u0440\u0430\u0432\u043A\u0438 \u0437\u0430\u044F\u0432\u043A\u0438. \u042F \u043C\u043E\u0433\u0443 \u043E\u0442\u043E\u0437\u0432\u0430\u0442\u044C \u0435\u0433\u043E, \u043D\u0430\u043F\u0438\u0441\u0430\u0432 \u041E\u043F\u0435\u0440\u0430\u0442\u043E\u0440\u0443 \u043D\u0430 ${operator.email}; \u0442\u043E\u0433\u0434\u0430 \u041E\u043F\u0435\u0440\u0430\u0442\u043E\u0440 \u043F\u0440\u0435\u043A\u0440\u0430\u0442\u0438\u0442 \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u043A\u0443 \u0438 \u0443\u043D\u0438\u0447\u0442\u043E\u0436\u0438\u0442 \u0434\u0430\u043D\u043D\u044B\u0435 \u0432 \u0442\u0435\u0447\u0435\u043D\u0438\u0435 ${String(ERASE_DAYS)} \u0434\u043D\u0435\u0439, \u0435\u0441\u043B\u0438 \u0438\u043D\u043E\u0435 \u043D\u0435 \u043F\u0440\u0435\u0434\u0443\u0441\u043C\u043E\u0442\u0440\u0435\u043D\u043E \u0437\u0430\u043A\u043E\u043D\u043E\u043C.`,
1885
+ "7. \u041F\u043E\u0440\u044F\u0434\u043E\u043A \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u043A\u0438 \u043C\u043E\u0438\u0445 \u0434\u0430\u043D\u043D\u044B\u0445 \u0438 \u043C\u043E\u0438 \u043F\u0440\u0430\u0432\u0430 \u043E\u043F\u0438\u0441\u0430\u043D\u044B \u0432 \u043F\u043E\u043B\u0438\u0442\u0438\u043A\u0435 \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u043A\u0438 \u043F\u0435\u0440\u0441\u043E\u043D\u0430\u043B\u044C\u043D\u044B\u0445 \u0434\u0430\u043D\u043D\u044B\u0445 \u041E\u043F\u0435\u0440\u0430\u0442\u043E\u0440\u0430, \u043E\u043F\u0443\u0431\u043B\u0438\u043A\u043E\u0432\u0430\u043D\u043D\u043E\u0439 \u043D\u0430 \u044D\u0442\u043E\u043C \u0441\u0430\u0439\u0442\u0435."
1886
+ ];
1887
+ return richTextOf(paragraphs.join("\n\n"));
1888
+ }
1889
+ var PURPOSE = "\u0440\u0430\u0441\u0441\u043C\u043E\u0442\u0440\u0435\u043D\u0438\u0435 \u0437\u0430\u044F\u0432\u043A\u0438, \u043E\u0442\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u043D\u043E\u0439 \u0447\u0435\u0440\u0435\u0437 \u0444\u043E\u0440\u043C\u0443 \u0441\u0430\u0439\u0442\u0430, \u0438 \u0441\u0432\u044F\u0437\u044C \u0441 \u043E\u0442\u043F\u0440\u0430\u0432\u0438\u0442\u0435\u043B\u0435\u043C \u043F\u043E \u043D\u0435\u0439";
1890
+ var ACTIONS = "\u0441\u0431\u043E\u0440, \u0437\u0430\u043F\u0438\u0441\u044C, \u0441\u0438\u0441\u0442\u0435\u043C\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u044F, \u043D\u0430\u043A\u043E\u043F\u043B\u0435\u043D\u0438\u0435, \u0445\u0440\u0430\u043D\u0435\u043D\u0438\u0435, \u0443\u0442\u043E\u0447\u043D\u0435\u043D\u0438\u0435 (\u043E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u0438\u0435, \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0435), \u0438\u0437\u0432\u043B\u0435\u0447\u0435\u043D\u0438\u0435, \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u0435, \u043F\u0435\u0440\u0435\u0434\u0430\u0447\u0430 (\u043F\u0440\u0435\u0434\u043E\u0441\u0442\u0430\u0432\u043B\u0435\u043D\u0438\u0435, \u0434\u043E\u0441\u0442\u0443\u043F), \u0431\u043B\u043E\u043A\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435, \u0443\u0434\u0430\u043B\u0435\u043D\u0438\u0435, \u0443\u043D\u0438\u0447\u0442\u043E\u0436\u0435\u043D\u0438\u0435";
1891
+ var PROCESSOR = "\u0441\u0435\u0440\u0432\u0438\u0441\u0443 Seamlet (seamlet.ru), \u043A\u043E\u0442\u043E\u0440\u044B\u0439 \u043E\u0431\u0440\u0430\u0431\u0430\u0442\u044B\u0432\u0430\u0435\u0442 \u0434\u0430\u043D\u043D\u044B\u0435 \u043F\u043E \u043F\u043E\u0440\u0443\u0447\u0435\u043D\u0438\u044E \u041E\u043F\u0435\u0440\u0430\u0442\u043E\u0440\u0430 \u0432 \u0441\u043E\u043E\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 \u0447\u0430\u0441\u0442\u044C\u044E 3 \u0441\u0442\u0430\u0442\u044C\u0438 6 \u0424\u0435\u0434\u0435\u0440\u0430\u043B\u044C\u043D\u043E\u0433\u043E \u0437\u0430\u043A\u043E\u043D\u0430 \u2116 152-\u0424\u0417";
1892
+ function operatorDetailsOf(operator) {
1893
+ return `${operator.name}, \u0418\u041D\u041D ${operator.inn}, \u0430\u0434\u0440\u0435\u0441: ${operator.address}, \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u0430\u044F \u043F\u043E\u0447\u0442\u0430: ${operator.email}`;
1894
+ }
1895
+ function generalProvisionsOf({
1896
+ operator,
1897
+ siteTitle
1898
+ }) {
1899
+ return [
1900
+ "1. \u041E\u0431\u0449\u0438\u0435 \u043F\u043E\u043B\u043E\u0436\u0435\u043D\u0438\u044F",
1901
+ `1.1. \u041F\u043E\u043B\u0438\u0442\u0438\u043A\u0430 \u043E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0435\u0442 \u043F\u043E\u0440\u044F\u0434\u043E\u043A \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u043A\u0438 \u0438 \u043C\u0435\u0440\u044B \u0437\u0430\u0449\u0438\u0442\u044B \u043F\u0435\u0440\u0441\u043E\u043D\u0430\u043B\u044C\u043D\u044B\u0445 \u0434\u0430\u043D\u043D\u044B\u0445, \u043A\u043E\u0442\u043E\u0440\u044B\u0435 \u043E\u0431\u0440\u0430\u0431\u0430\u0442\u044B\u0432\u0430\u0435\u0442 ${operatorDetailsOf(operator)} (\u0434\u0430\u043B\u0435\u0435 \u2014 \u041E\u043F\u0435\u0440\u0430\u0442\u043E\u0440), \u0432 \u0441\u0432\u044F\u0437\u0438 \u0441 \u0440\u0430\u0431\u043E\u0442\u043E\u0439 \u0441\u0430\u0439\u0442\u0430 \xAB${siteTitle}\xBB (\u0434\u0430\u043B\u0435\u0435 \u2014 \u0421\u0430\u0439\u0442).`,
1902
+ "1.2. \u041F\u043E\u043B\u0438\u0442\u0438\u043A\u0430 \u0441\u043E\u0441\u0442\u0430\u0432\u043B\u0435\u043D\u0430 \u0432\u043E \u0438\u0441\u043F\u043E\u043B\u043D\u0435\u043D\u0438\u0435 \u043F\u0443\u043D\u043A\u0442\u0430 2 \u0447\u0430\u0441\u0442\u0438 1 \u0441\u0442\u0430\u0442\u044C\u0438 18.1 \u0424\u0435\u0434\u0435\u0440\u0430\u043B\u044C\u043D\u043E\u0433\u043E \u0437\u0430\u043A\u043E\u043D\u0430 \u043E\u0442 27.07.2006 \u2116 152-\u0424\u0417 \xAB\u041E \u043F\u0435\u0440\u0441\u043E\u043D\u0430\u043B\u044C\u043D\u044B\u0445 \u0434\u0430\u043D\u043D\u044B\u0445\xBB (\u0434\u0430\u043B\u0435\u0435 \u2014 \u0417\u0430\u043A\u043E\u043D) \u0441 \u0443\u0447\u0451\u0442\u043E\u043C \u0440\u0435\u043A\u043E\u043C\u0435\u043D\u0434\u0430\u0446\u0438\u0439 \u0420\u043E\u0441\u043A\u043E\u043C\u043D\u0430\u0434\u0437\u043E\u0440\u0430. \u041F\u043E\u043D\u044F\u0442\u0438\u044F \xAB\u043F\u0435\u0440\u0441\u043E\u043D\u0430\u043B\u044C\u043D\u044B\u0435 \u0434\u0430\u043D\u043D\u044B\u0435\xBB, \xAB\u043E\u0431\u0440\u0430\u0431\u043E\u0442\u043A\u0430\xBB, \xAB\u043E\u043F\u0435\u0440\u0430\u0442\u043E\u0440\xBB \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u044E\u0442\u0441\u044F \u0432 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F\u0445 \u0441\u0442\u0430\u0442\u044C\u0438 3 \u0417\u0430\u043A\u043E\u043D\u0430.",
1903
+ "1.3. \u041E\u043F\u0435\u0440\u0430\u0442\u043E\u0440 \u043E\u0431\u044F\u0437\u0430\u043D \u043E\u0431\u0440\u0430\u0431\u0430\u0442\u044B\u0432\u0430\u0442\u044C \u043F\u0435\u0440\u0441\u043E\u043D\u0430\u043B\u044C\u043D\u044B\u0435 \u0434\u0430\u043D\u043D\u044B\u0435 \u0437\u0430\u043A\u043E\u043D\u043D\u043E \u0438 \u0441\u043F\u0440\u0430\u0432\u0435\u0434\u043B\u0438\u0432\u043E, \u0442\u043E\u043B\u044C\u043A\u043E \u0432 \u0437\u0430\u044F\u0432\u043B\u0435\u043D\u043D\u044B\u0445 \u0446\u0435\u043B\u044F\u0445 \u0438 \u0432 \u043D\u0435\u043E\u0431\u0445\u043E\u0434\u0438\u043C\u043E\u043C \u043E\u0431\u044A\u0451\u043C\u0435, \u043E\u0431\u0435\u0441\u043F\u0435\u0447\u0438\u0432\u0430\u0442\u044C \u0438\u0445 \u043A\u043E\u043D\u0444\u0438\u0434\u0435\u043D\u0446\u0438\u0430\u043B\u044C\u043D\u043E\u0441\u0442\u044C \u0438 \u0431\u0435\u0437\u043E\u043F\u0430\u0441\u043D\u043E\u0441\u0442\u044C, \u043E\u0442\u0432\u0435\u0447\u0430\u0442\u044C \u043D\u0430 \u043E\u0431\u0440\u0430\u0449\u0435\u043D\u0438\u044F \u0441\u0443\u0431\u044A\u0435\u043A\u0442\u043E\u0432 \u043F\u0435\u0440\u0441\u043E\u043D\u0430\u043B\u044C\u043D\u044B\u0445 \u0434\u0430\u043D\u043D\u044B\u0445 \u0438 \u0420\u043E\u0441\u043A\u043E\u043C\u043D\u0430\u0434\u0437\u043E\u0440\u0430 \u0432 \u0441\u0440\u043E\u043A\u0438, \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D\u043D\u044B\u0435 \u0417\u0430\u043A\u043E\u043D\u043E\u043C.",
1904
+ "1.4. \u0421\u0443\u0431\u044A\u0435\u043A\u0442 \u043F\u0435\u0440\u0441\u043E\u043D\u0430\u043B\u044C\u043D\u044B\u0445 \u0434\u0430\u043D\u043D\u044B\u0445 \u0432\u043F\u0440\u0430\u0432\u0435 \u043F\u043E\u043B\u0443\u0447\u0430\u0442\u044C \u0441\u0432\u0435\u0434\u0435\u043D\u0438\u044F \u043E\u0431 \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u043A\u0435 \u0441\u0432\u043E\u0438\u0445 \u0434\u0430\u043D\u043D\u044B\u0445, \u0442\u0440\u0435\u0431\u043E\u0432\u0430\u0442\u044C \u0438\u0445 \u0443\u0442\u043E\u0447\u043D\u0435\u043D\u0438\u044F, \u0431\u043B\u043E\u043A\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F \u0438\u043B\u0438 \u0443\u043D\u0438\u0447\u0442\u043E\u0436\u0435\u043D\u0438\u044F, \u043E\u0442\u043E\u0437\u0432\u0430\u0442\u044C \u0441\u043E\u0433\u043B\u0430\u0441\u0438\u0435, \u043E\u0431\u0436\u0430\u043B\u043E\u0432\u0430\u0442\u044C \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044F \u041E\u043F\u0435\u0440\u0430\u0442\u043E\u0440\u0430 \u0432 \u0420\u043E\u0441\u043A\u043E\u043C\u043D\u0430\u0434\u0437\u043E\u0440\u0435 \u0438\u043B\u0438 \u0432 \u0441\u0443\u0434\u0435.",
1905
+ "1.5. \u041F\u043E\u043B\u0438\u0442\u0438\u043A\u0430 \u043E\u043F\u0443\u0431\u043B\u0438\u043A\u043E\u0432\u0430\u043D\u0430 \u043D\u0430 \u0421\u0430\u0439\u0442\u0435 \u0438 \u0434\u043E\u0441\u0442\u0443\u043F\u043D\u0430 \u043B\u044E\u0431\u043E\u043C\u0443 \u0431\u0435\u0437 \u043E\u0433\u0440\u0430\u043D\u0438\u0447\u0435\u043D\u0438\u0439."
1906
+ ];
1907
+ }
1908
+ function purposesOf(source) {
1909
+ return [
1910
+ "2. \u0426\u0435\u043B\u0438 \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u043A\u0438 \u043F\u0435\u0440\u0441\u043E\u043D\u0430\u043B\u044C\u043D\u044B\u0445 \u0434\u0430\u043D\u043D\u044B\u0445",
1911
+ `2.1. \u0426\u0435\u043B\u044C: ${PURPOSE}.`,
1912
+ `2.2. \u0414\u043B\u044F \u044D\u0442\u043E\u0439 \u0446\u0435\u043B\u0438: \u043A\u0430\u0442\u0435\u0433\u043E\u0440\u0438\u0438 \u0434\u0430\u043D\u043D\u044B\u0445 \u2014 \u043E\u0431\u0449\u0438\u0435 \u043F\u0435\u0440\u0441\u043E\u043D\u0430\u043B\u044C\u043D\u044B\u0435 \u0434\u0430\u043D\u043D\u044B\u0435; \u043F\u0435\u0440\u0435\u0447\u0435\u043D\u044C \u0434\u0430\u043D\u043D\u044B\u0445 \u2014 ${sentDataOf(source.forms)}, \u0430\u0434\u0440\u0435\u0441 \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u044B, \u0441 \u043A\u043E\u0442\u043E\u0440\u043E\u0439 \u043E\u0442\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0430 \u0437\u0430\u044F\u0432\u043A\u0430, \u0432\u0440\u0435\u043C\u044F \u0435\u0451 \u043E\u0442\u043F\u0440\u0430\u0432\u043A\u0438; \u043A\u0430\u0442\u0435\u0433\u043E\u0440\u0438\u0438 \u0441\u0443\u0431\u044A\u0435\u043A\u0442\u043E\u0432 \u2014 \u043F\u043E\u0441\u0435\u0442\u0438\u0442\u0435\u043B\u0438 \u0421\u0430\u0439\u0442\u0430, \u043E\u0442\u043F\u0440\u0430\u0432\u0438\u0432\u0448\u0438\u0435 \u0437\u0430\u044F\u0432\u043A\u0443; \u0441\u043F\u043E\u0441\u043E\u0431 \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u043A\u0438 \u2014 \u0441\u043C\u0435\u0448\u0430\u043D\u043D\u044B\u0439, \u0441 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u0435\u043C \u0441\u0440\u0435\u0434\u0441\u0442\u0432 \u0430\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438; \u0441\u0440\u043E\u043A \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u043A\u0438 \u0438 \u0445\u0440\u0430\u043D\u0435\u043D\u0438\u044F \u2014 \u0434\u043E \u0434\u043E\u0441\u0442\u0438\u0436\u0435\u043D\u0438\u044F \u0446\u0435\u043B\u0438, \u043D\u043E \u043D\u0435 \u0431\u043E\u043B\u0435\u0435 \u043E\u0434\u043D\u043E\u0433\u043E \u0433\u043E\u0434\u0430 \u0441\u043E \u0434\u043D\u044F \u043E\u0442\u043F\u0440\u0430\u0432\u043A\u0438 \u0437\u0430\u044F\u0432\u043A\u0438; \u043F\u043E\u0440\u044F\u0434\u043E\u043A \u0443\u043D\u0438\u0447\u0442\u043E\u0436\u0435\u043D\u0438\u044F \u2014 \u0443\u0434\u0430\u043B\u0435\u043D\u0438\u0435 \u0437\u0430\u043F\u0438\u0441\u0435\u0439 \u0438 \u043F\u0438\u0441\u0435\u043C \u0441 \u0437\u0430\u044F\u0432\u043A\u043E\u0439 \u0432 \u0442\u0435\u0447\u0435\u043D\u0438\u0435 ${String(ERASE_DAYS)} \u0434\u043D\u0435\u0439 \u043F\u043E\u0441\u043B\u0435 \u0434\u043E\u0441\u0442\u0438\u0436\u0435\u043D\u0438\u044F \u0446\u0435\u043B\u0438, \u0438\u0441\u0442\u0435\u0447\u0435\u043D\u0438\u044F \u0441\u0440\u043E\u043A\u0430 \u0438\u043B\u0438 \u043E\u0442\u0437\u044B\u0432\u0430 \u0441\u043E\u0433\u043B\u0430\u0441\u0438\u044F.`
1913
+ ];
1914
+ }
1915
+ function legalGroundsOf() {
1916
+ return [
1917
+ "3. \u041F\u0440\u0430\u0432\u043E\u0432\u044B\u0435 \u043E\u0441\u043D\u043E\u0432\u0430\u043D\u0438\u044F \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u043A\u0438",
1918
+ "3.1. \u041A\u043E\u043D\u0441\u0442\u0438\u0442\u0443\u0446\u0438\u044F \u0420\u043E\u0441\u0441\u0438\u0439\u0441\u043A\u043E\u0439 \u0424\u0435\u0434\u0435\u0440\u0430\u0446\u0438\u0438, \u0413\u0440\u0430\u0436\u0434\u0430\u043D\u0441\u043A\u0438\u0439 \u043A\u043E\u0434\u0435\u043A\u0441 \u0420\u043E\u0441\u0441\u0438\u0439\u0441\u043A\u043E\u0439 \u0424\u0435\u0434\u0435\u0440\u0430\u0446\u0438\u0438, \u0417\u0430\u043A\u043E\u043D \u0438 \u043F\u0440\u0438\u043D\u044F\u0442\u044B\u0435 \u0432 \u0441\u043E\u043E\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 \u043D\u0438\u043C \u043D\u043E\u0440\u043C\u0430\u0442\u0438\u0432\u043D\u044B\u0435 \u0430\u043A\u0442\u044B.",
1919
+ "3.2. \u0421\u043E\u0433\u043B\u0430\u0441\u0438\u0435 \u0441\u0443\u0431\u044A\u0435\u043A\u0442\u0430 \u043F\u0435\u0440\u0441\u043E\u043D\u0430\u043B\u044C\u043D\u044B\u0445 \u0434\u0430\u043D\u043D\u044B\u0445 (\u043F\u0443\u043D\u043A\u0442 1 \u0447\u0430\u0441\u0442\u0438 1 \u0441\u0442\u0430\u0442\u044C\u0438 6 \u0417\u0430\u043A\u043E\u043D\u0430), \u043A\u043E\u0442\u043E\u0440\u043E\u0435 \u043E\u043D \u0434\u0430\u0451\u0442 \u043E\u0442\u0434\u0435\u043B\u044C\u043D\u043E\u0439 \u043E\u0442\u043C\u0435\u0442\u043A\u043E\u0439 \u0432 \u0444\u043E\u0440\u043C\u0435 \u0437\u0430\u044F\u0432\u043A\u0438 \u043F\u0435\u0440\u0435\u0434 \u0435\u0451 \u043E\u0442\u043F\u0440\u0430\u0432\u043A\u043E\u0439. \u0422\u0435\u043A\u0441\u0442 \u0441\u043E\u0433\u043B\u0430\u0441\u0438\u044F \u043E\u043F\u0443\u0431\u043B\u0438\u043A\u043E\u0432\u0430\u043D \u043D\u0430 \u0421\u0430\u0439\u0442\u0435 \u043E\u0442\u0434\u0435\u043B\u044C\u043D\u044B\u043C \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u043E\u043C."
1920
+ ];
1921
+ }
1922
+ function dataScopeOf(source) {
1923
+ return [
1924
+ "4. \u041E\u0431\u044A\u0451\u043C \u0438 \u043A\u0430\u0442\u0435\u0433\u043E\u0440\u0438\u0438 \u043E\u0431\u0440\u0430\u0431\u0430\u0442\u044B\u0432\u0430\u0435\u043C\u044B\u0445 \u0434\u0430\u043D\u043D\u044B\u0445, \u043A\u0430\u0442\u0435\u0433\u043E\u0440\u0438\u0438 \u0441\u0443\u0431\u044A\u0435\u043A\u0442\u043E\u0432",
1925
+ `4.1. \u041E\u043F\u0435\u0440\u0430\u0442\u043E\u0440 \u043E\u0431\u0440\u0430\u0431\u0430\u0442\u044B\u0432\u0430\u0435\u0442 \u0442\u043E\u043B\u044C\u043A\u043E \u0434\u0430\u043D\u043D\u044B\u0435, \u043A\u043E\u0442\u043E\u0440\u044B\u0435 \u043F\u043E\u0441\u0435\u0442\u0438\u0442\u0435\u043B\u044C \u0441\u0430\u043C \u0443\u043A\u0430\u0437\u044B\u0432\u0430\u0435\u0442 \u0432 \u0444\u043E\u0440\u043C\u0435 \u0437\u0430\u044F\u0432\u043A\u0438: ${sentDataOf(source.forms)}, \u0430 \u0442\u0430\u043A\u0436\u0435 \u0430\u0434\u0440\u0435\u0441 \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u044B, \u0441 \u043A\u043E\u0442\u043E\u0440\u043E\u0439 \u043E\u0442\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0430 \u0437\u0430\u044F\u0432\u043A\u0430, \u0438 \u0432\u0440\u0435\u043C\u044F \u0435\u0451 \u043E\u0442\u043F\u0440\u0430\u0432\u043A\u0438.`,
1926
+ "4.2. \u041E\u043F\u0435\u0440\u0430\u0442\u043E\u0440 \u043D\u0435 \u043E\u0431\u0440\u0430\u0431\u0430\u0442\u044B\u0432\u0430\u0435\u0442 \u0441\u043F\u0435\u0446\u0438\u0430\u043B\u044C\u043D\u044B\u0435 \u043A\u0430\u0442\u0435\u0433\u043E\u0440\u0438\u0438 \u043F\u0435\u0440\u0441\u043E\u043D\u0430\u043B\u044C\u043D\u044B\u0445 \u0434\u0430\u043D\u043D\u044B\u0445 \u0438 \u0431\u0438\u043E\u043C\u0435\u0442\u0440\u0438\u0447\u0435\u0441\u043A\u0438\u0435 \u043F\u0435\u0440\u0441\u043E\u043D\u0430\u043B\u044C\u043D\u044B\u0435 \u0434\u0430\u043D\u043D\u044B\u0435 \u0438 \u043F\u0440\u043E\u0441\u0438\u0442 \u043D\u0435 \u0443\u043A\u0430\u0437\u044B\u0432\u0430\u0442\u044C \u0438\u0445 \u0432 \u0437\u0430\u044F\u0432\u043A\u0435.",
1927
+ "4.3. \u0421\u0443\u0431\u044A\u0435\u043A\u0442\u044B \u043F\u0435\u0440\u0441\u043E\u043D\u0430\u043B\u044C\u043D\u044B\u0445 \u0434\u0430\u043D\u043D\u044B\u0445 \u2014 \u043F\u043E\u0441\u0435\u0442\u0438\u0442\u0435\u043B\u0438 \u0421\u0430\u0439\u0442\u0430, \u043E\u0442\u043F\u0440\u0430\u0432\u0438\u0432\u0448\u0438\u0435 \u0437\u0430\u044F\u0432\u043A\u0443."
1928
+ ];
1929
+ }
1930
+ function processingOf() {
1931
+ return [
1932
+ "5. \u041F\u043E\u0440\u044F\u0434\u043E\u043A \u0438 \u0443\u0441\u043B\u043E\u0432\u0438\u044F \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u043A\u0438",
1933
+ `5.1. \u0414\u0435\u0439\u0441\u0442\u0432\u0438\u044F \u0441 \u043F\u0435\u0440\u0441\u043E\u043D\u0430\u043B\u044C\u043D\u044B\u043C\u0438 \u0434\u0430\u043D\u043D\u044B\u043C\u0438: ${ACTIONS}.`,
1934
+ `5.2. \u041E\u043F\u0435\u0440\u0430\u0442\u043E\u0440 \u043F\u043E\u0440\u0443\u0447\u0430\u0435\u0442 \u043F\u0440\u0438\u0451\u043C \u0437\u0430\u044F\u0432\u043E\u043A \u0441 \u0444\u043E\u0440\u043C \u0421\u0430\u0439\u0442\u0430 \u0438 \u0438\u0445 \u043F\u0435\u0440\u0435\u0434\u0430\u0447\u0443 \u041E\u043F\u0435\u0440\u0430\u0442\u043E\u0440\u0443 \u043F\u043E \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u0435 ${PROCESSOR}. \u0421\u0435\u0440\u0432\u0438\u0441 \u043E\u0431\u044F\u0437\u0430\u043D \u0441\u043E\u0431\u043B\u044E\u0434\u0430\u0442\u044C \u043A\u043E\u043D\u0444\u0438\u0434\u0435\u043D\u0446\u0438\u0430\u043B\u044C\u043D\u043E\u0441\u0442\u044C \u0434\u0430\u043D\u043D\u044B\u0445, \u043E\u0431\u0435\u0441\u043F\u0435\u0447\u0438\u0432\u0430\u0442\u044C \u0438\u0445 \u0431\u0435\u0437\u043E\u043F\u0430\u0441\u043D\u043E\u0441\u0442\u044C \u043F\u043E \u0441\u0442\u0430\u0442\u044C\u0435 19 \u0417\u0430\u043A\u043E\u043D\u0430, \u043D\u0435 \u0445\u0440\u0430\u043D\u0438\u0442 \u0437\u0430\u044F\u0432\u043A\u0443 \u0434\u043E\u043B\u044C\u0448\u0435, \u0447\u0435\u043C \u043D\u0443\u0436\u043D\u043E \u0434\u043B\u044F \u0434\u043E\u0441\u0442\u0430\u0432\u043A\u0438, \u0438 \u043D\u0435 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u0442 \u0434\u0430\u043D\u043D\u044B\u0435 \u0432 \u0441\u0432\u043E\u0438\u0445 \u0446\u0435\u043B\u044F\u0445. \u041E\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043D\u043D\u043E\u0441\u0442\u044C \u043F\u0435\u0440\u0435\u0434 \u0441\u0443\u0431\u044A\u0435\u043A\u0442\u043E\u043C \u0437\u0430 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044F \u0441\u0435\u0440\u0432\u0438\u0441\u0430 \u043D\u0435\u0441\u0451\u0442 \u041E\u043F\u0435\u0440\u0430\u0442\u043E\u0440.`,
1935
+ "5.3. \u0417\u0430\u043F\u0438\u0441\u044C, \u0441\u0438\u0441\u0442\u0435\u043C\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u044F, \u043D\u0430\u043A\u043E\u043F\u043B\u0435\u043D\u0438\u0435, \u0445\u0440\u0430\u043D\u0435\u043D\u0438\u0435, \u0443\u0442\u043E\u0447\u043D\u0435\u043D\u0438\u0435 \u0438 \u0438\u0437\u0432\u043B\u0435\u0447\u0435\u043D\u0438\u0435 \u043F\u0435\u0440\u0441\u043E\u043D\u0430\u043B\u044C\u043D\u044B\u0445 \u0434\u0430\u043D\u043D\u044B\u0445 \u0433\u0440\u0430\u0436\u0434\u0430\u043D \u0420\u043E\u0441\u0441\u0438\u0439\u0441\u043A\u043E\u0439 \u0424\u0435\u0434\u0435\u0440\u0430\u0446\u0438\u0438 \u0432\u0435\u0434\u0443\u0442\u0441\u044F \u0441 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u0435\u043C \u0431\u0430\u0437 \u0434\u0430\u043D\u043D\u044B\u0445, \u043D\u0430\u0445\u043E\u0434\u044F\u0449\u0438\u0445\u0441\u044F \u043D\u0430 \u0442\u0435\u0440\u0440\u0438\u0442\u043E\u0440\u0438\u0438 \u0420\u043E\u0441\u0441\u0438\u0439\u0441\u043A\u043E\u0439 \u0424\u0435\u0434\u0435\u0440\u0430\u0446\u0438\u0438. \u0422\u0440\u0430\u043D\u0441\u0433\u0440\u0430\u043D\u0438\u0447\u043D\u0430\u044F \u043F\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u043D\u0435 \u043E\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043B\u044F\u0435\u0442\u0441\u044F.",
1936
+ "5.4. \u041E\u043F\u0435\u0440\u0430\u0442\u043E\u0440 \u043D\u0435 \u0440\u0430\u0441\u043F\u0440\u043E\u0441\u0442\u0440\u0430\u043D\u044F\u0435\u0442 \u043F\u0435\u0440\u0441\u043E\u043D\u0430\u043B\u044C\u043D\u044B\u0435 \u0434\u0430\u043D\u043D\u044B\u0435 \u0438 \u043D\u0435 \u043F\u0435\u0440\u0435\u0434\u0430\u0451\u0442 \u0438\u0445 \u0442\u0440\u0435\u0442\u044C\u0438\u043C \u043B\u0438\u0446\u0430\u043C, \u043A\u0440\u043E\u043C\u0435 \u0441\u043B\u0443\u0447\u0430\u0435\u0432, \u043F\u0440\u0435\u0434\u0443\u0441\u043C\u043E\u0442\u0440\u0435\u043D\u043D\u044B\u0445 \u0437\u0430\u043A\u043E\u043D\u043E\u043C (\u043D\u0430\u043F\u0440\u0438\u043C\u0435\u0440, \u043F\u043E \u0437\u0430\u043F\u0440\u043E\u0441\u0443 \u0441\u0443\u0434\u0430 \u0438\u043B\u0438 \u0443\u043F\u043E\u043B\u043D\u043E\u043C\u043E\u0447\u0435\u043D\u043D\u044B\u0445 \u043E\u0440\u0433\u0430\u043D\u043E\u0432).",
1937
+ "5.5. \u0414\u043B\u044F \u0437\u0430\u0449\u0438\u0442\u044B \u0434\u0430\u043D\u043D\u044B\u0445 \u041E\u043F\u0435\u0440\u0430\u0442\u043E\u0440 \u043F\u0440\u0438\u043D\u0438\u043C\u0430\u0435\u0442 \u043C\u0435\u0440\u044B \u043F\u043E \u0441\u0442\u0430\u0442\u044C\u044F\u043C 18.1 \u0438 19 \u0417\u0430\u043A\u043E\u043D\u0430: \u043D\u0430\u0437\u043D\u0430\u0447\u0430\u0435\u0442 \u043E\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043D\u043D\u043E\u0433\u043E \u0437\u0430 \u043E\u0440\u0433\u0430\u043D\u0438\u0437\u0430\u0446\u0438\u044E \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u043A\u0438, \u043E\u0433\u0440\u0430\u043D\u0438\u0447\u0438\u0432\u0430\u0435\u0442 \u0434\u043E\u0441\u0442\u0443\u043F \u043A \u0434\u0430\u043D\u043D\u044B\u043C \u043B\u0438\u0446\u0430\u043C\u0438, \u043A\u043E\u0442\u043E\u0440\u044B\u043C \u043E\u043D \u043D\u0443\u0436\u0435\u043D \u0434\u043B\u044F \u0440\u0430\u0431\u043E\u0442\u044B, \u043F\u0435\u0440\u0435\u0434\u0430\u0451\u0442 \u0434\u0430\u043D\u043D\u044B\u0435 \u043F\u043E \u0437\u0430\u0449\u0438\u0449\u0451\u043D\u043D\u044B\u043C \u043A\u0430\u043D\u0430\u043B\u0430\u043C \u0441\u0432\u044F\u0437\u0438, \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u0442 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430 \u0437\u0430\u0449\u0438\u0442\u044B \u043E\u0442 \u043D\u0435\u0441\u0430\u043D\u043A\u0446\u0438\u043E\u043D\u0438\u0440\u043E\u0432\u0430\u043D\u043D\u043E\u0433\u043E \u0434\u043E\u0441\u0442\u0443\u043F\u0430 \u0438 \u0443\u043D\u0438\u0447\u0442\u043E\u0436\u0430\u0435\u0442 \u0434\u0430\u043D\u043D\u044B\u0435, \u043A\u043E\u0433\u0434\u0430 \u043E\u043D\u0438 \u0431\u043E\u043B\u044C\u0448\u0435 \u043D\u0435 \u043D\u0443\u0436\u043D\u044B.",
1938
+ "5.6. \u041E \u043D\u0435\u043F\u0440\u0430\u0432\u043E\u043C\u0435\u0440\u043D\u043E\u0439 \u0438\u043B\u0438 \u0441\u043B\u0443\u0447\u0430\u0439\u043D\u043E\u0439 \u043F\u0435\u0440\u0435\u0434\u0430\u0447\u0435 \u043F\u0435\u0440\u0441\u043E\u043D\u0430\u043B\u044C\u043D\u044B\u0445 \u0434\u0430\u043D\u043D\u044B\u0445, \u043F\u043E\u0432\u043B\u0451\u043A\u0448\u0435\u0439 \u043D\u0430\u0440\u0443\u0448\u0435\u043D\u0438\u0435 \u043F\u0440\u0430\u0432 \u0441\u0443\u0431\u044A\u0435\u043A\u0442\u043E\u0432, \u041E\u043F\u0435\u0440\u0430\u0442\u043E\u0440 \u0443\u0432\u0435\u0434\u043E\u043C\u043B\u044F\u0435\u0442 \u0420\u043E\u0441\u043A\u043E\u043C\u043D\u0430\u0434\u0437\u043E\u0440 \u0432 \u0441\u0440\u043E\u043A\u0438, \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D\u043D\u044B\u0435 \u0447\u0430\u0441\u0442\u044C\u044E 3.1 \u0441\u0442\u0430\u0442\u044C\u0438 21 \u0417\u0430\u043A\u043E\u043D\u0430."
1939
+ ];
1940
+ }
1941
+ function subjectRequestsOf(operator) {
1942
+ return [
1943
+ "6. \u0410\u043A\u0442\u0443\u0430\u043B\u0438\u0437\u0430\u0446\u0438\u044F, \u0438\u0441\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u0435, \u0443\u0434\u0430\u043B\u0435\u043D\u0438\u0435 \u0438 \u0443\u043D\u0438\u0447\u0442\u043E\u0436\u0435\u043D\u0438\u0435 \u0434\u0430\u043D\u043D\u044B\u0445, \u043E\u0442\u0432\u0435\u0442\u044B \u043D\u0430 \u0437\u0430\u043F\u0440\u043E\u0441\u044B",
1944
+ `6.1. \u0417\u0430\u043F\u0440\u043E\u0441 \u043E \u0441\u0432\u043E\u0438\u0445 \u0434\u0430\u043D\u043D\u044B\u0445, \u0442\u0440\u0435\u0431\u043E\u0432\u0430\u043D\u0438\u0435 \u0438\u0445 \u0443\u0442\u043E\u0447\u043D\u0438\u0442\u044C, \u0437\u0430\u0431\u043B\u043E\u043A\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0438\u043B\u0438 \u0443\u043D\u0438\u0447\u0442\u043E\u0436\u0438\u0442\u044C, \u0430 \u0442\u0430\u043A\u0436\u0435 \u043E\u0442\u0437\u044B\u0432 \u0441\u043E\u0433\u043B\u0430\u0441\u0438\u044F \u0441\u0443\u0431\u044A\u0435\u043A\u0442 \u043D\u0430\u043F\u0440\u0430\u0432\u043B\u044F\u0435\u0442 \u043D\u0430 ${operator.email}. \u0412 \u0437\u0430\u043F\u0440\u043E\u0441\u0435 \u043D\u0443\u0436\u043D\u043E \u0443\u043A\u0430\u0437\u0430\u0442\u044C \u0441\u0432\u0435\u0434\u0435\u043D\u0438\u044F, \u043F\u043E \u043A\u043E\u0442\u043E\u0440\u044B\u043C \u041E\u043F\u0435\u0440\u0430\u0442\u043E\u0440 \u043D\u0430\u0439\u0434\u0451\u0442 \u0437\u0430\u044F\u0432\u043A\u0443 (\u043D\u0430\u043F\u0440\u0438\u043C\u0435\u0440, \u0442\u0435\u043B\u0435\u0444\u043E\u043D \u0438\u043B\u0438 \u043F\u043E\u0447\u0442\u0443, \u0443\u043A\u0430\u0437\u0430\u043D\u043D\u044B\u0435 \u0432 \u043D\u0435\u0439), \u0438 \u0447\u0442\u043E \u0438\u043C\u0435\u043D\u043D\u043E \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044F.`,
1945
+ `6.2. \u041E\u043F\u0435\u0440\u0430\u0442\u043E\u0440 \u043E\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u043D\u0430 \u0437\u0430\u043F\u0440\u043E\u0441 \u0432 \u0442\u0435\u0447\u0435\u043D\u0438\u0435 ${String(ANSWER_WORKING_DAYS)} \u0440\u0430\u0431\u043E\u0447\u0438\u0445 \u0434\u043D\u0435\u0439. \u0421\u0440\u043E\u043A \u043C\u043E\u0436\u0435\u0442 \u0431\u044B\u0442\u044C \u043F\u0440\u043E\u0434\u043B\u0451\u043D \u0435\u0449\u0451 \u043D\u0430 ${String(ANSWER_EXTENSION_WORKING_DAYS)} \u0440\u0430\u0431\u043E\u0447\u0438\u0445 \u0434\u043D\u0435\u0439, \u0435\u0441\u043B\u0438 \u041E\u043F\u0435\u0440\u0430\u0442\u043E\u0440 \u043D\u0430\u043F\u0440\u0430\u0432\u0438\u0442 \u043C\u043E\u0442\u0438\u0432\u0438\u0440\u043E\u0432\u0430\u043D\u043D\u043E\u0435 \u0443\u0432\u0435\u0434\u043E\u043C\u043B\u0435\u043D\u0438\u0435.`,
1946
+ `6.3. \u041D\u0435\u0442\u043E\u0447\u043D\u044B\u0435 \u0434\u0430\u043D\u043D\u044B\u0435 \u041E\u043F\u0435\u0440\u0430\u0442\u043E\u0440 \u0443\u0442\u043E\u0447\u043D\u044F\u0435\u0442 \u0432 \u0442\u0435\u0447\u0435\u043D\u0438\u0435 ${String(CORRECTION_WORKING_DAYS)} \u0440\u0430\u0431\u043E\u0447\u0438\u0445 \u0434\u043D\u0435\u0439 \u043F\u043E\u0441\u043B\u0435 \u043F\u043E\u043B\u0443\u0447\u0435\u043D\u0438\u044F \u0441\u0432\u0435\u0434\u0435\u043D\u0438\u0439 \u043E \u043D\u0435\u0442\u043E\u0447\u043D\u043E\u0441\u0442\u0438. \u041D\u0435\u043F\u0440\u0430\u0432\u043E\u043C\u0435\u0440\u043D\u0443\u044E \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u043A\u0443 \u041E\u043F\u0435\u0440\u0430\u0442\u043E\u0440 \u043F\u0440\u0435\u043A\u0440\u0430\u0449\u0430\u0435\u0442 \u0432 \u0442\u0435\u0447\u0435\u043D\u0438\u0435 ${String(UNLAWFUL_STOP_WORKING_DAYS)} \u0440\u0430\u0431\u043E\u0447\u0438\u0445 \u0434\u043D\u0435\u0439, \u0430 \u0435\u0441\u043B\u0438 \u0435\u0451 \u043D\u0435\u043B\u044C\u0437\u044F \u0441\u0434\u0435\u043B\u0430\u0442\u044C \u043F\u0440\u0430\u0432\u043E\u043C\u0435\u0440\u043D\u043E\u0439 \u2014 \u0443\u043D\u0438\u0447\u0442\u043E\u0436\u0430\u0435\u0442 \u0434\u0430\u043D\u043D\u044B\u0435 \u0432 \u0442\u0435\u0447\u0435\u043D\u0438\u0435 ${String(UNLAWFUL_ERASE_WORKING_DAYS)} \u0440\u0430\u0431\u043E\u0447\u0438\u0445 \u0434\u043D\u0435\u0439.`,
1947
+ `6.4. \u041F\u0440\u0438 \u0434\u043E\u0441\u0442\u0438\u0436\u0435\u043D\u0438\u0438 \u0446\u0435\u043B\u0438 \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u043A\u0438, \u0438\u0441\u0442\u0435\u0447\u0435\u043D\u0438\u0438 \u0441\u0440\u043E\u043A\u0430 \u0445\u0440\u0430\u043D\u0435\u043D\u0438\u044F \u0438\u043B\u0438 \u043E\u0442\u0437\u044B\u0432\u0435 \u0441\u043E\u0433\u043B\u0430\u0441\u0438\u044F \u041E\u043F\u0435\u0440\u0430\u0442\u043E\u0440 \u043F\u0440\u0435\u043A\u0440\u0430\u0449\u0430\u0435\u0442 \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u043A\u0443 \u0438 \u0443\u043D\u0438\u0447\u0442\u043E\u0436\u0430\u0435\u0442 \u0434\u0430\u043D\u043D\u044B\u0435 \u0432 \u0442\u0435\u0447\u0435\u043D\u0438\u0435 ${String(ERASE_DAYS)} \u0434\u043D\u0435\u0439, \u0435\u0441\u043B\u0438 \u0438\u043D\u043E\u0435 \u043D\u0435 \u043F\u0440\u0435\u0434\u0443\u0441\u043C\u043E\u0442\u0440\u0435\u043D\u043E \u0437\u0430\u043A\u043E\u043D\u043E\u043C.`
1948
+ ];
1949
+ }
1950
+ function finalProvisions() {
1951
+ return [
1952
+ "7. \u0417\u0430\u043A\u043B\u044E\u0447\u0438\u0442\u0435\u043B\u044C\u043D\u044B\u0435 \u043F\u043E\u043B\u043E\u0436\u0435\u043D\u0438\u044F",
1953
+ "7.1. \u041E\u043F\u0435\u0440\u0430\u0442\u043E\u0440 \u043C\u043E\u0436\u0435\u0442 \u0438\u0437\u043C\u0435\u043D\u044F\u0442\u044C \u041F\u043E\u043B\u0438\u0442\u0438\u043A\u0443. \u041D\u043E\u0432\u0430\u044F \u0440\u0435\u0434\u0430\u043A\u0446\u0438\u044F \u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u0442 \u0441\u043E \u0434\u043D\u044F \u0435\u0451 \u043F\u0443\u0431\u043B\u0438\u043A\u0430\u0446\u0438\u0438 \u043D\u0430 \u0421\u0430\u0439\u0442\u0435."
1954
+ ];
1873
1955
  }
1874
1956
  function sentDataOf(forms) {
1875
1957
  const labels = forms.flatMap(
@@ -1940,6 +2022,8 @@ export {
1940
2022
  REVEAL_ATTRIBUTE,
1941
2023
  REVEALED_ATTRIBUTE,
1942
2024
  REVEAL_EVENT,
2025
+ POPOVER_ATTRIBUTE,
2026
+ HELD_ATTRIBUTE,
1943
2027
  imagePosition,
1944
2028
  ratesField,
1945
2029
  estimateOf,
@@ -1993,8 +2077,11 @@ export {
1993
2077
  isEmailAddress,
1994
2078
  requestsPathOf,
1995
2079
  PRIVACY_PAGE_PATH,
2080
+ CONSENT_PAGE_PATH,
1996
2081
  privacyPolicyFields,
2082
+ privacyConsentFields,
1997
2083
  privacyPolicyTextOf,
2084
+ privacyConsentTextOf,
1998
2085
  REQUEST_SEND_EVENT,
1999
2086
  REQUEST_SENT_EVENT,
2000
2087
  REQUEST_FAILED_EVENT
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  pagePathOf
3
- } from "./chunk-CTS7Q45A.js";
3
+ } from "./chunk-6MBWE5QT.js";
4
4
  import {
5
5
  FIELD_PATH_SEPARATOR,
6
6
  collectionAt,
@@ -9,7 +9,7 @@ import {
9
9
  newRecord,
10
10
  recordAt,
11
11
  recordPageAt
12
- } from "./chunk-PAGIPRTS.js";
12
+ } from "./chunk-M5XOTSSU.js";
13
13
 
14
14
  // src/preview-requests.ts
15
15
  var MAX_DRAFT_BYTES = 1024 * 1024;
package/dist/cli.js CHANGED
@@ -3,7 +3,7 @@ import {
3
3
  SITE_CONFIG_FILE,
4
4
  isSiteId,
5
5
  readSiteConfig
6
- } from "./chunk-PAGIPRTS.js";
6
+ } from "./chunk-M5XOTSSU.js";
7
7
  import {
8
8
  SITE_MODULE_FILE
9
9
  } from "./chunk-QCVWHHJC.js";
package/dist/client.js CHANGED
@@ -16,7 +16,7 @@ if (isFramed && isPreview) {
16
16
  });
17
17
  }
18
18
  if (document.querySelector(REQUEST_FORM_SELECTOR) !== null) {
19
- void import("./request-sending-WCEHXPWV.js").then(({ connectRequestForms }) => {
19
+ void import("./request-sending-UQEY57Y6.js").then(({ connectRequestForms }) => {
20
20
  connectRequestForms(document, { isPreview });
21
21
  });
22
22
  }
package/dist/feeds.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  plainTextOf
3
- } from "./chunk-PAGIPRTS.js";
3
+ } from "./chunk-M5XOTSSU.js";
4
4
 
5
5
  // src/feeds/xml.ts
6
6
  var ESCAPES = {
package/dist/index.js CHANGED
@@ -1,16 +1,16 @@
1
1
  import {
2
2
  isUploadedFile
3
- } from "./chunk-NOAAAA5T.js";
3
+ } from "./chunk-TR7TTMQR.js";
4
4
  import {
5
5
  OWN_PHOTOS_PATH
6
6
  } from "./chunk-W2LIOR2C.js";
7
- import "./chunk-CTS7Q45A.js";
7
+ import "./chunk-6MBWE5QT.js";
8
8
  import {
9
9
  SITE_CONFIG_FILE,
10
10
  SITE_DESCRIPTION_PATH,
11
11
  isJsonObject,
12
12
  readSiteConfig
13
- } from "./chunk-PAGIPRTS.js";
13
+ } from "./chunk-M5XOTSSU.js";
14
14
  import {
15
15
  PREVIEW_PATH,
16
16
  SITE_MODULE_FILE,
@@ -6,9 +6,9 @@ import {
6
6
  previewContentAt,
7
7
  previewHeadersOf,
8
8
  readDraft
9
- } from "./chunk-NOAAAA5T.js";
10
- import "./chunk-CTS7Q45A.js";
11
- import "./chunk-PAGIPRTS.js";
9
+ } from "./chunk-TR7TTMQR.js";
10
+ import "./chunk-6MBWE5QT.js";
11
+ import "./chunk-M5XOTSSU.js";
12
12
  export {
13
13
  MAX_DRAFT_BYTES,
14
14
  isPageAddress,
package/dist/protocol.js CHANGED
@@ -22,8 +22,8 @@ import {
22
22
  shortcutOf,
23
23
  toggleList,
24
24
  toggleMark
25
- } from "./chunk-XZDRTVJH.js";
26
- import "./chunk-PAGIPRTS.js";
25
+ } from "./chunk-CRGGWROR.js";
26
+ import "./chunk-M5XOTSSU.js";
27
27
  import "./chunk-QCVWHHJC.js";
28
28
  export {
29
29
  OWN_PHOTOS_PATH,
@@ -12,7 +12,7 @@ import {
12
12
  isJsonObject,
13
13
  readRequestForm,
14
14
  readRequestValues
15
- } from "./chunk-PAGIPRTS.js";
15
+ } from "./chunk-M5XOTSSU.js";
16
16
 
17
17
  // src/request-sending.ts
18
18
  var STATUS_CREATED = 201;
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  isUploadedFile
3
- } from "../chunk-NOAAAA5T.js";
4
- import "../chunk-CTS7Q45A.js";
5
- import "../chunk-PAGIPRTS.js";
3
+ } from "../chunk-TR7TTMQR.js";
4
+ import "../chunk-6MBWE5QT.js";
5
+ import "../chunk-M5XOTSSU.js";
6
6
  import {
7
7
  uploadedPhotoPath
8
8
  } from "../chunk-QCVWHHJC.js";
package/dist/schema.d.ts CHANGED
@@ -56,6 +56,14 @@ declare const REVEALED_ATTRIBUTE = "data-cms-revealed";
56
56
  /** Sent to a revealed part, and bubbling up from it, for a site that shows it with a script. */
57
57
  declare const REVEAL_EVENT = "cms:reveal";
58
58
 
59
+ /** On a part that moves: `<div data-cms-popover>`, or on the marked element itself. */
60
+ declare const POPOVER_ATTRIBUTE = "data-cms-popover";
61
+ /**
62
+ * Set by the bridge on a moving part it holds still. The bridge pauses the part's CSS animations
63
+ * and transitions itself; a site that moves the part with a script stops it while this is set.
64
+ */
65
+ declare const HELD_ATTRIBUTE = "data-cms-held";
66
+
59
67
  /** Where a link leads, as the editor offers it. */
60
68
  type LinkTarget = {
61
69
  readonly kind: "page";
@@ -223,11 +231,13 @@ interface PolicyOperator {
223
231
  interface PolicySource {
224
232
  readonly siteTitle: string;
225
233
  readonly operator: PolicyOperator;
226
- /** The site's forms, whose fields the policy names. */
234
+ /** The site's forms, whose fields the documents name. */
227
235
  readonly forms: readonly RequestForm[];
228
236
  }
229
- /** The page of the policy on a site, which a form's consent links to unless the site says another. */
237
+ /** The page of the policy on a site, which a form links to unless the site says another. */
230
238
  declare const PRIVACY_PAGE_PATH = "/privacy";
239
+ /** The page of the consent on a site, which a form's checkbox links to unless the site says another. */
240
+ declare const CONSENT_PAGE_PATH = "/consent";
231
241
  /** The policy as content: its title and its text, which the owner edits like any other text. */
232
242
  declare function privacyPolicyFields(options?: {
233
243
  readonly label?: string;
@@ -235,8 +245,21 @@ declare function privacyPolicyFields(options?: {
235
245
  title: TextField;
236
246
  text: RichTextField;
237
247
  }>;
238
- /** A policy to start with, made from the business's details and what the site's forms ask. */
248
+ /** The consent as content: a document of its own, which the owner edits like any other text. */
249
+ declare function privacyConsentFields(options?: {
250
+ readonly label?: string;
251
+ }): GroupField<{
252
+ title: TextField;
253
+ text: RichTextField;
254
+ }>;
255
+ /**
256
+ * A policy to start with, in the sections Роскомнадзор recommends: general provisions, purposes,
257
+ * legal grounds, the data and whose it is, how it is processed, and how it is corrected, erased and
258
+ * asked about.
259
+ */
239
260
  declare function privacyPolicyTextOf(source: PolicySource): RichText;
261
+ /** A consent to start with: what ст. 9 asks a consent to name, as a document of its own. */
262
+ declare function privacyConsentTextOf(source: PolicySource): RichText;
240
263
 
241
264
  /**
242
265
  * Before the request is sent, once the form takes what was typed. Cancelable: a site that calls
@@ -273,4 +296,4 @@ interface RequestFailedDetail {
273
296
  readonly issues: readonly RequestIssue[];
274
297
  }
275
298
 
276
- export { CONSENT_REQUIRED_TEXT, CollectionField, type CollectionRecords, Content, ContentOf, type ContentPath, FIELD_PATH_ATTRIBUTE, type FieldMarker, Fields, GroupField, ImageValue, type JsonObject, type LinkKind, type LinkTarget, LinkValue, MAX_SLUG_LENGTH, NumberField, PRIVACY_PAGE_PATH, type PolicyOperator, type PolicySource, RECORD_ID_KEY, REQUEST_CONSENT_KEY, REQUEST_FAILED_EVENT, REQUEST_FORM_KEY, REQUEST_ISSUE_TEXTS, REQUEST_PAGE_KEY, REQUEST_SEND_EVENT, REQUEST_SENT_EVENT, REQUEST_TRAP_KEY, REVEALED_ATTRIBUTE, REVEAL_ATTRIBUTE, REVEAL_EVENT, type Rate, RecordFields, RecordOf, type RequestEntries, type RequestFailedDetail, type RequestFailure, RequestForm, type RequestIssue, type RequestIssueCode, type RequestReading, type RequestSendDetail, type RequestSentDetail, type RequestValue, RichText, RichTextField, SITE_CONFIG_FILE, type SiteConfig, type SiteConfigField, type SiteConfigReading, TextField, collectionAt, collectionFieldAt, editable, estimateOf, findRecord, hrefOf, imagePosition, isConsentGiven, isContentObject, isEmailAddress, isJsonObject, isPhoneNumber, isRecordId, isSiteId, isSlug, isTrapFilled, linkTargetOf, newRecord, privacyPolicyFields, privacyPolicyTextOf, ratesField, readRequestEntries, readRequestValues, readSiteConfig, requestPageOf, requestsPathOf, safeHref, slugFieldOf, slugOf, withRecordIds };
299
+ export { CONSENT_PAGE_PATH, CONSENT_REQUIRED_TEXT, CollectionField, type CollectionRecords, Content, ContentOf, type ContentPath, FIELD_PATH_ATTRIBUTE, type FieldMarker, Fields, GroupField, HELD_ATTRIBUTE, ImageValue, type JsonObject, type LinkKind, type LinkTarget, LinkValue, MAX_SLUG_LENGTH, NumberField, POPOVER_ATTRIBUTE, PRIVACY_PAGE_PATH, type PolicyOperator, type PolicySource, RECORD_ID_KEY, REQUEST_CONSENT_KEY, REQUEST_FAILED_EVENT, REQUEST_FORM_KEY, REQUEST_ISSUE_TEXTS, REQUEST_PAGE_KEY, REQUEST_SEND_EVENT, REQUEST_SENT_EVENT, REQUEST_TRAP_KEY, REVEALED_ATTRIBUTE, REVEAL_ATTRIBUTE, REVEAL_EVENT, type Rate, RecordFields, RecordOf, type RequestEntries, type RequestFailedDetail, type RequestFailure, RequestForm, type RequestIssue, type RequestIssueCode, type RequestReading, type RequestSendDetail, type RequestSentDetail, type RequestValue, RichText, RichTextField, SITE_CONFIG_FILE, type SiteConfig, type SiteConfigField, type SiteConfigReading, TextField, collectionAt, collectionFieldAt, editable, estimateOf, findRecord, hrefOf, imagePosition, isConsentGiven, isContentObject, isEmailAddress, isJsonObject, isPhoneNumber, isRecordId, isSiteId, isSlug, isTrapFilled, linkTargetOf, newRecord, privacyConsentFields, privacyConsentTextOf, privacyPolicyFields, privacyPolicyTextOf, ratesField, readRequestEntries, readRequestValues, readSiteConfig, requestPageOf, requestsPathOf, safeHref, slugFieldOf, slugOf, withRecordIds };
package/dist/schema.js CHANGED
@@ -1,13 +1,16 @@
1
1
  import {
2
+ CONSENT_PAGE_PATH,
2
3
  CONSENT_REQUIRED_TEXT,
3
4
  DEFAULT_LONG_TEXT_LENGTH,
4
5
  DEFAULT_TEXT_LENGTH,
5
6
  FIELD_PATH_ATTRIBUTE,
6
7
  FIELD_PATH_SEPARATOR,
8
+ HELD_ATTRIBUTE,
7
9
  HOME_PAGE_PATH,
8
10
  MAX_REQUEST_FIELD_LENGTH,
9
11
  MAX_SLUG_LENGTH,
10
12
  PAGE_PATH_SEPARATOR,
13
+ POPOVER_ATTRIBUTE,
11
14
  PRIVACY_PAGE_PATH,
12
15
  RECORD_ID_KEY,
13
16
  RECORD_PLACEHOLDER,
@@ -70,6 +73,8 @@ import {
70
73
  openingHoursField,
71
74
  parseContent,
72
75
  plainTextOf,
76
+ privacyConsentFields,
77
+ privacyConsentTextOf,
73
78
  privacyPolicyFields,
74
79
  privacyPolicyTextOf,
75
80
  productFields,
@@ -109,17 +114,20 @@ import {
109
114
  toggle,
110
115
  url,
111
116
  withRecordIds
112
- } from "./chunk-PAGIPRTS.js";
117
+ } from "./chunk-M5XOTSSU.js";
113
118
  export {
119
+ CONSENT_PAGE_PATH,
114
120
  CONSENT_REQUIRED_TEXT,
115
121
  DEFAULT_LONG_TEXT_LENGTH,
116
122
  DEFAULT_TEXT_LENGTH,
117
123
  FIELD_PATH_ATTRIBUTE,
118
124
  FIELD_PATH_SEPARATOR,
125
+ HELD_ATTRIBUTE,
119
126
  HOME_PAGE_PATH,
120
127
  MAX_REQUEST_FIELD_LENGTH,
121
128
  MAX_SLUG_LENGTH,
122
129
  PAGE_PATH_SEPARATOR,
130
+ POPOVER_ATTRIBUTE,
123
131
  PRIVACY_PAGE_PATH,
124
132
  RECORD_ID_KEY,
125
133
  RECORD_PLACEHOLDER,
@@ -182,6 +190,8 @@ export {
182
190
  openingHoursField,
183
191
  parseContent,
184
192
  plainTextOf,
193
+ privacyConsentFields,
194
+ privacyConsentTextOf,
185
195
  privacyPolicyFields,
186
196
  privacyPolicyTextOf,
187
197
  productFields,
package/dist/site.js CHANGED
@@ -3,12 +3,12 @@ import {
3
3
  previewedPageAt,
4
4
  renderedPageAt,
5
5
  staticPagesOf
6
- } from "./chunk-CTS7Q45A.js";
6
+ } from "./chunk-6MBWE5QT.js";
7
7
  import {
8
8
  checkSiteDescription,
9
9
  formatFieldPath,
10
10
  parseContent
11
- } from "./chunk-PAGIPRTS.js";
11
+ } from "./chunk-M5XOTSSU.js";
12
12
  import {
13
13
  SITE_MODULE_FILE
14
14
  } from "./chunk-QCVWHHJC.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@seamlet/astro",
3
- "version": "2.0.0",
3
+ "version": "2.2.0",
4
4
  "description": "Connects an Astro site to the Seamlet CMS: the schema of its content, the preview the editor frames, and its published content.",
5
5
  "license": "MIT",
6
6
  "type": "module",