@simai-studio/view 1.0.0 → 1.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.
Files changed (86) hide show
  1. package/README.md +5 -5
  2. package/dist/package-receipt.json +356 -114
  3. package/dist/set.json +35 -2
  4. package/dist/smart/rule.js +94 -0
  5. package/dist/smart/rule.js.gz +0 -0
  6. package/dist/smart/view/component.json +10 -2
  7. package/dist/smart/view/component.json.gz +0 -0
  8. package/dist/smart/view/js/view.js +23 -6
  9. package/dist/smart/view/js/view.js.gz +0 -0
  10. package/dist/smart/view/js/view.min.js +1 -1
  11. package/dist/smart/view/js/view.min.js.gz +0 -0
  12. package/dist/smart/view/smart.manifest.json +10 -3
  13. package/dist/smart/view/smart.manifest.json.gz +0 -0
  14. package/dist/smart/view/static/default/open-record.html +12 -17
  15. package/dist/smart/view/static/default/open-record.html.gz +0 -0
  16. package/dist/smart/view/static/default/reference.html +12 -17
  17. package/dist/smart/view/static/default/reference.html.gz +0 -0
  18. package/dist/smart/view-flow/component.json +612 -0
  19. package/dist/smart/view-flow/component.json.gz +0 -0
  20. package/dist/smart/view-flow/css/view-flow.css +203 -0
  21. package/dist/smart/view-flow/css/view-flow.css.gz +0 -0
  22. package/dist/smart/view-flow/css/view-flow.min.css +2 -0
  23. package/dist/smart/view-flow/css/view-flow.min.css.gz +0 -0
  24. package/dist/smart/view-flow/examples.json +452 -0
  25. package/dist/smart/view-flow/examples.json.gz +0 -0
  26. package/dist/smart/view-flow/js/view-flow.js +5858 -0
  27. package/dist/smart/view-flow/js/view-flow.js.gz +0 -0
  28. package/dist/smart/view-flow/js/view-flow.min.js +638 -0
  29. package/dist/smart/view-flow/js/view-flow.min.js.gz +0 -0
  30. package/dist/smart/view-flow/lang/en.json +24 -0
  31. package/dist/smart/view-flow/lang/en.json.gz +0 -0
  32. package/dist/smart/view-flow/lang/ru.json +24 -0
  33. package/dist/smart/view-flow/lang/ru.json.gz +0 -0
  34. package/dist/smart/view-flow/probe.json +149 -0
  35. package/dist/smart/view-flow/probe.json.gz +0 -0
  36. package/dist/smart/view-flow/smart.manifest.json +478 -0
  37. package/dist/smart/view-flow/smart.manifest.json.gz +0 -0
  38. package/dist/smart/view-flow/static/default/answered.html +57 -0
  39. package/dist/smart/view-flow/static/default/answered.html.gz +0 -0
  40. package/dist/smart/view-flow/static/default/ask.html +146 -0
  41. package/dist/smart/view-flow/static/default/ask.html.gz +0 -0
  42. package/dist/smart/view-flow/static/default/expired.html +16 -0
  43. package/dist/smart/view-flow/static/default/expired.html.gz +0 -0
  44. package/dist/smart/view-flow/static/default/groups.html +44 -0
  45. package/dist/smart/view-flow/static/default/groups.html.gz +0 -0
  46. package/dist/smart/view-flow/static/default/reference.html +72 -0
  47. package/dist/smart/view-flow/static/default/reference.html.gz +0 -0
  48. package/dist/smart/view-flow/static/default/untitled.html +41 -0
  49. package/dist/smart/view-flow/static/default/untitled.html.gz +0 -0
  50. package/dist/smart/view-flow/static/sheets.json +443 -0
  51. package/dist/smart/view-flow/static/sheets.json.gz +0 -0
  52. package/dist/smart/view-flow/template/default.css +180 -0
  53. package/dist/smart/view-flow/template/default.css.gz +0 -0
  54. package/dist/smart/view-flow/template/default.js +136 -0
  55. package/dist/smart/view-flow/template/default.js.gz +0 -0
  56. package/dist/smart/view-properties/component.json +10 -2
  57. package/dist/smart/view-properties/component.json.gz +0 -0
  58. package/dist/smart/view-properties/css/view-properties.css +24 -19
  59. package/dist/smart/view-properties/css/view-properties.css.gz +0 -0
  60. package/dist/smart/view-properties/css/view-properties.min.css +1 -1
  61. package/dist/smart/view-properties/css/view-properties.min.css.gz +0 -0
  62. package/dist/smart/view-properties/js/view-properties.js +358 -185
  63. package/dist/smart/view-properties/js/view-properties.js.gz +0 -0
  64. package/dist/smart/view-properties/js/view-properties.min.js +94 -121
  65. package/dist/smart/view-properties/js/view-properties.min.js.gz +0 -0
  66. package/dist/smart/view-properties/lang/en.json +0 -7
  67. package/dist/smart/view-properties/lang/en.json.gz +0 -0
  68. package/dist/smart/view-properties/lang/ru.json +0 -7
  69. package/dist/smart/view-properties/lang/ru.json.gz +0 -0
  70. package/dist/smart/view-properties/smart.manifest.json +16 -9
  71. package/dist/smart/view-properties/smart.manifest.json.gz +0 -0
  72. package/dist/smart/view-properties/template/default.css +22 -19
  73. package/dist/smart/view-properties/template/default.css.gz +0 -0
  74. package/dist/smart/view-properties/template/default.js +1 -79
  75. package/dist/smart/view-properties/template/default.js.gz +0 -0
  76. package/dist/smart/view-table/component.json +10 -2
  77. package/dist/smart/view-table/component.json.gz +0 -0
  78. package/dist/smart/view-table/js/view-table.js +377 -88
  79. package/dist/smart/view-table/js/view-table.js.gz +0 -0
  80. package/dist/smart/view-table/js/view-table.min.js +58 -56
  81. package/dist/smart/view-table/js/view-table.min.js.gz +0 -0
  82. package/dist/smart/view-table/smart.manifest.json +11 -4
  83. package/dist/smart/view-table/smart.manifest.json.gz +0 -0
  84. package/dist/smart/view-table/template/default.js +1 -1
  85. package/dist/smart/view-table/template/default.js.gz +0 -0
  86. package/package.json +1 -1
