@seamlet/astro 2.1.0 → 2.2.1

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,13 @@
1
1
  # Changelog
2
2
 
3
+ ## 2.2.1
4
+
5
+ - The Russian texts a visitor and the owner read are edited to the copy rules of `.claude/skills/russian-copy`; nothing behaves differently. `RequestForm.astro` says «Заявка отправлена. Ответим по контактам, которые вы оставили.» once a request is sent and «Заявка не ушла. Всё, что вы ввели, осталось в форме — отправьте ещё раз через минуту.» when it is not; the hidden trap field reads «Оставьте это поле пустым». `REQUEST_ISSUE_TEXTS`: «Слишком длинный текст — сократите его», «Проверьте почту: нужен адрес вида name@mail.ru», «Выберите вариант из списка». The labels of the presets: `note` of `openingHoursField()` is «Примечание», `summary` of `productFields()` «Строка для карточки», `image` of `seoFields()` «Картинка для ссылки в соцсетях». `privacyPolicyTextOf` fixes two sentences of section 5 that did not agree in grammar; its legal meaning is the same.
6
+
7
+ ## 2.2.0
8
+
9
+ - 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.
10
+
3
11
  ## 2.1.0
4
12
 
5
13
  - 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).
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.
@@ -38,8 +38,8 @@ interface Props {
38
38
  const {
39
39
  form,
40
40
  submitLabel = "Отправить",
41
- sentText = "Спасибо! Заявка отправлена, мы скоро свяжемся с вами.",
42
- failedText = "Не получилось отправить заявку. Попробуйте ещё раз чуть позже.",
41
+ sentText = "Заявка отправлена. Ответим по контактам, которые вы оставили.",
42
+ failedText = "Заявка не ушла. Всё, что вы ввели, осталось в форме — отправьте ещё раз через минуту.",
43
43
  consentHref = CONSENT_PAGE_PATH,
44
44
  policyHref = PRIVACY_PAGE_PATH,
45
45
  instance = form.id,
@@ -127,7 +127,7 @@ const isLineField = (field: RequestField): field is LineField =>
127
127
  ))}
128
128
  <div class="seamlet-form-trap" aria-hidden="true">
129
129
  <label>
130
- Это поле заполнять не нужно
130
+ Оставьте это поле пустым
131
131
  <input
132
132
  type="text"
133
133
  name={REQUEST_TRAP_KEY}
package/dist/bridge.js CHANGED
@@ -18,9 +18,11 @@ import {
18
18
  shortcutOf,
19
19
  toggleList,
20
20
  toggleMark
21
- } from "./chunk-DKGVY2VP.js";
21
+ } from "./chunk-QSRFU2G3.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-ZH6Q4KMM.js";
33
+ } from "./chunk-HFCQRPPJ.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-ZH6Q4KMM.js";
9
+ } from "./chunk-HFCQRPPJ.js";
10
10
 
11
11
  // src/site-pages.ts
12
12
  function pagePathOf(rest) {
@@ -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;
@@ -1035,7 +1039,7 @@ function seoFields(options = {}) {
1035
1039
  multiline: true,
1036
1040
  maxLength: 160
1037
1041
  }),
1038
- image: image({ label: "\u041A\u0430\u0440\u0442\u0438\u043D\u043A\u0430 \u0434\u043B\u044F \u0441\u043E\u0446\u0441\u0435\u0442\u0435\u0439" })
1042
+ image: image({ label: "\u041A\u0430\u0440\u0442\u0438\u043D\u043A\u0430 \u0434\u043B\u044F \u0441\u0441\u044B\u043B\u043A\u0438 \u0432 \u0441\u043E\u0446\u0441\u0435\u0442\u044F\u0445" })
1039
1043
  }
1040
1044
  });
1041
1045
  }
@@ -1071,7 +1075,7 @@ function openingHoursField(options = {}) {
1071
1075
  days: choices({ label: "\u0414\u043D\u0438", options: WEEKDAYS }),
1072
1076
  opens: time({ label: "\u041E\u0442\u043A\u0440\u044B\u0432\u0430\u0435\u0442\u0441\u044F" }),
1073
1077
  closes: time({ label: "\u0417\u0430\u043A\u0440\u044B\u0432\u0430\u0435\u0442\u0441\u044F" }),
1074
- note: text({ label: "\u041F\u043E\u0434\u043F\u0438\u0441\u044C", maxLength: 40 })
1078
+ note: text({ label: "\u041F\u0440\u0438\u043C\u0435\u0447\u0430\u043D\u0438\u0435", maxLength: 40 })
1075
1079
  }
1076
1080
  });
1077
1081
  }
@@ -1083,7 +1087,11 @@ function productFields() {
1083
1087
  label: "\u0424\u043E\u0442\u043E",
1084
1088
  item: { photo: image({ label: "\u0424\u043E\u0442\u043E" }) }
1085
1089
  }),
