@fieldia/widgets 0.3.0 → 0.5.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 (83) hide show
  1. package/package.json +2 -2
  2. package/src/index.d.mts +6 -0
  3. package/src/index.d.ts +6 -0
  4. package/src/index.js +6 -0
  5. package/src/index.js.map +1 -1
  6. package/src/index.mjs +6 -0
  7. package/src/index.mjs.map +1 -1
  8. package/src/lib/calendar.d.mts +11 -0
  9. package/src/lib/calendar.d.ts +11 -0
  10. package/src/lib/calendar.js +242 -0
  11. package/src/lib/calendar.js.map +1 -0
  12. package/src/lib/calendar.mjs +238 -0
  13. package/src/lib/calendar.mjs.map +1 -0
  14. package/src/lib/display.d.mts +2 -2
  15. package/src/lib/display.d.ts +2 -2
  16. package/src/lib/display.js +5 -4
  17. package/src/lib/display.js.map +1 -1
  18. package/src/lib/display.mjs +5 -4
  19. package/src/lib/display.mjs.map +1 -1
  20. package/src/lib/extras.d.mts +3 -1
  21. package/src/lib/extras.d.ts +3 -1
  22. package/src/lib/extras.js +187 -5
  23. package/src/lib/extras.js.map +1 -1
  24. package/src/lib/extras.mjs +186 -5
  25. package/src/lib/extras.mjs.map +1 -1
  26. package/src/lib/label.d.mts +2 -0
  27. package/src/lib/label.d.ts +2 -0
  28. package/src/lib/label.js +47 -0
  29. package/src/lib/label.js.map +1 -0
  30. package/src/lib/label.mjs +43 -0
  31. package/src/lib/label.mjs.map +1 -0
  32. package/src/lib/labels.d.mts +33 -0
  33. package/src/lib/labels.d.ts +33 -0
  34. package/src/lib/labels.js +108 -0
  35. package/src/lib/labels.js.map +1 -1
  36. package/src/lib/labels.mjs +108 -0
  37. package/src/lib/labels.mjs.map +1 -1
  38. package/src/lib/lines.js +5 -3
  39. package/src/lib/lines.js.map +1 -1
  40. package/src/lib/lines.mjs +5 -3
  41. package/src/lib/lines.mjs.map +1 -1
  42. package/src/lib/numbers.d.mts +8 -0
  43. package/src/lib/numbers.d.ts +8 -0
  44. package/src/lib/numbers.js +47 -0
  45. package/src/lib/numbers.js.map +1 -0
  46. package/src/lib/numbers.mjs +43 -0
  47. package/src/lib/numbers.mjs.map +1 -0
  48. package/src/lib/progress.d.mts +2 -0
  49. package/src/lib/progress.d.ts +2 -0
  50. package/src/lib/progress.js +73 -0
  51. package/src/lib/progress.js.map +1 -0
  52. package/src/lib/progress.mjs +69 -0
  53. package/src/lib/progress.mjs.map +1 -0
  54. package/src/lib/properties.d.mts +2 -0
  55. package/src/lib/properties.d.ts +2 -0
  56. package/src/lib/properties.js +86 -0
  57. package/src/lib/properties.js.map +1 -0
  58. package/src/lib/properties.mjs +82 -0
  59. package/src/lib/properties.mjs.map +1 -0
  60. package/src/lib/relations.d.mts +7 -0
  61. package/src/lib/relations.d.ts +7 -0
  62. package/src/lib/relations.js +199 -26
  63. package/src/lib/relations.js.map +1 -1
  64. package/src/lib/relations.mjs +197 -25
  65. package/src/lib/relations.mjs.map +1 -1
  66. package/src/lib/statusbar.d.mts +2 -0
  67. package/src/lib/statusbar.d.ts +2 -0
  68. package/src/lib/statusbar.js +61 -0
  69. package/src/lib/statusbar.js.map +1 -0
  70. package/src/lib/statusbar.mjs +57 -0
  71. package/src/lib/statusbar.mjs.map +1 -0
  72. package/src/lib/styles.d.mts +1 -1
  73. package/src/lib/styles.d.ts +1 -1
  74. package/src/lib/styles.js +114 -2
  75. package/src/lib/styles.js.map +1 -1
  76. package/src/lib/styles.mjs +114 -2
  77. package/src/lib/styles.mjs.map +1 -1
  78. package/src/lib/widgets.d.mts +35 -1
  79. package/src/lib/widgets.d.ts +35 -1
  80. package/src/lib/widgets.js +57 -12
  81. package/src/lib/widgets.js.map +1 -1
  82. package/src/lib/widgets.mjs +58 -13
  83. package/src/lib/widgets.mjs.map +1 -1
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.displayValue = displayValue;
4
- const number = (value, digits) => new Intl.NumberFormat('en-US', { minimumFractionDigits: digits, maximumFractionDigits: digits }).format(value);
4
+ const numbers_1 = require("./numbers");
5
5
  function localDate(text) {
6
6
  const match = /^(\d{4})-(\d{2})-(\d{2})(?:[T ](\d{2}):(\d{2}))?/.exec(text);
7
7
  if (!match)
@@ -13,7 +13,8 @@ function localDate(text) {
13
13
  * A value as a person reads it where it is not being edited: a cell of the
14
14
  * lines grid, a totals row. Shared by the plain lines table and @fieldia/grid.
15
15
  */
16
- function displayValue(def, value, values = {}) {
16
+ function displayValue(def, value, values = {}, locale = 'en') {
17
+ const number = (n, digits) => (0, numbers_1.formatNumber)(n, digits, locale);
17
18
  if (value === null || value === undefined || value === '')
18
19
  return '';
19
20
  switch (def.type) {
@@ -37,12 +38,12 @@ function displayValue(def, value, values = {}) {
37
38
  }
38
39
  case 'date': {
39
40
  const date = localDate(String(value));
40
- return date ? new Intl.DateTimeFormat('en-GB', { day: 'numeric', month: 'short', year: 'numeric' }).format(date) : String(value);
41
+ return date ? new Intl.DateTimeFormat(locale === 'en' ? 'en-GB' : locale, { day: 'numeric', month: 'short', year: 'numeric', numberingSystem: 'latn' }).format(date) : String(value);
41
42
  }
42
43
  case 'datetime': {
43
44
  const date = localDate(String(value));
44
45
  return date
45
- ? new Intl.DateTimeFormat('en-GB', { day: 'numeric', month: 'short', year: 'numeric', hour: '2-digit', minute: '2-digit' }).format(date)
46
+ ? new Intl.DateTimeFormat(locale === 'en' ? 'en-GB' : locale, { day: 'numeric', month: 'short', year: 'numeric', hour: '2-digit', minute: '2-digit', numberingSystem: 'latn' }).format(date)
46
47
  : String(value);
47
48
  }
48
49
  case 'html':
@@ -1 +1 @@
1
- {"version":3,"file":"display.js","sourceRoot":"","sources":["../../../../../libs/widgets/src/lib/display.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"display.js","sourceRoot":"","sources":["../../../../../libs/widgets/src/lib/display.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- const number = (value, digits) => new Intl.NumberFormat('en-US', { minimumFractionDigits: digits, maximumFractionDigits: digits }).format(value);
1
+ import { formatNumber } from './numbers.mjs';
2
2
  function localDate(text) {
3
3
  const match = /^(\d{4})-(\d{2})-(\d{2})(?:[T ](\d{2}):(\d{2}))?/.exec(text);
4
4
  if (!match)
@@ -10,7 +10,8 @@ function localDate(text) {
10
10
  * A value as a person reads it where it is not being edited: a cell of the
11
11
  * lines grid, a totals row. Shared by the plain lines table and @fieldia/grid.
12
12
  */
13
- export function displayValue(def, value, values = {}) {
13
+ export function displayValue(def, value, values = {}, locale = 'en') {
14
+ const number = (n, digits) => formatNumber(n, digits, locale);
14
15
  if (value === null || value === undefined || value === '')
15
16
  return '';
16
17
  switch (def.type) {
@@ -34,12 +35,12 @@ export function displayValue(def, value, values = {}) {
34
35
  }
35
36
  case 'date': {
36
37
  const date = localDate(String(value));
37
- return date ? new Intl.DateTimeFormat('en-GB', { day: 'numeric', month: 'short', year: 'numeric' }).format(date) : String(value);
38
+ return date ? new Intl.DateTimeFormat(locale === 'en' ? 'en-GB' : locale, { day: 'numeric', month: 'short', year: 'numeric', numberingSystem: 'latn' }).format(date) : String(value);
38
39
  }
39
40
  case 'datetime': {
40
41
  const date = localDate(String(value));
41
42
  return date
42
- ? new Intl.DateTimeFormat('en-GB', { day: 'numeric', month: 'short', year: 'numeric', hour: '2-digit', minute: '2-digit' }).format(date)
43
+ ? new Intl.DateTimeFormat(locale === 'en' ? 'en-GB' : locale, { day: 'numeric', month: 'short', year: 'numeric', hour: '2-digit', minute: '2-digit', numberingSystem: 'latn' }).format(date)
43
44
  : String(value);
44
45
  }
45
46
  case 'html':
@@ -1 +1 @@
1
- {"version":3,"file":"display.mjs","sourceRoot":"","sources":["../../../../../libs/widgets/src/lib/display.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"display.mjs","sourceRoot":"","sources":["../../../../../libs/widgets/src/lib/display.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,7 @@
1
1
  import type { WidgetFactory } from './widgets.mjs';
2
- /** Keep text structure and http(s)/mailto links; drop every other element and attribute. */
2
+ /** Keep text structure, block alignment and http(s)/mailto links; drop every other element and attribute. */
3
3
  export declare function sanitizeHtml(html: string, document?: Document): string;
4
+ /** A typed address as a link target: web and mail addresses only, "https://" added to a bare domain. */
5
+ export declare function linkAddress(typed: string): string | null;
4
6
  export declare const htmlWidget: WidgetFactory;
5
7
  export declare const jsonWidget: WidgetFactory;
@@ -1,5 +1,7 @@
1
1
  import type { WidgetFactory } from './widgets';
2
- /** Keep text structure and http(s)/mailto links; drop every other element and attribute. */
2
+ /** Keep text structure, block alignment and http(s)/mailto links; drop every other element and attribute. */
3
3
  export declare function sanitizeHtml(html: string, document?: Document): string;
4
+ /** A typed address as a link target: web and mail addresses only, "https://" added to a bare domain. */
5
+ export declare function linkAddress(typed: string): string | null;
4
6
  export declare const htmlWidget: WidgetFactory;
5
7
  export declare const jsonWidget: WidgetFactory;
package/src/lib/extras.js CHANGED
@@ -2,10 +2,12 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.jsonWidget = exports.htmlWidget = void 0;
4
4
  exports.sanitizeHtml = sanitizeHtml;
5
+ exports.linkAddress = linkAddress;
5
6
  const labels_1 = require("./labels");
6
7
  /**
7
- * Formatted text and JSON. Formatted text is edited in place (the browser's
8
- * own shortcuts give bold, italic and underline) and every value — typed,
8
+ * Formatted text and JSON. Formatted text is edited in place, with a toolbar
9
+ * (bold, italic, underline, headings, lists, alignment, links) that drives the
10
+ * browser's own editing, so no editor library is loaded. Every value — typed,
9
11
  * pasted or loaded — passes through `sanitizeHtml`, so stored markup can never
10
12
  * run script in the page.
11
13
  */
@@ -14,7 +16,10 @@ const ALLOWED = new Set([
14
16
  'BLOCKQUOTE', 'CODE', 'PRE', 'SPAN', 'DIV',
15
17
  ]);
16
18
  const DROPPED_WITH_CONTENT = new Set(['SCRIPT', 'STYLE', 'IFRAME', 'OBJECT', 'EMBED', 'TEMPLATE', 'NOSCRIPT', 'SVG', 'MATH']);
17
- /** Keep text structure and http(s)/mailto links; drop every other element and attribute. */
19
+ /** Blocks that may keep their alignment, the one style the toolbar sets. */
20
+ const ALIGNABLE = new Set(['P', 'DIV', 'H1', 'H2', 'H3', 'H4', 'LI', 'BLOCKQUOTE', 'PRE']);
21
+ const ALIGNMENTS = new Set(['left', 'center', 'right', 'justify', 'start', 'end']);
22
+ /** Keep text structure, block alignment and http(s)/mailto links; drop every other element and attribute. */
18
23
  function sanitizeHtml(html, document = globalThis.document) {
19
24
  const box = document.createElement('template');
20
25
  box.innerHTML = html;
@@ -37,10 +42,13 @@ function sanitizeHtml(html, document = globalThis.document) {
37
42
  continue;
38
43
  }
39
44
  const href = element.tagName === 'A' ? element.getAttribute('href') : null;
45
+ const align = ALIGNABLE.has(element.tagName) ? element.style?.textAlign?.trim().toLowerCase() : '';
40
46
  for (const attribute of [...element.attributes])
41
47
  element.removeAttribute(attribute.name);
42
48
  if (href && /^(https?:|mailto:)/i.test(href.trim()))
43
49
  element.setAttribute('href', href.trim());
50
+ if (align && ALIGNMENTS.has(align))
51
+ element.setAttribute('style', `text-align: ${align};`);
44
52
  }
45
53
  };
46
54
  clean(box.content);
@@ -48,13 +56,37 @@ function sanitizeHtml(html, document = globalThis.document) {
48
56
  out.append(box.content);
49
57
  return out.innerHTML;
50
58
  }
51
- const htmlWidget = ({ form, name, id, document }) => {
59
+ /** A typed address as a link target: web and mail addresses only, "https://" added to a bare domain. */
60
+ function linkAddress(typed) {
61
+ const text = typed.trim();
62
+ if (/^(https?:\/\/|mailto:)\S+$/i.test(text))
63
+ return text;
64
+ if (/^[^\s@:/]+@[^\s@:/]+\.[^\s@:/]+$/.test(text))
65
+ return `mailto:${text}`;
66
+ if (/^[\w-]+(\.[\w-]+)+([/?#]\S*)?$/.test(text))
67
+ return `https://${text}`;
68
+ return null;
69
+ }
70
+ /** The toolbar's buttons: [label key, editing command, drawn icon]. */
71
+ const TOOLS = [
72
+ ['bold', 'bold', '<b>B</b>'],
73
+ ['italic', 'italic', '<i>I</i>'],
74
+ ['underline', 'underline', '<u>U</u>'],
75
+ ['bulletList', 'insertUnorderedList', '<svg viewBox="0 0 16 16"><circle cx="3" cy="4" r="1.2"/><circle cx="3" cy="8" r="1.2"/><circle cx="3" cy="12" r="1.2"/><path d="M6 4h8M6 8h8M6 12h8"/></svg>'],
76
+ ['numberList', 'insertOrderedList', '<svg viewBox="0 0 16 16"><path d="M2.5 3h1v3M2 10.5c.5-.8 2-.8 2 .2 0 .8-2 1.3-2 2.3h2M6 4h8M6 8h8M6 12h8"/></svg>'],
77
+ ['alignLeft', 'justifyLeft', '<svg viewBox="0 0 16 16"><path d="M2 3.5h12M2 6.5h8M2 9.5h12M2 12.5h8"/></svg>'],
78
+ ['alignCenter', 'justifyCenter', '<svg viewBox="0 0 16 16"><path d="M2 3.5h12M4 6.5h8M2 9.5h12M4 12.5h8"/></svg>'],
79
+ ['alignRight', 'justifyRight', '<svg viewBox="0 0 16 16"><path d="M2 3.5h12M6 6.5h8M2 9.5h12M6 12.5h8"/></svg>'],
80
+ ['link', 'createLink', '<svg viewBox="0 0 16 16"><path d="M7 9a3 3 0 0 0 4.2 0l2.3-2.3a3 3 0 0 0-4.2-4.2L8.2 3.6M9 7a3 3 0 0 0-4.2 0L2.5 9.3a3 3 0 0 0 4.2 4.2l1.1-1.1"/></svg>'],
81
+ ];
82
+ const htmlWidget = ({ form, name, node, id, document, labels = labels_1.WIDGET_LABELS.en }) => {
52
83
  const area = document.createElement('div');
53
84
  area.id = id;
54
85
  area.className = 'fd-input fd-richtext';
55
86
  area.setAttribute('role', 'textbox');
56
87
  area.setAttribute('aria-multiline', 'true');
57
88
  area.setAttribute('contenteditable', 'true');
89
+ const withToolbar = node.options?.['toolbar'] !== false;
58
90
  let last = '';
59
91
  area.addEventListener('input', () => {
60
92
  const clean = sanitizeHtml(area.innerHTML, document);
@@ -66,10 +98,26 @@ const htmlWidget = ({ form, name, id, document }) => {
66
98
  if (area.innerHTML !== last)
67
99
  area.innerHTML = last;
68
100
  });
101
+ const toolbar = withToolbar ? formattingToolbar(area, document, labels) : null;
102
+ let element = area;
103
+ if (toolbar) {
104
+ // The box is labelled by the field's label; the text inside it says so too.
105
+ element = document.createElement('div');
106
+ element.className = 'fd-richtext-box';
107
+ element.setAttribute('role', 'group');
108
+ area.setAttribute('aria-labelledby', `${id}-label`);
109
+ element.append(toolbar.bar, toolbar.linkRow, area);
110
+ }
69
111
  return {
70
- element: area,
112
+ element,
71
113
  focus: () => area.focus(),
114
+ destroy: () => toolbar?.destroy(),
72
115
  update(state) {
116
+ if (toolbar) {
117
+ toolbar.bar.hidden = state.readonly;
118
+ if (state.readonly)
119
+ toolbar.linkRow.hidden = true;
120
+ }
73
121
  const clean = sanitizeHtml(typeof state.value === 'string' ? state.value : '', document);
74
122
  if (clean !== last || document.activeElement !== area) {
75
123
  if (area.innerHTML !== clean)
@@ -85,6 +133,140 @@ const htmlWidget = ({ form, name, id, document }) => {
85
133
  };
86
134
  };
87
135
  exports.htmlWidget = htmlWidget;
136
+ /**
137
+ * The toolbar of a formatted text: buttons that keep the text's selection
138
+ * (they act on mousedown's behalf), a text-style choice, and a row for a link's
139
+ * address. One button takes Tab; the arrow keys move along the bar.
140
+ */
141
+ function formattingToolbar(area, doc, labels) {
142
+ const bar = doc.createElement('div');
143
+ bar.className = 'fd-richtext-bar';
144
+ bar.setAttribute('role', 'toolbar');
145
+ bar.setAttribute('aria-label', labels.formatting);
146
+ // The last selection made in the text: the style box and the address box take
147
+ // the focus, and a command must act where the person had selected.
148
+ let lastRange = null;
149
+ const restore = () => {
150
+ area.focus();
151
+ const selection = doc.getSelection();
152
+ if (lastRange && selection) {
153
+ selection.removeAllRanges();
154
+ selection.addRange(lastRange);
155
+ }
156
+ };
157
+ const run = (command, value) => {
158
+ restore();
159
+ doc.execCommand?.(command, false, value);
160
+ };
161
+ const style = doc.createElement('select');
162
+ style.className = 'fd-richtext-style';
163
+ style.setAttribute('aria-label', labels.textStyle);
164
+ for (const [value, key] of [['p', 'paragraph'], ['h2', 'heading'], ['h3', 'subheading']]) {
165
+ const option = doc.createElement('option');
166
+ option.value = value;
167
+ option.textContent = labels[key];
168
+ style.append(option);
169
+ }
170
+ style.addEventListener('change', () => run('formatBlock', `<${style.value}>`));
171
+ const linkRow = doc.createElement('div');
172
+ linkRow.className = 'fd-link-row';
173
+ linkRow.hidden = true;
174
+ const address = doc.createElement('input');
175
+ address.className = 'fd-input';
176
+ address.type = 'url';
177
+ address.placeholder = 'https://';
178
+ address.setAttribute('aria-label', labels.linkAddress);
179
+ const apply = doc.createElement('button');
180
+ apply.type = 'button';
181
+ apply.className = 'fd-button fd-link-apply';
182
+ apply.textContent = labels.applyLink;
183
+ const unlink = doc.createElement('button');
184
+ unlink.type = 'button';
185
+ unlink.className = 'fd-button fd-button-link fd-link-remove';
186
+ unlink.textContent = labels.removeLink;
187
+ linkRow.append(address, apply, unlink);
188
+ apply.addEventListener('click', () => {
189
+ const url = linkAddress(address.value);
190
+ if (!url) {
191
+ address.setAttribute('aria-invalid', 'true');
192
+ return;
193
+ }
194
+ address.setAttribute('aria-invalid', 'false');
195
+ restore();
196
+ doc.execCommand?.('createLink', false, url);
197
+ linkRow.hidden = true;
198
+ });
199
+ unlink.addEventListener('click', () => {
200
+ restore();
201
+ doc.execCommand?.('unlink', false);
202
+ linkRow.hidden = true;
203
+ });
204
+ address.addEventListener('keydown', (event) => {
205
+ if (event.key === 'Enter') {
206
+ event.preventDefault();
207
+ apply.click();
208
+ }
209
+ else if (event.key === 'Escape') {
210
+ event.preventDefault();
211
+ linkRow.hidden = true;
212
+ restore();
213
+ }
214
+ });
215
+ const buttons = TOOLS.map(([key, command, icon]) => {
216
+ const button = doc.createElement('button');
217
+ button.type = 'button';
218
+ button.className = 'fd-richtext-tool';
219
+ button.setAttribute('aria-label', labels[key]);
220
+ button.title = labels[key];
221
+ button.innerHTML = icon;
222
+ button.querySelector('svg')?.setAttribute('aria-hidden', 'true');
223
+ if (['bold', 'italic', 'underline'].includes(command))
224
+ button.setAttribute('aria-pressed', 'false');
225
+ // Keep the text's selection when the button is pressed.
226
+ button.addEventListener('mousedown', (event) => event.preventDefault());
227
+ button.addEventListener('click', () => {
228
+ if (command !== 'createLink')
229
+ return run(command);
230
+ linkRow.hidden = false;
231
+ address.value = '';
232
+ address.focus();
233
+ });
234
+ return button;
235
+ });
236
+ bar.append(style, ...buttons);
237
+ // One stop on Tab; the arrow keys move along the bar.
238
+ const stops = [style, ...buttons];
239
+ stops.forEach((stop, i) => (stop.tabIndex = i === 0 ? 0 : -1));
240
+ bar.addEventListener('keydown', (event) => {
241
+ if (event.key !== 'ArrowRight' && event.key !== 'ArrowLeft')
242
+ return;
243
+ const at = stops.indexOf(doc.activeElement);
244
+ if (at < 0)
245
+ return;
246
+ const rtl = getComputedStyle(bar).direction === 'rtl';
247
+ const step = (event.key === 'ArrowRight') !== rtl ? 1 : -1;
248
+ const next = stops[(at + step + stops.length) % stops.length];
249
+ event.preventDefault();
250
+ stops.forEach((stop) => (stop.tabIndex = stop === next ? 0 : -1));
251
+ next.focus();
252
+ });
253
+ // Show which formats the selection already has.
254
+ const reflect = () => {
255
+ const selection = doc.getSelection();
256
+ if (!selection || !selection.rangeCount || !area.contains(selection.anchorNode))
257
+ return;
258
+ lastRange = selection.getRangeAt(0).cloneRange();
259
+ for (const button of buttons) {
260
+ const command = TOOLS[buttons.indexOf(button)][1];
261
+ if (button.hasAttribute('aria-pressed'))
262
+ button.setAttribute('aria-pressed', String(doc.queryCommandState?.(command) ?? false));
263
+ }
264
+ const block = String(doc.queryCommandValue?.('formatBlock') ?? '').toLowerCase().replace(/[<>]/g, '');
265
+ style.value = block === 'h2' || block === 'h3' ? block : 'p';
266
+ };
267
+ doc.addEventListener('selectionchange', reflect);
268
+ return { bar, linkRow, destroy: () => doc.removeEventListener('selectionchange', reflect) };
269
+ }
88
270
  const jsonWidget = ({ form, name, id, document, labels = labels_1.WIDGET_LABELS.en }) => {
89
271
  const element = document.createElement('div');
90
272
  element.className = 'fd-json';
@@ -1 +1 @@
1
- {"version":3,"file":"extras.js","sourceRoot":"","sources":["../../../../../libs/widgets/src/lib/extras.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"extras.js","sourceRoot":"","sources":["../../../../../libs/widgets/src/lib/extras.ts"],"names":[],"mappings":"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"}