@@ -69,6 +69,184 @@ function normalizeBadgeContract({
69
69
 
70
70
  /***/ },
71
71
 
72
+ /***/ "e577837dd70a"
73
+ (module, __webpack_exports__, __webpack_require__) {
74
+
75
+ __webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try {
76
+ __webpack_require__.r(__webpack_exports__);
77
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
78
+ /* harmony export */ calendarDayOffset: () => (/* binding */ calendarDayOffset),
79
+ /* harmony export */ formatDate: () => (/* binding */ formatDate),
80
+ /* harmony export */ msUntilNextDay: () => (/* binding */ msUntilNextDay),
81
+ /* harmony export */ toDate: () => (/* reexport safe */ _format_intl_js__WEBPACK_IMPORTED_MODULE_0__.toDate)
82
+ /* harmony export */ });
83
+ /* harmony import */ var _format_intl_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("15b4e93ff6ed");
84
+ var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_format_intl_js__WEBPACK_IMPORTED_MODULE_0__]);
85
+ var __webpack_async_dependencies_result__ = (__webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__);
86
+ _format_intl_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_async_dependencies_result__[0];
87
+ // Dates in the page's language: formatDate, the calendar day offset and the
88
+ // next midnight, with no top-level side effects (format-intl.js). The same
89
+ // functions as core/js/format.js and SF.format; relative days and times are
90
+ // format-relative.js, so a bundle that writes a date does not carry them.
91
+
92
+
93
+ const DAY_MS = 86400000;
94
+
95
+ function hasDateStyle(style) {
96
+ return style === 'short' || style === 'medium' || style === 'long' || style === 'full';
97
+ }
98
+ /**
99
+ * A date, a time or both in the locale.
100
+ *
101
+ * formatDate(at) 3 нояб. 2026 г. / Nov 3, 2026
102
+ * formatDate(at, {date: 'short'}) 03.11.2026 / 11/3/26
103
+ * formatDate(at, {date: 'long'}) 3 ноября 2026 г. / November 3, 2026
104
+ * formatDate(at, {time: 'short'}) 3 нояб. 2026 г., 14:05
105
+ * formatDate(at, {date: null, time: 'short'}) 14:05 / 2:05 PM
106
+ *
107
+ * `date` and `time` are Intl styles (short, medium, long, full); `intl` gives
108
+ * Intl.DateTimeFormat options outright, for a form the styles do not name (a
109
+ * chart's tick, «14:05» with two-digit hours). Anything that is not a date is
110
+ * `gap`, '' by default.
111
+ */
112
+
113
+
114
+ function formatDate(value, {
115
+ date = 'medium',
116
+ time = null,
117
+ intl = null,
118
+ gap = '',
119
+ ...where
120
+ } = {}) {
121
+ const moment = (0,_format_intl_js__WEBPACK_IMPORTED_MODULE_0__.toDate)(value);
122
+ if (!moment) return gap;
123
+ let options = intl;
124
+
125
+ if (!options) {
126
+ options = {};
127
+ if (hasDateStyle(date)) options.dateStyle = date;
128
+ if (hasDateStyle(time)) options.timeStyle = time;
129
+ if (!options.dateStyle && !options.timeStyle) options.dateStyle = 'medium';
130
+ }
131
+
132
+ return (0,_format_intl_js__WEBPACK_IMPORTED_MODULE_0__.intlFormatter)('DateTimeFormat', (0,_format_intl_js__WEBPACK_IMPORTED_MODULE_0__.formatLocale)(where), options).format(moment);
133
+ }
134
+ /**
135
+ * Calendar days from `now` to the value in the reader's time zone: 0 today,
136
+ * -1 yesterday, 1 tomorrow; NaN when the value is no date. Counted on
137
+ * calendar dates, not 24-hour spans, so 23:59 yesterday is -1 at 00:01 and a
138
+ * day of a clock change is still one day.
139
+ */
140
+
141
+ function calendarDayOffset(value, {
142
+ now = new Date()
143
+ } = {}) {
144
+ const moment = (0,_format_intl_js__WEBPACK_IMPORTED_MODULE_0__.toDate)(value);
145
+ const today = (0,_format_intl_js__WEBPACK_IMPORTED_MODULE_0__.toDate)(now);
146
+ if (!moment || !today) return Number.NaN;
147
+ const day = Date.UTC(moment.getFullYear(), moment.getMonth(), moment.getDate());
148
+ const base = Date.UTC(today.getFullYear(), today.getMonth(), today.getDate());
149
+ return Math.round((day - base) / DAY_MS);
150
+ }
151
+ /**
152
+ * Milliseconds from `now` to the reader's next midnight, when every relative
153
+ * day on the screen moves by one. A component that shows them sets a timer
154
+ * for this long (plus a second's margin, so it wakes in the new day) and
155
+ * draws them again; «сегодня» said yesterday is wrong by morning.
156
+ */
157
+
158
+ function msUntilNextDay(now = new Date()) {
159
+ const today = (0,_format_intl_js__WEBPACK_IMPORTED_MODULE_0__.toDate)(now) ?? new Date();
160
+ const next = new Date(today.getFullYear(), today.getMonth(), today.getDate() + 1);
161
+ return next.getTime() - today.getTime();
162
+ }
163
+ __webpack_async_result__();
164
+ } catch(e) { __webpack_async_result__(e); } });
165
+
166
+ /***/ },
167
+
168
+ /***/ "15b4e93ff6ed"
169
+ (module, __webpack_exports__, __webpack_require__) {
170
+
171
+ __webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try {
172
+ __webpack_require__.r(__webpack_exports__);
173
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
174
+ /* harmony export */ formatLocale: () => (/* binding */ formatLocale),
175
+ /* harmony export */ intlFormatter: () => (/* binding */ intlFormatter),
176
+ /* harmony export */ toDate: () => (/* binding */ toDate)
177
+ /* harmony export */ });
178
+ /* harmony import */ var _page_language_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("43090d1c8307");
179
+ var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_page_language_js__WEBPACK_IMPORTED_MODULE_0__]);
180
+ var __webpack_async_dependencies_result__ = (__webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__);
181
+ _page_language_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_async_dependencies_result__[0];
182
+ /* harmony import */ var _page_language_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_page_language_js__WEBPACK_IMPORTED_MODULE_0__);
183
+ // The part every format module shares (core/js/format.js says what the
184
+ // helpers are): the locale a call formats in, a Date from what a host gives,
185
+ // and the Intl formatters, kept on a global every copy of these modules shares
186
+ // (bundles each carry their own module copy; page-language.js says why).
187
+ //
188
+ // No top-level side effects, here or in format-number.js, format-date.js,
189
+ // format-relative.js and format-file-size.js (ui-chart, 2026-11-05): a bundle
190
+ // that imports one function carries that function and what it calls, nothing
191
+ // else. The global is made on the first format, not on load, and SF.format is
192
+ // published by core's entry (index.js, publishFormat in format.js).
193
+
194
+ /** The locale a call formats in: the one it names, else its node's page language. */
195
+
196
+ function formatLocale({
197
+ locale,
198
+ node
199
+ } = {}) {
200
+ return String(locale || '').trim() || (0,_page_language_js__WEBPACK_IMPORTED_MODULE_0__.pageLocale)(node);
201
+ }
202
+ /** A Date from a Date, a time in milliseconds or a date string; null when it is none. */
203
+
204
+ function toDate(value) {
205
+ if (value === null || value === undefined || value === '') return null;
206
+ const date = value instanceof Date ? new Date(value.getTime()) : new Date(typeof value === 'string' && /^\d+$/u.test(value) ? Number(value) : value);
207
+ return Number.isNaN(date.getTime()) ? null : date;
208
+ } // The formatters every copy shares, made on the first call.
209
+
210
+ function formatterCache() {
211
+ const root = typeof globalThis !== 'undefined' ? globalThis : {};
212
+ if (!root.__sfFormat) root.__sfFormat = {
213
+ formatters: new Map()
214
+ };
215
+ return root.__sfFormat.formatters;
216
+ } // One formatter per kind, locale and options. An unknown locale falls back to
217
+ // the browser's, and options the platform refuses (an unknown unit or
218
+ // currency) to a plain number, so a typo in a page never throws at a reader.
219
+
220
+
221
+ function intlFormatter(kind, locale, options) {
222
+ const key = `${kind}|${locale}|${JSON.stringify(options)}`;
223
+ const cache = formatterCache();
224
+ if (cache.has(key)) return cache.get(key);
225
+ const Make = Intl[kind];
226
+ let made;
227
+
228
+ try {
229
+ made = new Make(locale || undefined, options);
230
+ } catch {
231
+ try {
232
+ made = new Make(undefined, options);
233
+ } catch {
234
+ made = new Make(locale || undefined, kind === 'NumberFormat' ? {
235
+ maximumFractionDigits: 2
236
+ } : {});
237
+ }
238
+ } // A page that formats in many locales does not grow the cache for ever.
239
+
240
+
241
+ if (cache.size >= 256) cache.delete(cache.keys().next().value);
242
+ cache.set(key, made);
243
+ return made;
244
+ }
245
+ __webpack_async_result__();
246
+ } catch(e) { __webpack_async_result__(e); } });
247
+
248
+ /***/ },
249
+
72
250
  /***/ "1b42c5117087"
73
251
  (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
74
252
 
@@ -1859,6 +2037,7 @@ function renderChoiceEdit(field, value, host) {
1859
2037
  name=${fieldName(field)}
1860
2038
  ?required=${Boolean(field.required)}
1861
2039
  value=${value ?? ''}
2040
+ placeholder=${field.placeholder || lit__WEBPACK_IMPORTED_MODULE_0__.nothing}
1862
2041
  aria-label=${field.label || field.key || ''}
1863
2042
  .options=${editOptions(field, value, false)}
1864
2043
  @change=${event => host.setFieldValue(field, event.detail?.value ?? null)}
@@ -1912,6 +2091,7 @@ function renderChoicesEdit(field, value, host) {
1912
2091
  search="false"
1913
2092
  name=${fieldName(field)}
1914
2093
  ?required=${Boolean(field.required)}
2094
+ placeholder=${field.placeholder || lit__WEBPACK_IMPORTED_MODULE_0__.nothing}
1915
2095
  aria-label=${field.label || field.key || ''}
1916
2096
  .options=${editOptions(field, value, true)}
1917
2097
  @change=${event => {
@@ -3191,10 +3371,10 @@ __webpack_require__.r(__webpack_exports__);
3191
3371
  /* harmony import */ var _core_js_page_language__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__("43090d1c8307");
3192
3372
  /* harmony import */ var _core_js_layer_stack__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__("18003344cff0");
3193
3373
  /* harmony import */ var _js_templates_default__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__("40b137e60526");
3194
- /* harmony import */ var _field_renderers_datetime_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__("9ce1a42b2a85");
3195
- /* harmony import */ var _js_conditions_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__("844bdc4d24eb");
3196
- var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_core_js_smart_base__WEBPACK_IMPORTED_MODULE_0__, _core_js_element_manifest__WEBPACK_IMPORTED_MODULE_1__, _core_js_page_language__WEBPACK_IMPORTED_MODULE_8__, _core_js_layer_stack__WEBPACK_IMPORTED_MODULE_9__, _js_templates_default__WEBPACK_IMPORTED_MODULE_10__]);
3197
- ([_core_js_smart_base__WEBPACK_IMPORTED_MODULE_0__, _core_js_element_manifest__WEBPACK_IMPORTED_MODULE_1__, _core_js_page_language__WEBPACK_IMPORTED_MODULE_8__, _core_js_layer_stack__WEBPACK_IMPORTED_MODULE_9__, _js_templates_default__WEBPACK_IMPORTED_MODULE_10__] = __webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__);
3374
+ /* harmony import */ var _js_conditions_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__("844bdc4d24eb");
3375
+ /* harmony import */ var _view_table_js_format_value_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__("2f31b00ad99a");
3376
+ var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_core_js_smart_base__WEBPACK_IMPORTED_MODULE_0__, _core_js_element_manifest__WEBPACK_IMPORTED_MODULE_1__, _core_js_page_language__WEBPACK_IMPORTED_MODULE_8__, _core_js_layer_stack__WEBPACK_IMPORTED_MODULE_9__, _js_templates_default__WEBPACK_IMPORTED_MODULE_10__, _view_table_js_format_value_js__WEBPACK_IMPORTED_MODULE_12__]);
3377
+ ([_core_js_smart_base__WEBPACK_IMPORTED_MODULE_0__, _core_js_element_manifest__WEBPACK_IMPORTED_MODULE_1__, _core_js_page_language__WEBPACK_IMPORTED_MODULE_8__, _core_js_layer_stack__WEBPACK_IMPORTED_MODULE_9__, _js_templates_default__WEBPACK_IMPORTED_MODULE_10__, _view_table_js_format_value_js__WEBPACK_IMPORTED_MODULE_12__] = __webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__);
3198
3378
  /* harmony import */ var _core_js_smart_base__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_core_js_smart_base__WEBPACK_IMPORTED_MODULE_0__);
3199
3379
  /* harmony import */ var _core_js_element_manifest__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_core_js_element_manifest__WEBPACK_IMPORTED_MODULE_1__);
3200
3380
  /* harmony import */ var _core_js_page_language__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_core_js_page_language__WEBPACK_IMPORTED_MODULE_8__);