1086
- summary: richText({ label: "\u041A\u0440\u0430\u0442\u043A\u043E", inline: true, maxLength: 200 }),
1090
+ summary: richText({
1091
+ label: "\u0421\u0442\u0440\u043E\u043A\u0430 \u0434\u043B\u044F \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438",
1092
+ inline: true,
1093
+ maxLength: 200
1094
+ }),
1087
1095
  description: richText({ label: "\u041E\u043F\u0438\u0441\u0430\u043D\u0438\u0435" }),
1088
1096
  price: number({ label: "\u0426\u0435\u043D\u0430, \u20BD", min: 0 }),
1089
1097
  priceNote: text({ label: "\u0423\u0442\u043E\u0447\u043D\u0435\u043D\u0438\u0435 \u0446\u0435\u043D\u044B", maxLength: 40 }),
@@ -1748,10 +1756,10 @@ var LINE_BREAKS = /\r\n?/gu;
1748
1756
  var ANY_LINE_BREAK = /[\r\n]+/gu;
1749
1757
  var REQUEST_ISSUE_TEXTS = {
1750
1758
  required: "\u0417\u0430\u043F\u043E\u043B\u043D\u0438\u0442\u0435 \u044D\u0442\u043E \u043F\u043E\u043B\u0435",
1751
- "too-long": "\u0417\u0434\u0435\u0441\u044C \u0441\u043B\u0438\u0448\u043A\u043E\u043C \u0434\u043B\u0438\u043D\u043D\u044B\u0439 \u0442\u0435\u043A\u0441\u0442",
1759
+ "too-long": "\u0421\u043B\u0438\u0448\u043A\u043E\u043C \u0434\u043B\u0438\u043D\u043D\u044B\u0439 \u0442\u0435\u043A\u0441\u0442 \u2014 \u0441\u043E\u043A\u0440\u0430\u0442\u0438\u0442\u0435 \u0435\u0433\u043E",
1752
1760
  "invalid-phone": "\u041F\u0440\u043E\u0432\u0435\u0440\u044C\u0442\u0435 \u043D\u043E\u043C\u0435\u0440 \u0442\u0435\u043B\u0435\u0444\u043E\u043D\u0430",
1753
- "invalid-email": "\u041F\u0440\u043E\u0432\u0435\u0440\u044C\u0442\u0435 \u0430\u0434\u0440\u0435\u0441 \u043F\u043E\u0447\u0442\u044B",
1754
- "unknown-option": "\u0412\u044B\u0431\u0435\u0440\u0438\u0442\u0435 \u043E\u0434\u0438\u043D \u0438\u0437 \u0432\u0430\u0440\u0438\u0430\u043D\u0442\u043E\u0432"
1761
+ "invalid-email": "\u041F\u0440\u043E\u0432\u0435\u0440\u044C\u0442\u0435 \u043F\u043E\u0447\u0442\u0443: \u043D\u0443\u0436\u0435\u043D \u0430\u0434\u0440\u0435\u0441 \u0432\u0438\u0434\u0430 name@mail.ru",
1762
+ "unknown-option": "\u0412\u044B\u0431\u0435\u0440\u0438\u0442\u0435 \u0432\u0430\u0440\u0438\u0430\u043D\u0442 \u0438\u0437 \u0441\u043F\u0438\u0441\u043A\u0430"
1755
1763
  };
1756
1764
  var CONSENT_REQUIRED_TEXT = "\u041E\u0442\u043C\u0435\u0442\u044C\u0442\u0435 \u0441\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";
1757
1765
  function readRequestValues(form, entries) {
@@ -1927,10 +1935,10 @@ function processingOf() {
1927
1935
  return [
1928
1936
  "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",
1929
1937
  `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}.`,
1930
- `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.`,
1938
+ `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\u044C \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\u043E\u0432\u0430\u0442\u044C \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.`,
1931
1939
  "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.",
1932
1940
  "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).",
1933
- "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.",
1941
+ "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 \u043A\u0440\u0443\u0433\u043E\u043C \u043B\u0438\u0446, \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.",
1934
1942
  "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."
1935
1943
  ];
1936
1944
  }
@@ -2018,6 +2026,8 @@ export {
2018
2026
  REVEAL_ATTRIBUTE,
2019
2027
  REVEALED_ATTRIBUTE,
2020
2028
  REVEAL_EVENT,
2029
+ POPOVER_ATTRIBUTE,
2030
+ HELD_ATTRIBUTE,
2021
2031
  imagePosition,
2022
2032
  ratesField,
2023
2033
  estimateOf,
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  pagePathOf
3
- } from "./chunk-6F7DPGWS.js";
3
+ } from "./chunk-3DQI4G6H.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-ZH6Q4KMM.js";
12
+ } from "./chunk-HFCQRPPJ.js";
13
13
 
14
14
  // src/preview-requests.ts
15
15
  var MAX_DRAFT_BYTES = 1024 * 1024;
@@ -6,7 +6,7 @@ import {
6
6
  readRichText,
7
7
  resolveFieldPath,
8
8
  safeHref
9
- } from "./chunk-ZH6Q4KMM.js";
9
+ } from "./chunk-HFCQRPPJ.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,
package/dist/cli.js CHANGED
@@ -3,7 +3,7 @@ import {
3
3
  SITE_CONFIG_FILE,
4
4
  isSiteId,
5
5
  readSiteConfig
6
- } from "./chunk-ZH6Q4KMM.js";
6
+ } from "./chunk-HFCQRPPJ.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-4TEGXELF.js").then(({ connectRequestForms }) => {
19
+ void import("./request-sending-6NTXTW3A.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-ZH6Q4KMM.js";
3
+ } from "./chunk-HFCQRPPJ.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-IY6Q6BUX.js";
3
+ } from "./chunk-OA3GJYVY.js";
4
4
  import {
5
5
  OWN_PHOTOS_PATH
6
6
  } from "./chunk-W2LIOR2C.js";
7
- import "./chunk-6F7DPGWS.js";
7
+ import "./chunk-3DQI4G6H.js";
8
8
  import {
9
9
  SITE_CONFIG_FILE,
10
10
  SITE_DESCRIPTION_PATH,
11
11
  isJsonObject,
12
12
  readSiteConfig
13
- } from "./chunk-ZH6Q4KMM.js";
13
+ } from "./chunk-HFCQRPPJ.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-IY6Q6BUX.js";
10
- import "./chunk-6F7DPGWS.js";
11
- import "./chunk-ZH6Q4KMM.js";
9
+ } from "./chunk-OA3GJYVY.js";
10
+ import "./chunk-3DQI4G6H.js";
11
+ import "./chunk-HFCQRPPJ.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-DKGVY2VP.js";
26
- import "./chunk-ZH6Q4KMM.js";
25
+ } from "./chunk-QSRFU2G3.js";
26
+ import "./chunk-HFCQRPPJ.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-ZH6Q4KMM.js";
15
+ } from "./chunk-HFCQRPPJ.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-IY6Q6BUX.js";
4
- import "../chunk-6F7DPGWS.js";
5
- import "../chunk-ZH6Q4KMM.js";
3
+ } from "../chunk-OA3GJYVY.js";
4
+ import "../chunk-3DQI4G6H.js";
5
+ import "../chunk-HFCQRPPJ.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";
@@ -288,4 +296,4 @@ interface RequestFailedDetail {
288
296
  readonly issues: readonly RequestIssue[];
289
297
  }
290
298
 
291
- export { CONSENT_PAGE_PATH, 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, privacyConsentFields, privacyConsentTextOf, 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
@@ -5,10 +5,12 @@ import {
5
5
  DEFAULT_TEXT_LENGTH,
6
6
  FIELD_PATH_ATTRIBUTE,
7
7
  FIELD_PATH_SEPARATOR,
8
+ HELD_ATTRIBUTE,
8
9
  HOME_PAGE_PATH,
9
10
  MAX_REQUEST_FIELD_LENGTH,
10
11
  MAX_SLUG_LENGTH,
11
12
  PAGE_PATH_SEPARATOR,
13
+ POPOVER_ATTRIBUTE,
12
14
  PRIVACY_PAGE_PATH,
13
15
  RECORD_ID_KEY,
14
16
  RECORD_PLACEHOLDER,
@@ -112,7 +114,7 @@ import {
112
114
  toggle,
113
115
  url,
114
116
  withRecordIds
115
- } from "./chunk-ZH6Q4KMM.js";
117
+ } from "./chunk-HFCQRPPJ.js";
116
118
  export {
117
119
  CONSENT_PAGE_PATH,
118
120
  CONSENT_REQUIRED_TEXT,
@@ -120,10 +122,12 @@ export {
120
122
  DEFAULT_TEXT_LENGTH,
121
123
  FIELD_PATH_ATTRIBUTE,
122
124
  FIELD_PATH_SEPARATOR,
125
+ HELD_ATTRIBUTE,
123
126
  HOME_PAGE_PATH,
124
127
  MAX_REQUEST_FIELD_LENGTH,
125
128
  MAX_SLUG_LENGTH,
126
129
  PAGE_PATH_SEPARATOR,
130
+ POPOVER_ATTRIBUTE,
127
131
  PRIVACY_PAGE_PATH,
128
132
  RECORD_ID_KEY,
129
133
  RECORD_PLACEHOLDER,
package/dist/site.js CHANGED
@@ -3,12 +3,12 @@ import {
3
3
  previewedPageAt,
4
4
  renderedPageAt,
5
5
  staticPagesOf
6
- } from "./chunk-6F7DPGWS.js";
6
+ } from "./chunk-3DQI4G6H.js";
7
7
  import {
8
8
  checkSiteDescription,
9
9
  formatFieldPath,
10
10
  parseContent
11
- } from "./chunk-ZH6Q4KMM.js";
11
+ } from "./chunk-HFCQRPPJ.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.1.0",
3
+ "version": "2.2.1",
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",