@@ -3715,13 +3895,10 @@ class SfPropertyView extends PropertyViewElement {
3715
3895
 
3716
3896
  this.editing = null;
3717
3897
  this.changed = new Map();
3718
- this.errors = new Map(); // What a person has entered into a field that is not a value yet: a
3719
- // datetime's day and time, held until both make one (inputDrafts), and
3720
- // what is wrong with an entry that cannot be written (inputErrors).
3721
- // The view's own, so a host's refusal does not replace them; a save
3722
- // waits until they are put right.
3898
+ this.errors = new Map(); // What is wrong with an entry a field control reports it cannot write
3899
+ // yet (inputErrors). The view's own, so a host's refusal does not
3900
+ // replace them; a save waits until they are put right.
3723
3901
 
3724
- this.inputDrafts = new Map();
3725
3902
  this.inputErrors = new Map(); // The keys of inputErrors a field control reported itself (port 1.16.0:
3726
3903
  // a masked string that does not fill its mask, through the renderer
3727
3904
  // set's setFieldError). The control draws that message under itself, so
@@ -4894,7 +5071,7 @@ class SfPropertyView extends PropertyViewElement {
4894
5071
  return (Array.isArray(entries) ? entries : []).filter(entry => entry && entry.hidden !== true).filter(entry => this.showRare || entry.rare !== true) // A field its condition hides is not drawn (port 1.14.0). Not while
4895
5072
  // the view is arranged -- the template lists every entry then -- and
4896
5073
  // not by the view: `hidden` is the arrangement's, `when` the values'.
4897
- .filter(entry => !values || !entry.when || (0,_js_conditions_js__WEBPACK_IMPORTED_MODULE_12__.fieldConditions)(entry, values).visible);
5074
+ .filter(entry => !values || !entry.when || (0,_js_conditions_js__WEBPACK_IMPORTED_MODULE_11__.fieldConditions)(entry, values).visible);
4898
5075
  } // Every field's value as it stands on screen: what the record holds, or what
4899
5076
  // the person changed it to and has not saved. The conditions read these, so
4900
5077
  // a field appears the moment the value it waits for is chosen, before any
@@ -4924,7 +5101,7 @@ class SfPropertyView extends PropertyViewElement {
4924
5101
 
4925
5102
  conditionedField(field, values = this.fieldValues()) {
4926
5103
  if (!field?.when) return field;
4927
- const decided = (0,_js_conditions_js__WEBPACK_IMPORTED_MODULE_12__.fieldConditions)(field, values);
5104
+ const decided = (0,_js_conditions_js__WEBPACK_IMPORTED_MODULE_11__.fieldConditions)(field, values);
4928
5105
  return { ...field,
4929
5106
  required: decided.required,
4930
5107
  readonly: field.readonly === true || !decided.enabled
@@ -4937,7 +5114,7 @@ class SfPropertyView extends PropertyViewElement {
4937
5114
  const hidden = new Set();
4938
5115
 
4939
5116
  const check = field => {
4940
- if (field?.when && !(0,_js_conditions_js__WEBPACK_IMPORTED_MODULE_12__.fieldConditions)(field, values).visible) hidden.add(String(field.key));
5117
+ if (field?.when && !(0,_js_conditions_js__WEBPACK_IMPORTED_MODULE_11__.fieldConditions)(field, values).visible) hidden.add(String(field.key));
4941
5118
  };
4942
5119
 
4943
5120
  for (const section of this.sections ?? []) {
@@ -4958,6 +5135,31 @@ class SfPropertyView extends PropertyViewElement {
4958
5135
  const hidden = this._hiddenByCondition();
4959
5136
 
4960
5137
  return Object.fromEntries([...this.changed].filter(([key]) => !hidden.has(key)));
5138
+ } // The host as the renderer set reads a field shown: its formatFieldValue
5139
+ // first, and for a date it did not format, the date in the page's language
5140
+ // (format-date), as sf-view-table's cells read it. A date stood in the card
5141
+ // as stored -- «2026-11-02» -- unless the host formatted it (2026-11-05).
5142
+
5143
+
5144
+ get viewHost() {
5145
+ const host = this.hostPort ?? null;
5146
+ if (this._viewHost?.host === host) return this._viewHost.view; // Everything else the host offers the renderer set (its words, say) is
5147
+ // reached through it unchanged.
5148
+
5149
+ const view = Object.create(host && typeof host === "object" ? host : null);
5150
+ Object.assign(view, {
5151
+ formatFieldValue: (field, value) => {
5152
+ const own = host?.formatFieldValue?.(field, value);
5153
+ if (typeof own === "string") return own;
5154
+ const type = field?.propertyType ?? field?.property_type ?? field?.type ?? field?.dataType;
5155
+ return (0,_view_table_js_format_value_js__WEBPACK_IMPORTED_MODULE_12__.formatDateValue)(type, value, this) || undefined;
5156
+ }
5157
+ });
5158
+ this._viewHost = {
5159
+ host,
5160
+ view
5161
+ };
5162
+ return view;
4961
5163
  }
4962
5164
 
4963
5165
  templateContext() {
@@ -4965,6 +5167,7 @@ class SfPropertyView extends PropertyViewElement {
4965
5167
  return this.createTemplateContext({ ...props,
4966
5168
  component: this,
4967
5169
  hostPort: this.hostPort,
5170
+ viewHost: this.viewHost,
4968
5171
  size: this.size,
4969
5172
  mode: this.mode,
4970
5173
  mayEdit: this.mayEdit,
@@ -5001,11 +5204,6 @@ class SfPropertyView extends PropertyViewElement {
5001
5204
  // is wrong beside it and each message under its field.
5002
5205
  inputsInvalid: this.inputErrors.size > 0,
5003
5206
  controlErrors: this.controlErrors,
5004
- dateTimeText: {
5005
- dateLabel: (0,_core_js_page_language__WEBPACK_IMPORTED_MODULE_8__.pageText)(PROPERTY_VIEW_TEXT, "dateTimeDateLabel", this),
5006
- timeLabel: (0,_core_js_page_language__WEBPACK_IMPORTED_MODULE_8__.pageText)(PROPERTY_VIEW_TEXT, "dateTimeTimeLabel", this),
5007
- placeholder: (0,_core_js_page_language__WEBPACK_IMPORTED_MODULE_8__.pageText)(PROPERTY_VIEW_TEXT, "timePlaceholderText", this)
5008
- },
5009
5207
  canPickRecords: this.canPickRecords,
5010
5208
  canUploadFiles: this.canUploadFiles,
5011
5209
  // The base captures the host's slot content in connectedCallback,
@@ -5586,9 +5784,9 @@ class SfPropertyView extends PropertyViewElement {
5586
5784
  reason: "prevented"
5587
5785
  };
5588
5786
  } // What would be lost by closing: every changed field, and every entry that
5589
- // is not a value yet -- a day picked for a datetime whose time is still
5590
- // empty is work the person did, though there is nothing to save (Larena
5591
- // acceptance, 2026-10-22: Esc after picking a day closed without asking).
5787
+ // is not a value yet -- a masked text not filled in is work the person did,
5788
+ // though there is nothing to save (Larena acceptance, 2026-10-22: Esc after
5789
+ // an entry closed without asking).
5592
5790
 
5593
5791
 
5594
5792
  get unsavedFields() {
@@ -5808,62 +6006,28 @@ class SfPropertyView extends PropertyViewElement {
5808
6006
 
5809
6007
 
5810
6008
  changeField(field, value) {
5811
- const key = String(field.key ?? "");
5812
- if (value === undefined) this.changed.delete(key);else this.changed.set(key, value);
6009
+ const key = String(field.key ?? ""); // Back to what the record holds is no change. A control is drawn with
6010
+ // the change it made, so it compares a later entry with that and not
6011
+ // with the record: a time put back to the stored one was written.
6012
+
6013
+ const stored = Object.hasOwn(field ?? {}, "value") && value !== undefined && JSON.stringify(value) === JSON.stringify(field.value ?? null);
6014
+ if (value === undefined || stored) this.changed.delete(key);else this.changed.set(key, value);
5813
6015
  this.errors.delete(key); // A confirmation described the save as it stood; an entry changed after
5814
6016
  // it is a different save, and the question goes until save is pressed again.
5815
6017
 
5816
6018
  this.confirmation = null;
5817
6019
  this.requestComponentUpdate("changed");
5818
6020
  return this;
5819
- } // A datetime's day or time, as the person entered it (js/datetime-edit.js).
5820
- // The two make one value; until they do, the entry is held as a draft and
5821
- // what is missing is said under the field, as a host's error would be.
5822
-
5823
-
5824
- dateTimeDraft(key) {
5825
- return this.inputDrafts.get(String(key)) ?? null;
5826
- }
5827
-
5828
- changeDateTime(field, value, part, text) {
5829
- const key = String(field.key ?? ""); // What the record holds, and what the controls show now: the draft,
5830
- // or the value the field is drawn with (a change not yet saved).
5831
-
5832
- const original = (0,_field_renderers_datetime_js__WEBPACK_IMPORTED_MODULE_11__.splitDateTime)(field.value);
5833
- const current = this.inputDrafts.get(key) ?? (0,_field_renderers_datetime_js__WEBPACK_IMPORTED_MODULE_11__.splitDateTime)(value); // A time that reads as one is kept as hh:mm, so «0930» typed without
5834
- // the mask shows as 09:30; anything else stays as typed, to be put right.
5835
-
5836
- const typed = String(text ?? "");
5837
- const draft = { ...current,
5838
- [part]: part === "time" ? (0,_field_renderers_datetime_js__WEBPACK_IMPORTED_MODULE_11__.normalizeTime)(typed) ?? typed : typed
5839
- };
5840
- this.inputDrafts.set(key, draft);
5841
- const result = (0,_field_renderers_datetime_js__WEBPACK_IMPORTED_MODULE_11__.composeDateTime)(original, draft);
5842
-
5843
- if (result.error) {
5844
- this.changed.delete(key);
5845
- this.errors.delete(key);
5846
- this.inputErrors.set(key, (0,_core_js_page_language__WEBPACK_IMPORTED_MODULE_8__.pageText)(PROPERTY_VIEW_TEXT, `${result.error}Text`, this));
5847
- this.requestComponentUpdate("errors");
5848
- return this;
5849
- }
5850
-
5851
- this.inputErrors.delete(key); // Back to what the record holds is no change: nothing is written.
5852
-
5853
- const same = result.value === null ? original.known && !original.date : result.value === original.raw;
5854
- return this.changeField(field, same ? undefined : result.value);
5855
6021
  }
5856
6022
 
5857
6023
  _clearInputs() {
5858
- this.inputDrafts.clear();
5859
6024
  this.inputErrors.clear();
5860
6025
  this.controlErrors.clear();
5861
6026
  } // A field control that knows its entry is not a value yet (port 1.16.0,
5862
6027
  // consumer simai.main): a masked string that does not fill its mask. The
5863
6028
  // renderer set tells the host through setFieldError(field, message) on
5864
6029
  // every keystroke, and null once the text is complete or cleared. Such an
5865
- // entry is held where a datetime's half-entered pair is held, in
5866
- // inputErrors, so the same rule stops both saves -- group.save and
6030
+ // entry is held in inputErrors, so the same rule stops both saves -- group.save and
5867
6031
  // record.save («Изменить всё») -- and Save is drawn disabled while any field
5868
6032
  // of the surface is incomplete. Each field is its own key, so one masked
5869
6033
  // field completed does not release another still incomplete. What was typed
@@ -5892,7 +6056,7 @@ class SfPropertyView extends PropertyViewElement {
5892
6056
 
5893
6057
 
5894
6058
  fieldDisabled(field, values = this.fieldValues()) {
5895
- return Boolean(field?.when) && !(0,_js_conditions_js__WEBPACK_IMPORTED_MODULE_12__.fieldConditions)(field, values).enabled;
6059
+ return Boolean(field?.when) && !(0,_js_conditions_js__WEBPACK_IMPORTED_MODULE_11__.fieldConditions)(field, values).enabled;
5896
6060
  } // An entry that is not a value yet stops a save, and says so where it is.
5897
6061
 
5898
6062
 
@@ -7419,124 +7583,35 @@ function fieldConditions(field, values) {
7419
7583
 
7420
7584
  /***/ },
7421
7585
 
7422
- /***/ "d577a2a824ab"
7586
+ /***/ "62c5c417c97d"
7423
7587
  (module, __webpack_exports__, __webpack_require__) {
7424
7588
 
7425
7589
  __webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try {
7426
7590
  __webpack_require__.r(__webpack_exports__);
7427
7591
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
7428
- /* harmony export */ renderDateTimeEdit: () => (/* binding */ renderDateTimeEdit)
7592
+ /* harmony export */ renderFieldValue: () => (/* binding */ renderFieldValue)
7429
7593
  /* harmony export */ });
7430
7594
  /* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("2a080a730149");
7431
- /* harmony import */ var _field_renderers_datetime_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("9ce1a42b2a85");
7432
- var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([lit__WEBPACK_IMPORTED_MODULE_0__]);
7433
- var __webpack_async_dependencies_result__ = (__webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__);
7434
- lit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_async_dependencies_result__[0];
7595
+ /* harmony import */ var _field_renderers_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("e5483002f3ea");
7596
+ var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([lit__WEBPACK_IMPORTED_MODULE_0__, _field_renderers_index_js__WEBPACK_IMPORTED_MODULE_1__]);
7597
+ ([lit__WEBPACK_IMPORTED_MODULE_0__, _field_renderers_index_js__WEBPACK_IMPORTED_MODULE_1__] = __webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__);
7435
7598
  /* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lit__WEBPACK_IMPORTED_MODULE_0__);
7436
7599
 
7437
- // A datetime field edited as what it is: a day and a time of day (Larena
7438
- // acceptance, 2026-10-22: «Дата и время» kept only the day, so a new record
7439
- // could not get a time and «15.11.2026 10:30» was saved as «15.11.2026»).
7600
+ // One field's value, shown or edited, drawn by the SIMAI Framework field
7601
+ // renderers. Moved out of the record component's template (sf-view-properties
7602
+ // 1.10.0) so that every view of the set that draws a field draws it the same
7603
+ // way: sf-view-properties and sf-view-flow import this, and neither
7604
+ // has field code of its own (reuse rule, naming decision 2026-11-02).
7440
7605
  //
7441
- // The shared renderer set edits a datetime with sf-input-date alone, which has
7442
- // no clock, and puts the record's old time back on the way out. This view
7443
- // draws the pair itself: the Framework's sf-input-date for the day and the
7444
- // Framework's sf-input, masked to hh:mm, for the time -- sf-input has no
7445
- // input-type="time" (its types are text, email, password, search, tel, url),
7446
- // and a raw <input type="time"> would be the one unstyled control in the panel.
7447
- // Both are drawn at the view's size, on one row, each named for assistive
7448
- // technology («Начало: дата», «Начало: время»).
7449
- //
7450
- // The value is the host's text, in the site's time zone, as it reads it. The
7451
- // round trip is lossless: an untouched field is not written at all, and a
7452
- // field whose day and time come back to what they were writes back exactly
7453
- // the text it read. A changed day keeps the record's clock (seconds, fraction)
7454
- // and zone; a changed time is hh:mm:00 with the record's zone; a new value has
7455
- // no zone and is the site's time, which is how the host sends and reads it.
7456
- // The pair. `draft` is what the person has entered so far, kept by the view so
7457
- // a half-typed time survives a render; without one the stored value shows.
7458
-
7459
- function renderDateTimeEdit(context, field, value) {
7460
- const key = String(field.key ?? '');
7461
- const stored = (0,_field_renderers_datetime_js__WEBPACK_IMPORTED_MODULE_1__.splitDateTime)(value);
7462
- const draft = context.component.dateTimeDraft(key) ?? stored;
7463
- const label = String(field.label || field.key || '');
7464
- const words = context.dateTimeText;
7465
- const size = context.size === '1/2' ? '1/2' : '1';
7466
- const name = `sf_field_${field.key || 'value'}`;
7467
- const invalid = context.errors.has(key);
7468
-
7469
- const change = (part, text) => context.component.changeDateTime(field, value, part, text); // The day is bound as a property, not as the value attribute: sf-input-date
7470
- // reads a value attribute back after the person empties the field, so an
7471
- // attribute-bound day could not be cleared (its date getter falls back to
7472
- // the attribute once its own state is empty).
7473
-
7474
-
7475
- return (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)`
7476
- <div class="sf-property-view-datetime" role="group" aria-label=${label} data-datetime=${key}>
7477
- <sf-input-date
7478
- class="sf-property-view-datetime-date"
7479
- size=${size}
7480
- name=${`${name}_date`}
7481
- .value=${draft.date}
7482
- aria-label=${words.dateLabel.replace('{label}', label)}
7483
- ?required=${Boolean(field.required)}
7484
- @change=${event => {
7485
- // The datepicker's own change, not a bubbling native one
7486
- // from its text field: only the first carries the ISO day.
7487
- if (event.target !== event.currentTarget) return;
7488
- change('date', event.detail?.value ?? event.currentTarget?.value ?? '');
7489
- }}
7490
- ></sf-input-date>
7491
- <sf-input
7492
- class="sf-property-view-datetime-time"
7493
- size=${size}
7494
- appearance="bordered"
7495
- root-class="sf-property-view-datetime-time-field"
7496
- name=${`${name}_time`}
7497
- value=${draft.time}
7498
- inputmode="numeric"
7499
- autocomplete="off"
7500
- placeholder=${words.placeholder}
7501
- mask
7502
- mask-pattern="00:00"
7503
- ?invalid=${invalid}
7504
- ?required=${Boolean(field.required)}
7505
- aria-label=${words.timeLabel.replace('{label}', label)}
7506
- @change=${event => change('time', event.currentTarget?.value ?? '')}
7507
- ></sf-input>
7508
- </div>
7509
- `;
7510
- }
7511
- __webpack_async_result__();
7512
- } catch(e) { __webpack_async_result__(e); } });
7513
-
7514
- /***/ },
7515
-
7516
- /***/ "40b137e60526"
7517
- (module, __webpack_exports__, __webpack_require__) {
7518
-
7519
- __webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try {
7520
- __webpack_require__.r(__webpack_exports__);
7521
- /* harmony export */ __webpack_require__.d(__webpack_exports__, {
7522
- /* harmony export */ renderPropertyViewTemplate: () => (/* binding */ renderPropertyViewTemplate)
7523
- /* harmony export */ });
7524
- /* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("2a080a730149");
7525
- /* harmony import */ var _default_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("9e9dad7bcc09");
7526
- /* harmony import */ var _field_renderers_index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__("e5483002f3ea");
7527
- /* harmony import */ var _datetime_edit_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__("d577a2a824ab");
7528
- var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([lit__WEBPACK_IMPORTED_MODULE_0__, _field_renderers_index_js__WEBPACK_IMPORTED_MODULE_2__, _datetime_edit_js__WEBPACK_IMPORTED_MODULE_3__]);
7529
- ([lit__WEBPACK_IMPORTED_MODULE_0__, _field_renderers_index_js__WEBPACK_IMPORTED_MODULE_2__, _datetime_edit_js__WEBPACK_IMPORTED_MODULE_3__] = __webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__);
7530
- /* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lit__WEBPACK_IMPORTED_MODULE_0__);
7531
-
7532
-
7533
-
7534
- // The arrangement, drawn in the component's own light DOM. Not in a shadow root:
7535
- // the field controls are Smart elements whose stylesheets are document-level, and
7536
- // a document stylesheet does not cross a shadow boundary. sf-view slots its
7537
- // children for exactly this reason and says so beside the slot; the first version
7538
- // of this composite built them inside a shadow root and every control came out
7539
- // with its markup and none of its CSS.
7606
+ // `context` is what the caller's template reads:
7607
+ // component changeField(field, value), reportFieldError(field, message),
7608
+ // openReference(field, value); with the uploads and the
7609
+ // picker methods when canUploadFiles / canPickRecords
7610
+ // changed a Map of the values typed and not saved yet, by key
7611
+ // size '1' or '1/2', the renderers' size
7612
+ // viewHost the host the view renderers read (formatFieldValue)
7613
+ // emptyText what an empty value reads as
7614
+ // canUploadFiles, canPickRecords whether the host offers those
7540
7615
 
7541
7616
  function renderFieldValue(context, field, editing, {
7542
7617
  disabled = false
@@ -7559,19 +7634,20 @@ function renderFieldValue(context, field, editing, {
7559
7634
  setFieldOptionSearch: (target, text) => context.component.setFieldOptionSearch(target, text),
7560
7635
  loadFieldOptions: (target, request) => context.component.loadFieldOptions(target, request)
7561
7636
  } : {})
7562
- }; // A datetime is edited as a day and a time (../datetime-edit.js): the
7563
- // shared set's control edits the day alone. A readonly one is shown, as the
7564
- // set shows every readonly field.
7637
+ }; // A datetime and a time of day are the renderer set's: sf-input-date in
7638
+ // mode datetime and time, one control each (SIMAI Framework duplication
7639
+ // audit A-14). This view drew its own pair -- the day in a datepicker and
7640
+ // the time in a masked field -- which cut the day short in a half-width
7641
+ // field and held half-typed entries of its own.
7565
7642
 
7566
- const type = field.propertyType || field.type || field.dataType;
7567
- const content = editing && type === 'datetime' && field.readonly !== true ? (0,_datetime_edit_js__WEBPACK_IMPORTED_MODULE_3__.renderDateTimeEdit)(context, field, context.changed.has(key) ? context.changed.get(key) : field.value) : editing ? (0,_field_renderers_index_js__WEBPACK_IMPORTED_MODULE_2__.renderEditField)(field, context.changed.has(key) ? context.changed.get(key) : field.value, editHost, // A field its condition turns off is drawn disabled where the set
7643
+ const content = editing ? (0,_field_renderers_index_js__WEBPACK_IMPORTED_MODULE_1__.renderEditField)(field, context.changed.has(key) ? context.changed.get(key) : field.value, editHost, // A field its condition turns off is drawn disabled where the set
7568
7644
  // draws disabled apart from read-only (a choice as buttons).
7569
7645
  {
7570
7646
  size: context.size,
7571
7647
  ...(disabled ? {
7572
7648
  disabled: true
7573
7649
  } : {})
7574
- }) : (0,_field_renderers_index_js__WEBPACK_IMPORTED_MODULE_2__.renderViewField)(field, field.value, context.hostPort, {
7650
+ }) : (0,_field_renderers_index_js__WEBPACK_IMPORTED_MODULE_1__.renderViewField)(field, field.value, context.viewHost, {
7575
7651
  size: context.size
7576
7652
  });
7577
7653
  const reference = ['record', 'relation', 'user'].includes(field.propertyType || field.type) && field.value && typeof field.value === 'object';
@@ -7598,7 +7674,7 @@ function renderFieldValue(context, field, editing, {
7598
7674
 
7599
7675
 
7600
7676
  if (editing && (content === null || typeof content === 'undefined' || content === lit__WEBPACK_IMPORTED_MODULE_0__.nothing)) {
7601
- const shown = (0,_field_renderers_index_js__WEBPACK_IMPORTED_MODULE_2__.renderViewField)(field, field.value, context.hostPort, {
7677
+ const shown = (0,_field_renderers_index_js__WEBPACK_IMPORTED_MODULE_1__.renderViewField)(field, field.value, context.viewHost, {
7602
7678
  size: context.size
7603
7679
  });
7604
7680
 
@@ -7612,12 +7688,41 @@ function renderFieldValue(context, field, editing, {
7612
7688
  }
7613
7689
 
7614
7690
  return content;
7615
- } // While the view is being configured every entry is listed, hidden and rare ones
7691
+ }
7692
+ __webpack_async_result__();
7693
+ } catch(e) { __webpack_async_result__(e); } });
7694
+
7695
+ /***/ },
7696
+
7697
+ /***/ "40b137e60526"
7698
+ (module, __webpack_exports__, __webpack_require__) {
7699
+
7700
+ __webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try {
7701
+ __webpack_require__.r(__webpack_exports__);
7702
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
7703
+ /* harmony export */ renderPropertyViewTemplate: () => (/* binding */ renderPropertyViewTemplate)
7704
+ /* harmony export */ });
7705
+ /* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("2a080a730149");
7706
+ /* harmony import */ var _default_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("9e9dad7bcc09");
7707
+ /* harmony import */ var _field_renderers_index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__("e5483002f3ea");
7708
+ /* harmony import */ var _field_value_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__("62c5c417c97d");
7709
+ var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([lit__WEBPACK_IMPORTED_MODULE_0__, _field_renderers_index_js__WEBPACK_IMPORTED_MODULE_2__, _field_value_js__WEBPACK_IMPORTED_MODULE_3__]);
7710
+ ([lit__WEBPACK_IMPORTED_MODULE_0__, _field_renderers_index_js__WEBPACK_IMPORTED_MODULE_2__, _field_value_js__WEBPACK_IMPORTED_MODULE_3__] = __webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__);
7711
+ /* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lit__WEBPACK_IMPORTED_MODULE_0__);
7712
+
7713
+
7714
+
7715
+ // The arrangement, drawn in the component's own light DOM. Not in a shadow root:
7716
+ // the field controls are Smart elements whose stylesheets are document-level, and
7717
+ // a document stylesheet does not cross a shadow boundary. sf-view slots its
7718
+ // children for exactly this reason and says so beside the slot; the first version
7719
+ // of this composite built them inside a shadow root and every control came out
7720
+ // with its markup and none of its CSS.
7721
+ // While the view is being configured every entry is listed, hidden and rare ones
7616
7722
  // included: a hidden field a person cannot see is a field they cannot show again,
7617
7723
  // and «показать редкие поля» is a reading choice rather than part of the
7618
7724
  // arrangement being edited.
7619
7725
 
7620
-
7621
7726
  function listed(context, entries) {
7622
7727
  return context.configuring ? entries ?? [] : context.visible(entries);
7623
7728
  } // The chooser names the layers this person may write and nothing else. A layer
@@ -7971,7 +8076,7 @@ function renderField(context, field, editing, sectionKey = '', groupKey = '') {
7971
8076
  ${field.rare ? (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)`<span class="sf-property-view-rare color-on-surface-variant">${context.rareText}</span>` : lit__WEBPACK_IMPORTED_MODULE_0__.nothing}
7972
8077
  ${field.inherited && !editing ? (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)`<span class="sf-property-view-inherited color-on-surface-variant">${context.inheritedText}</span>` : lit__WEBPACK_IMPORTED_MODULE_0__.nothing}
7973
8078
  </div>
7974
- ${editing || context.configuring || field.readonly === true || !context.mayEdit || context.openAll ? (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)`<div class="sf-property-view-field-value min-w-0 flex items-cross-center gap-2 flex-wrap">${renderFieldValue(context, field, editing, {
8079
+ ${editing || context.configuring || field.readonly === true || !context.mayEdit || context.openAll ? (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)`<div class="sf-property-view-field-value min-w-0 flex items-cross-center gap-2 flex-wrap">${(0,_field_value_js__WEBPACK_IMPORTED_MODULE_3__.renderFieldValue)(context, field, editing, {
7975
8080
  disabled
7976
8081
  })}</div>` : (0,lit__WEBPACK_IMPORTED_MODULE_0__.html)`
7977
8082
  <button
@@ -7993,7 +8098,7 @@ function renderField(context, field, editing, sectionKey = '', groupKey = '') {
7993
8098
  context.component.editGroup(sectionKey, groupKey);
7994
8099
  }}
7995
8100
  >
7996
- ${renderFieldValue(context, field, editing)}
8101
+ ${(0,_field_value_js__WEBPACK_IMPORTED_MODULE_3__.renderFieldValue)(context, field, editing)}
7997
8102
  <i class="sf-icon sf-icon--size-1/2 sf-property-view-pen" aria-hidden="true">edit</i>
7998
8103
  </button>`}
7999
8104
  ${context.configuring ? renderFieldActions(context, field, key) : lit__WEBPACK_IMPORTED_MODULE_0__.nothing}
@@ -9111,6 +9216,74 @@ __webpack_async_result__();
9111
9216
 
9112
9217
  /***/ },
9113
9218
 
9219
+ /***/ "2f31b00ad99a"
9220
+ (module, __webpack_exports__, __webpack_require__) {
9221
+
9222
+ __webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try {
9223
+ __webpack_require__.r(__webpack_exports__);
9224
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
9225
+ /* harmony export */ DATE_TYPES: () => (/* binding */ DATE_TYPES),
9226
+ /* harmony export */ formatDateValue: () => (/* binding */ formatDateValue)
9227
+ /* harmony export */ });
9228
+ /* harmony import */ var _core_js_format_date_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("e577837dd70a");
9229
+ var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_core_js_format_date_js__WEBPACK_IMPORTED_MODULE_0__]);
9230
+ var __webpack_async_dependencies_result__ = (__webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__);
9231
+ _core_js_format_date_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_async_dependencies_result__[0];
9232
+ // A date, a date and time or a time of day in the page's language, through
9233
+ // the SIMAI Framework's format-date module, for a value the host did not
9234
+ // format (formatFieldValue). The host's own text still wins; without one, a
9235
+ // date read «2026-11-02» where a person expects «2 нояб. 2026 г.».
9236
+ //
9237
+ // The forms are read as a host stores them: a day «YYYY-MM-DD» is that day on
9238
+ // the reader's calendar (not UTC midnight, which is the day before west of
9239
+ // Greenwich); a date and time with a zone is that moment in the reader's zone
9240
+ // and one without a zone is the wall clock as written; a time «hh:mm[:ss]» is
9241
+ // a time of day. Anything else is left for the caller to print as it came.
9242
+
9243
+ const DAY = /^(\d{4})-(\d{2})-(\d{2})$/u;
9244
+ const TIME = /^(\d{2}):(\d{2})(?::(\d{2})(?:\.\d+)?)?$/u;
9245
+ const DATE_TIME = /^(\d{4})-(\d{2})-(\d{2})[T ](\d{2}):(\d{2})(?::(\d{2})(?:\.\d+)?)?(Z|[+-]\d{2}:?\d{2})?$/u;
9246
+ const DATE_TYPES = new Set(['date', 'datetime', 'time']);
9247
+
9248
+ function readMoment(type, text) {
9249
+ const day = DAY.exec(text);
9250
+ if (day) return new Date(Number(day[1]), Number(day[2]) - 1, Number(day[3]));
9251
+ const time = TIME.exec(text);
9252
+ if (time) return type === 'time' ? new Date(2000, 0, 1, Number(time[1]), Number(time[2]), Number(time[3] ?? 0)) : null;
9253
+ const stamp = DATE_TIME.exec(text);
9254
+ if (!stamp) return null;
9255
+
9256
+ if (stamp[7]) {
9257
+ const moment = new Date(text.replace(' ', 'T'));
9258
+ return Number.isNaN(moment.getTime()) ? null : moment;
9259
+ }
9260
+
9261
+ return new Date(Number(stamp[1]), Number(stamp[2]) - 1, Number(stamp[3]), Number(stamp[4]), Number(stamp[5]), Number(stamp[6] ?? 0));
9262
+ } // The text for a value of a date type, or '' when it is not one this reads.
9263
+
9264
+
9265
+ function formatDateValue(type, value, node) {
9266
+ if (!DATE_TYPES.has(type) || typeof value !== 'string' || !value.trim()) return '';
9267
+ const text = value.trim();
9268
+ const moment = readMoment(type, text);
9269
+ if (!moment) return '';
9270
+ const hasTime = type !== 'date' && !DAY.test(text);
9271
+ if (type === 'time') return (0,_core_js_format_date_js__WEBPACK_IMPORTED_MODULE_0__.formatDate)(moment, {
9272
+ date: null,
9273
+ time: 'short',
9274
+ node
9275
+ });
9276
+ return (0,_core_js_format_date_js__WEBPACK_IMPORTED_MODULE_0__.formatDate)(moment, {
9277
+ date: 'medium',
9278
+ time: hasTime ? 'short' : null,
9279
+ node
9280
+ });
9281
+ }
9282
+ __webpack_async_result__();
9283
+ } catch(e) { __webpack_async_result__(e); } });
9284
+
9285
+ /***/ },
9286
+
9114
9287
  /***/ "17828be41e75"
9115
9288
  (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
9116
9289
 
@@ -10223,21 +10396,21 @@ module.exports = /*#__PURE__*/JSON.parse('{"$comment":"Dated aliases of sf-view-
10223
10396
  /***/ "3ea81f4c3c20"
10224
10397
  (module) {
10225
10398
 
10226
- module.exports = /*#__PURE__*/JSON.parse('{"id":"smart.view-properties","tag":"sf-view-properties","version":"1.9.1","kind":"leaf","implements":["record-view@1"],"settings":{"add-field-text":{"type":"string","default-from":"runtime.add-field-text"},"add-group-text":{"type":"string","default-from":"runtime.add-group-text"},"add-section-text":{"type":"string","default-from":"runtime.add-section-text"},"back-label":{"type":"string","default-from":"runtime.back-label"},"cancel-configuring-text":{"type":"string","default-from":"runtime.cancel-configuring-text"},"cancel-name-text":{"type":"string","default-from":"runtime.cancel-name-text"},"cancel-text":{"type":"string","default-from":"runtime.cancel-text"},"changed-text":{"type":"string","default-from":"runtime.changed-text"},"close-label":{"type":"string","default-from":"runtime.close-label"},"collection":{"type":"string","default":""},"collection-icon":{"type":"icon","default":""},"collection-label":{"type":"string","default":""},"configure-hint-narrow-text":{"type":"string","default-from":"runtime.configure-hint-narrow-text"},"configure-hint-text":{"type":"string","default-from":"runtime.configure-hint-text"},"configure-text":{"type":"string","default-from":"runtime.configure-text"},"conflict-text":{"type":"string","default-from":"runtime.conflict-text"},"copy-link-label":{"type":"string","default-from":"runtime.copy-link-label"},"delete-text":{"type":"string","default-from":"runtime.delete-text"},"done-configuring-text":{"type":"string","default-from":"runtime.done-configuring-text"},"edit-text":{"type":"string","default-from":"runtime.edit-text"},"empty-record-text":{"type":"string","default-from":"runtime.empty-record-text"},"empty-text":{"type":"string","default-from":"runtime.empty-text"},"errors-text":{"type":"string","default-from":"runtime.errors-text"},"favourite":{"type":"boolean","default":false},"favourite-label":{"type":"string","default-from":"runtime.favourite-label"},"field-label-text":{"type":"string","default-from":"runtime.field-label-text"},"field-settings-text":{"type":"string","default-from":"runtime.field-settings-text"},"hidden-text":{"type":"string","default-from":"runtime.hidden-text"},"hide-rare-text":{"type":"string","default-from":"runtime.hide-rare-text"},"hint-text":{"type":"string","default-from":"runtime.hint-text"},"in-this-group-text":{"type":"string","default-from":"runtime.in-this-group-text"},"inherited-text":{"type":"string","default-from":"runtime.inherited-text"},"link-copied-label":{"type":"string","default-from":"runtime.link-copied-label"},"menu-label":{"type":"string","default-from":"runtime.menu-label"},"move-down-text":{"type":"string","default-from":"runtime.move-down-text"},"move-up-text":{"type":"string","default-from":"runtime.move-up-text"},"new-group-title":{"type":"string","default-from":"runtime.new-group-title"},"new-section-title":{"type":"string","default-from":"runtime.new-section-title"},"no-match-text":{"type":"string","default-from":"runtime.no-match-text"},"open-full-label":{"type":"string","default-from":"runtime.open-full-label"},"panel":{"type":"boolean","default":false},"panel-label":{"type":"string","default":""},"panel-size":{"type":"enum","values":["1/2","1","2","full"],"default":"1"},"size":{"type":"enum","values":["1","1/2"],"default":"1"},"mode":{"type":"enum","values":["view","auto","edit","create"],"default":"auto"},"panel-width":{"type":"string","default":""},"personal-layer-text":{"type":"string","default-from":"runtime.personal-layer-text"},"rare-text":{"type":"string","default-from":"runtime.rare-text"},"record-id":{"type":"id","default":""},"remove-field-text":{"type":"string","default-from":"runtime.remove-field-text"},"remove-group-text":{"type":"string","default-from":"runtime.remove-group-text"},"remove-section-text":{"type":"string","default-from":"runtime.remove-section-text"},"rename-text":{"type":"string","default-from":"runtime.rename-text"},"reset-view-ask-text":{"type":"string","default-from":"runtime.reset-view-ask-text"},"reset-view-text":{"type":"string","default-from":"runtime.reset-view-text"},"save-name-text":{"type":"string","default-from":"runtime.save-name-text"},"save-text":{"type":"string","default-from":"runtime.save-text"},"section-icon-text":{"type":"string","default-from":"runtime.section-icon-text"},"section-icons":{"type":"string","default":""},"sections-as":{"type":"enum","values":["list","tabs"],"default":"list"},"sections-label":{"type":"string","default-from":"runtime.sections-label"},"shared-layer-text":{"type":"string","default-from":"runtime.shared-layer-text"},"show-rare":{"type":"boolean","default":false},"show-rare-text":{"type":"string","default-from":"runtime.show-rare-text"},"shown-text":{"type":"string","default-from":"runtime.shown-text"},"unplaced-hint-text":{"type":"string","default-from":"runtime.unplaced-hint-text"},"unplaced-title":{"type":"string","default-from":"runtime.unplaced-title"},"variant-text":{"type":"string","default-from":"runtime.variant-text"},"view-conflict-text":{"type":"string","default-from":"runtime.view-conflict-text"},"view-denied-text":{"type":"string","default-from":"runtime.view-denied-text"},"width-text":{"type":"string","default-from":"runtime.width-text"},"view-profile-label":{"type":"string","default-from":"runtime.view-profile-label"},"add-view-text":{"type":"string","default-from":"runtime.add-view-text"},"new-view-text":{"type":"string","default-from":"runtime.new-view-text"},"delete-view-text":{"type":"string","default-from":"runtime.delete-view-text"},"last-shared-view-text":{"type":"string","default-from":"runtime.last-shared-view-text"},"full":{"type":"boolean","default":false},"open":{"type":"boolean","default":true}},"values":{"revision":{"type":"string"},"section":{"type":"string"}},"events":{"close":{"carries":{"reason":{"type":"enum","values":["close","escape","cancelled","deleted","api"]},"record_id":{"type":"id","nullable":true},"unsaved_fields":{"type":"list"}},"cancelable":true},"open-full":{"carries":{"id":"id","address":"string","record_id":{"type":"id","nullable":true}}},"saved":{"carries":{"id":"id","revision":{"type":"string","optional":true}}},"failed":{"carries":{"reason":"string","message":{"type":"string","optional":true}}},"open":{"carries":{"field":"string","value":"object","answer":"string"}},"delete":{"carries":{"collection":"string","revision":"string","answer":"string","record_id":{"type":"id","nullable":true}}},"created":{"carries":{"collection":{"type":"string","nullable":true},"record_id":{"type":"id","nullable":true}}},"cancel":{"carries":{"mode":{"type":"enum","values":["auto","edit","create"]},"scope":{"type":"enum","values":["group"],"optional":true},"section":{"type":"string","optional":true},"group":{"type":"string","optional":true}}},"state":{"carries":{"state":"string","message":"string"},"own-verb":true},"address-copy":{"carries":{},"own-verb":true},"favourite":{"carries":{"collection":{"type":"string","nullable":true},"favourite":"boolean","record_id":{"type":"id","nullable":true}},"own-verb":true}},"actions":{"refresh":{},"load":{"with":{"reason":{"type":"string","optional":true}}},"edit-group":{"with":{"section":"string","group":"string"}},"cancel-edit":{},"save-group":{"with":{"options":{"type":"object","optional":true}},"concurrency":"drop"},"select-section":{"with":{"key":"string"}},"close-panel":{"with":{"reason":{"type":"string","optional":true}}},"copy-address":{},"open-full-page":{},"confirm-save":{},"cancel-confirmation":{}},"port":{"id":"simai.property-view-port","version":"1.17.0","contract":"src/core/contracts/ports/simai.property-view-port/1.17.0/port.json"},"presentation":{"skeleton":{"file":"skeleton.html","late":[]}},"css-variables":{"--sf-property-view--sections-width":{"type":"length","state":"default"},"--sf-property-view--title-size":{"type":"length","state":"default"},"--sf-property-view--label-size":{"type":"length","state":"default"},"--sf-property-view--value-size":{"type":"length","state":"default"},"--sf-property-view--group-size":{"type":"length","state":"default"},"--sf-property-view--edge-room":{"type":"length","state":"open"}},"host-states":{"data-state":"string","aria-busy":"string"}}');
10399
+ module.exports = /*#__PURE__*/JSON.parse('{"id":"smart.view-properties","tag":"sf-view-properties","version":"1.10.1","kind":"leaf","implements":["record-view@1"],"settings":{"add-field-text":{"type":"string","default-from":"runtime.add-field-text"},"add-group-text":{"type":"string","default-from":"runtime.add-group-text"},"add-section-text":{"type":"string","default-from":"runtime.add-section-text"},"back-label":{"type":"string","default-from":"runtime.back-label"},"cancel-configuring-text":{"type":"string","default-from":"runtime.cancel-configuring-text"},"cancel-name-text":{"type":"string","default-from":"runtime.cancel-name-text"},"cancel-text":{"type":"string","default-from":"runtime.cancel-text"},"changed-text":{"type":"string","default-from":"runtime.changed-text"},"close-label":{"type":"string","default-from":"runtime.close-label"},"collection":{"type":"string","default":""},"collection-icon":{"type":"icon","default":""},"collection-label":{"type":"string","default":""},"configure-hint-narrow-text":{"type":"string","default-from":"runtime.configure-hint-narrow-text"},"configure-hint-text":{"type":"string","default-from":"runtime.configure-hint-text"},"configure-text":{"type":"string","default-from":"runtime.configure-text"},"conflict-text":{"type":"string","default-from":"runtime.conflict-text"},"copy-link-label":{"type":"string","default-from":"runtime.copy-link-label"},"delete-text":{"type":"string","default-from":"runtime.delete-text"},"done-configuring-text":{"type":"string","default-from":"runtime.done-configuring-text"},"edit-text":{"type":"string","default-from":"runtime.edit-text"},"empty-record-text":{"type":"string","default-from":"runtime.empty-record-text"},"empty-text":{"type":"string","default-from":"runtime.empty-text"},"errors-text":{"type":"string","default-from":"runtime.errors-text"},"favourite":{"type":"boolean","default":false},"favourite-label":{"type":"string","default-from":"runtime.favourite-label"},"field-label-text":{"type":"string","default-from":"runtime.field-label-text"},"field-settings-text":{"type":"string","default-from":"runtime.field-settings-text"},"hidden-text":{"type":"string","default-from":"runtime.hidden-text"},"hide-rare-text":{"type":"string","default-from":"runtime.hide-rare-text"},"hint-text":{"type":"string","default-from":"runtime.hint-text"},"in-this-group-text":{"type":"string","default-from":"runtime.in-this-group-text"},"inherited-text":{"type":"string","default-from":"runtime.inherited-text"},"link-copied-label":{"type":"string","default-from":"runtime.link-copied-label"},"menu-label":{"type":"string","default-from":"runtime.menu-label"},"move-down-text":{"type":"string","default-from":"runtime.move-down-text"},"move-up-text":{"type":"string","default-from":"runtime.move-up-text"},"new-group-title":{"type":"string","default-from":"runtime.new-group-title"},"new-section-title":{"type":"string","default-from":"runtime.new-section-title"},"no-match-text":{"type":"string","default-from":"runtime.no-match-text"},"open-full-label":{"type":"string","default-from":"runtime.open-full-label"},"panel":{"type":"boolean","default":false},"panel-label":{"type":"string","default":""},"panel-size":{"type":"enum","values":["1/2","1","2","full"],"default":"1"},"size":{"type":"enum","values":["1","1/2"],"default":"1"},"mode":{"type":"enum","values":["view","auto","edit","create"],"default":"auto"},"panel-width":{"type":"string","default":""},"personal-layer-text":{"type":"string","default-from":"runtime.personal-layer-text"},"rare-text":{"type":"string","default-from":"runtime.rare-text"},"record-id":{"type":"id","default":""},"remove-field-text":{"type":"string","default-from":"runtime.remove-field-text"},"remove-group-text":{"type":"string","default-from":"runtime.remove-group-text"},"remove-section-text":{"type":"string","default-from":"runtime.remove-section-text"},"rename-text":{"type":"string","default-from":"runtime.rename-text"},"reset-view-ask-text":{"type":"string","default-from":"runtime.reset-view-ask-text"},"reset-view-text":{"type":"string","default-from":"runtime.reset-view-text"},"save-name-text":{"type":"string","default-from":"runtime.save-name-text"},"save-text":{"type":"string","default-from":"runtime.save-text"},"section-icon-text":{"type":"string","default-from":"runtime.section-icon-text"},"section-icons":{"type":"string","default":""},"sections-as":{"type":"enum","values":["list","tabs"],"default":"list"},"sections-label":{"type":"string","default-from":"runtime.sections-label"},"shared-layer-text":{"type":"string","default-from":"runtime.shared-layer-text"},"show-rare":{"type":"boolean","default":false},"show-rare-text":{"type":"string","default-from":"runtime.show-rare-text"},"shown-text":{"type":"string","default-from":"runtime.shown-text"},"unplaced-hint-text":{"type":"string","default-from":"runtime.unplaced-hint-text"},"unplaced-title":{"type":"string","default-from":"runtime.unplaced-title"},"variant-text":{"type":"string","default-from":"runtime.variant-text"},"view-conflict-text":{"type":"string","default-from":"runtime.view-conflict-text"},"view-denied-text":{"type":"string","default-from":"runtime.view-denied-text"},"width-text":{"type":"string","default-from":"runtime.width-text"},"view-profile-label":{"type":"string","default-from":"runtime.view-profile-label"},"add-view-text":{"type":"string","default-from":"runtime.add-view-text"},"new-view-text":{"type":"string","default-from":"runtime.new-view-text"},"delete-view-text":{"type":"string","default-from":"runtime.delete-view-text"},"last-shared-view-text":{"type":"string","default-from":"runtime.last-shared-view-text"},"full":{"type":"boolean","default":false},"open":{"type":"boolean","default":true}},"values":{"revision":{"type":"string"},"section":{"type":"string"}},"events":{"close":{"carries":{"reason":{"type":"enum","values":["close","escape","cancelled","deleted","api"]},"record_id":{"type":"id","nullable":true},"unsaved_fields":{"type":"list"}},"cancelable":true},"open-full":{"carries":{"id":"id","address":"string","record_id":{"type":"id","nullable":true}}},"saved":{"carries":{"id":"id","revision":{"type":"string","optional":true}}},"failed":{"carries":{"reason":"string","message":{"type":"string","optional":true}}},"open":{"carries":{"field":"string","value":"object","answer":"string"}},"delete":{"carries":{"collection":"string","revision":"string","answer":"string","record_id":{"type":"id","nullable":true}}},"created":{"carries":{"collection":{"type":"string","nullable":true},"record_id":{"type":"id","nullable":true}}},"cancel":{"carries":{"mode":{"type":"enum","values":["auto","edit","create"]},"scope":{"type":"enum","values":["group"],"optional":true},"section":{"type":"string","optional":true},"group":{"type":"string","optional":true}}},"state":{"carries":{"state":"string","message":"string"},"own-verb":true},"address-copy":{"carries":{},"own-verb":true},"favourite":{"carries":{"collection":{"type":"string","nullable":true},"favourite":"boolean","record_id":{"type":"id","nullable":true}},"own-verb":true}},"actions":{"refresh":{},"load":{"with":{"reason":{"type":"string","optional":true}}},"edit-group":{"with":{"section":"string","group":"string"}},"cancel-edit":{},"save-group":{"with":{"options":{"type":"object","optional":true}},"concurrency":"drop"},"select-section":{"with":{"key":"string"}},"close-panel":{"with":{"reason":{"type":"string","optional":true}}},"copy-address":{},"open-full-page":{},"confirm-save":{},"cancel-confirmation":{}},"port":{"id":"simai.property-view-port","version":"1.17.0","contract":"src/core/contracts/ports/simai.property-view-port/1.17.0/port.json"},"presentation":{"skeleton":{"file":"skeleton.html","late":[]}},"css-variables":{"--sf-property-view--sections-width":{"type":"length","state":"default"},"--sf-property-view--title-size":{"type":"length","state":"default"},"--sf-property-view--label-size":{"type":"length","state":"default"},"--sf-property-view--value-size":{"type":"length","state":"default"},"--sf-property-view--group-size":{"type":"length","state":"default"},"--sf-property-view--edge-room":{"type":"length","state":"open"}},"host-states":{"data-state":"string","aria-busy":"string"}}');
10227
10400
 
10228
10401
  /***/ },
10229
10402
 
10230
10403
  /***/ "99fb492b7fba"
10231
10404
  (module) {
10232
10405
 
10233
- module.exports = /*#__PURE__*/JSON.parse('{"title":"Property view","events":{"state":{"label":"Record state"},"address-copy":{"label":"Address copied"},"favourite":{"label":"Favourite"}},"runtime":{"add-field-text":"Add a field","add-group-text":"Add an area","add-section-text":"Add a section","add-view-text":"Add a view","back-label":"Back","cancel-configuring-text":"Cancel","cancel-name-text":"Leave the name","cancel-text":"Cancel","changed-text":"Fields changed","close-label":"Close","configure-hint-narrow-text":"Drag fields between groups. Applied at once.","configure-hint-text":"Drag fields between groups and onto a section on the left. Applied at once.","configure-text":"Arrange the view","confirm-save-text":"Confirm and save","conflict-text":"The record changed; read it again","copy-link-label":"Copy link","create-text":"Create","date-invalid-text":"The date is not a calendar date","date-missing-text":"Enter the date","date-time-date-label":"{label}: date","date-time-time-label":"{label}: time","delete-text":"Delete","delete-view-text":"Remove the view","done-configuring-text":"Done","edit-text":"edit","empty-record-text":"This record has nothing to show","empty-text":"not filled in","errors-text":"Errors","favourite-label":"Favourite","field-label-text":"Name","field-settings-text":"Field settings","hidden-text":"Hide","hide-rare-text":"Hide rare fields","hint-text":"Hint","in-this-group-text":"In this area","inherited-text":"by default","keep-editing-text":"Keep editing","last-shared-view-text":"The only view everyone has","link-copied-label":"Link copied","menu-label":"More","move-down-text":"Move down","move-up-text":"Move up","new-group-title":"New area","new-section-title":"New section","new-view-text":"New view","no-match-text":"Nothing matches","open-full-label":"Open as a page","personal-layer-text":"Personal","rare-text":"rare","read-only-text":"You can only view this record","remove-field-text":"Remove from this area","remove-group-text":"Remove this area","remove-section-text":"Remove this section","rename-text":"Rename","reset-view-ask-text":"Reset the whole view?","reset-view-text":"Reset","save-failed-text":"The save failed","save-name-text":"Save the name","save-text":"Save","section-icon-text":"Section glyph","sections-label":"Sections","shared-layer-text":"Everyone\'s","show-rare-text":"Show rare fields","shown-text":"Shown","state-load-failed":"The record could not be read","state-loading":"Reading the record","state-port-not-connected":"The record port is not connected","state-unavailable":"The record is unavailable","time-invalid-text":"Enter the time as hh:mm, from 00:00 to 23:59","time-missing-text":"Enter the time","time-placeholder-text":"hh:mm","unplaced-hint-text":"Fields this view does not show. Drag one into a group to place it, or drag a field here to take it out.","unplaced-title":"Not placed","variant-text":"Template","view-conflict-text":"The view changed and was read again","view-denied-text":"You may not change this layer","view-profile-label":"View","view-reset-failed-text":"The view could not be reset","view-save-failed-text":"The view could not be saved","width-text":"Full width"}}');
10406
+ module.exports = /*#__PURE__*/JSON.parse('{"title":"Property view","events":{"state":{"label":"Record state"},"address-copy":{"label":"Address copied"},"favourite":{"label":"Favourite"}},"runtime":{"add-field-text":"Add a field","add-group-text":"Add an area","add-section-text":"Add a section","add-view-text":"Add a view","back-label":"Back","cancel-configuring-text":"Cancel","cancel-name-text":"Leave the name","cancel-text":"Cancel","changed-text":"Fields changed","close-label":"Close","configure-hint-narrow-text":"Drag fields between groups. Applied at once.","configure-hint-text":"Drag fields between groups and onto a section on the left. Applied at once.","configure-text":"Arrange the view","confirm-save-text":"Confirm and save","conflict-text":"The record changed; read it again","copy-link-label":"Copy link","create-text":"Create","delete-text":"Delete","delete-view-text":"Remove the view","done-configuring-text":"Done","edit-text":"edit","empty-record-text":"This record has nothing to show","empty-text":"not filled in","errors-text":"Errors","favourite-label":"Favourite","field-label-text":"Name","field-settings-text":"Field settings","hidden-text":"Hide","hide-rare-text":"Hide rare fields","hint-text":"Hint","in-this-group-text":"In this area","inherited-text":"by default","keep-editing-text":"Keep editing","last-shared-view-text":"The only view everyone has","link-copied-label":"Link copied","menu-label":"More","move-down-text":"Move down","move-up-text":"Move up","new-group-title":"New area","new-section-title":"New section","new-view-text":"New view","no-match-text":"Nothing matches","open-full-label":"Open as a page","personal-layer-text":"Personal","rare-text":"rare","read-only-text":"You can only view this record","remove-field-text":"Remove from this area","remove-group-text":"Remove this area","remove-section-text":"Remove this section","rename-text":"Rename","reset-view-ask-text":"Reset the whole view?","reset-view-text":"Reset","save-failed-text":"The save failed","save-name-text":"Save the name","save-text":"Save","section-icon-text":"Section glyph","sections-label":"Sections","shared-layer-text":"Everyone\'s","show-rare-text":"Show rare fields","shown-text":"Shown","state-load-failed":"The record could not be read","state-loading":"Reading the record","state-port-not-connected":"The record port is not connected","state-unavailable":"The record is unavailable","unplaced-hint-text":"Fields this view does not show. Drag one into a group to place it, or drag a field here to take it out.","unplaced-title":"Not placed","variant-text":"Template","view-conflict-text":"The view changed and was read again","view-denied-text":"You may not change this layer","view-profile-label":"View","view-reset-failed-text":"The view could not be reset","view-save-failed-text":"The view could not be saved","width-text":"Full width"}}');
10234
10407
 
10235
10408
  /***/ },
10236
10409
 
10237
10410
  /***/ "d614908e644f"
10238
10411
  (module) {
10239
10412
 
10240
- module.exports = /*#__PURE__*/JSON.parse('{"title":"Запись","events":{"state":{"label":"Состояние записи"},"address-copy":{"label":"Адрес скопирован"},"favourite":{"label":"Избранное"}},"runtime":{"add-field-text":"Добавить поле","add-group-text":"Добавить область","add-section-text":"Добавить раздел","add-view-text":"Добавить вид","back-label":"Назад","cancel-configuring-text":"Отменить","cancel-name-text":"Оставить название","cancel-text":"Отменить","changed-text":"Изменено полей","close-label":"Закрыть","configure-hint-narrow-text":"Перетаскивайте поля между группами. Применяется сразу.","configure-hint-text":"Перетаскивайте поля между группами и на разделы слева. Применяется сразу.","configure-text":"Настроить вид","confirm-save-text":"Подтвердить и сохранить","conflict-text":"Запись изменилась, обновите её","copy-link-label":"Копировать ссылку","create-text":"Создать","date-invalid-text":"Дата указана неверно","date-missing-text":"Укажите дату","date-time-date-label":"{label}: дата","date-time-time-label":"{label}: время","delete-text":"Удалить","delete-view-text":"Удалить вид","done-configuring-text":"Готово","edit-text":"изменить","empty-record-text":"В этой записи нечего показать","empty-text":"не заполнено","errors-text":"Ошибок","favourite-label":"В избранное","field-label-text":"Название","field-settings-text":"Настройки поля","hidden-text":"Скрыть","hide-rare-text":"Скрыть редкие поля","hint-text":"Подсказка","in-this-group-text":"В этой области","inherited-text":"по умолчанию","keep-editing-text":"Вернуться к правке","last-shared-view-text":"Единственный общий вид","link-copied-label":"Ссылка скопирована","menu-label":"Ещё","move-down-text":"Ниже","move-up-text":"Выше","new-group-title":"Новая область","new-section-title":"Новый раздел","new-view-text":"Новый вид","no-match-text":"Ничего не найдено","open-full-label":"Открыть на всю страницу","personal-layer-text":"Персональный","rare-text":"редкое","read-only-text":"Эту запись можно только смотреть","remove-field-text":"Убрать из области","remove-group-text":"Удалить область","remove-section-text":"Удалить раздел","rename-text":"Переименовать","reset-view-ask-text":"Сбросить весь вид?","reset-view-text":"Сбросить","save-failed-text":"Не удалось сохранить","save-name-text":"Сохранить название","save-text":"Сохранить","section-icon-text":"Значок раздела","sections-label":"Разделы","shared-layer-text":"Для всех","show-rare-text":"Показать редкие поля","shown-text":"Показывать","state-load-failed":"Не удалось загрузить запись","state-loading":"Загрузка записи","state-port-not-connected":"Порт записи не подключён","state-unavailable":"Запись недоступна","time-invalid-text":"Укажите время в виде чч:мм, от 00:00 до 23:59","time-missing-text":"Укажите время","time-placeholder-text":"чч:мм","unplaced-hint-text":"Поля, которых нет в этом виде. Перетащите поле в группу, чтобы разместить, или сюда, чтобы убрать.","unplaced-title":"Не размещённые","variant-text":"Вид","view-conflict-text":"Вид изменился, он перезагружен","view-denied-text":"Нет права менять этот слой","view-profile-label":"Вид","view-reset-failed-text":"Не удалось сбросить вид","view-save-failed-text":"Не удалось сохранить вид","width-text":"На всю ширину"}}');
10413
+ module.exports = /*#__PURE__*/JSON.parse('{"title":"Запись","events":{"state":{"label":"Состояние записи"},"address-copy":{"label":"Адрес скопирован"},"favourite":{"label":"Избранное"}},"runtime":{"add-field-text":"Добавить поле","add-group-text":"Добавить область","add-section-text":"Добавить раздел","add-view-text":"Добавить вид","back-label":"Назад","cancel-configuring-text":"Отменить","cancel-name-text":"Оставить название","cancel-text":"Отменить","changed-text":"Изменено полей","close-label":"Закрыть","configure-hint-narrow-text":"Перетаскивайте поля между группами. Применяется сразу.","configure-hint-text":"Перетаскивайте поля между группами и на разделы слева. Применяется сразу.","configure-text":"Настроить вид","confirm-save-text":"Подтвердить и сохранить","conflict-text":"Запись изменилась, обновите её","copy-link-label":"Копировать ссылку","create-text":"Создать","delete-text":"Удалить","delete-view-text":"Удалить вид","done-configuring-text":"Готово","edit-text":"изменить","empty-record-text":"В этой записи нечего показать","empty-text":"не заполнено","errors-text":"Ошибок","favourite-label":"В избранное","field-label-text":"Название","field-settings-text":"Настройки поля","hidden-text":"Скрыть","hide-rare-text":"Скрыть редкие поля","hint-text":"Подсказка","in-this-group-text":"В этой области","inherited-text":"по умолчанию","keep-editing-text":"Вернуться к правке","last-shared-view-text":"Единственный общий вид","link-copied-label":"Ссылка скопирована","menu-label":"Ещё","move-down-text":"Ниже","move-up-text":"Выше","new-group-title":"Новая область","new-section-title":"Новый раздел","new-view-text":"Новый вид","no-match-text":"Ничего не найдено","open-full-label":"Открыть на всю страницу","personal-layer-text":"Персональный","rare-text":"редкое","read-only-text":"Эту запись можно только смотреть","remove-field-text":"Убрать из области","remove-group-text":"Удалить область","remove-section-text":"Удалить раздел","rename-text":"Переименовать","reset-view-ask-text":"Сбросить весь вид?","reset-view-text":"Сбросить","save-failed-text":"Не удалось сохранить","save-name-text":"Сохранить название","save-text":"Сохранить","section-icon-text":"Значок раздела","sections-label":"Разделы","shared-layer-text":"Для всех","show-rare-text":"Показать редкие поля","shown-text":"Показывать","state-load-failed":"Не удалось загрузить запись","state-loading":"Загрузка записи","state-port-not-connected":"Порт записи не подключён","state-unavailable":"Запись недоступна","unplaced-hint-text":"Поля, которых нет в этом виде. Перетащите поле в группу, чтобы разместить, или сюда, чтобы убрать.","unplaced-title":"Не размещённые","variant-text":"Вид","view-conflict-text":"Вид изменился, он перезагружен","view-denied-text":"Нет права менять этот слой","view-profile-label":"Вид","view-reset-failed-text":"Не удалось сбросить вид","view-save-failed-text":"Не удалось сохранить вид","width-text":"На всю ширину"}}');
10241
10414
 
10242
10415
  /***/ }
10243
10416