data-navigator 0.0.1 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js ADDED
@@ -0,0 +1,708 @@
1
+ function _array_like_to_array(arr, len) {
2
+ if (len == null || len > arr.length) len = arr.length;
3
+ for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
4
+ return arr2;
5
+ }
6
+ function _array_without_holes(arr) {
7
+ if (Array.isArray(arr)) return _array_like_to_array(arr);
8
+ }
9
+ function _define_property(obj, key, value) {
10
+ if (key in obj) {
11
+ Object.defineProperty(obj, key, {
12
+ value: value,
13
+ enumerable: true,
14
+ configurable: true,
15
+ writable: true
16
+ });
17
+ } else {
18
+ obj[key] = value;
19
+ }
20
+ return obj;
21
+ }
22
+ function _iterable_to_array(iter) {
23
+ if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
24
+ }
25
+ function _non_iterable_spread() {
26
+ throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
27
+ }
28
+ function _object_spread(target) {
29
+ for(var i = 1; i < arguments.length; i++){
30
+ var source = arguments[i] != null ? arguments[i] : {};
31
+ var ownKeys = Object.keys(source);
32
+ if (typeof Object.getOwnPropertySymbols === "function") {
33
+ ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
34
+ return Object.getOwnPropertyDescriptor(source, sym).enumerable;
35
+ }));
36
+ }
37
+ ownKeys.forEach(function(key) {
38
+ _define_property(target, key, source[key]);
39
+ });
40
+ }
41
+ return target;
42
+ }
43
+ function _to_consumable_array(arr) {
44
+ return _array_without_holes(arr) || _iterable_to_array(arr) || _unsupported_iterable_to_array(arr) || _non_iterable_spread();
45
+ }
46
+ function _unsupported_iterable_to_array(o, minLen) {
47
+ if (!o) return;
48
+ if (typeof o === "string") return _array_like_to_array(o, minLen);
49
+ var n = Object.prototype.toString.call(o).slice(8, -1);
50
+ if (n === "Object" && o.constructor) n = o.constructor.name;
51
+ if (n === "Map" || n === "Set") return Array.from(n);
52
+ if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
53
+ }
54
+ var __defProp = Object.defineProperty;
55
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
56
+ var __getOwnPropNames = Object.getOwnPropertyNames;
57
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
58
+ var __export = function(target, all) {
59
+ for(var name in all)__defProp(target, name, {
60
+ get: all[name],
61
+ enumerable: true
62
+ });
63
+ };
64
+ var __copyProps = function(to, from, except, desc) {
65
+ if (from && typeof from === "object" || typeof from === "function") {
66
+ var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
67
+ try {
68
+ var _loop = function() {
69
+ var key = _step.value;
70
+ if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
71
+ get: function() {
72
+ return from[key];
73
+ },
74
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
75
+ });
76
+ };
77
+ for(var _iterator = __getOwnPropNames(from)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true)_loop();
78
+ } catch (err) {
79
+ _didIteratorError = true;
80
+ _iteratorError = err;
81
+ } finally{
82
+ try {
83
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
84
+ _iterator.return();
85
+ }
86
+ } finally{
87
+ if (_didIteratorError) {
88
+ throw _iteratorError;
89
+ }
90
+ }
91
+ }
92
+ }
93
+ return to;
94
+ };
95
+ var __toCommonJS = function(mod) {
96
+ return __copyProps(__defProp({}, "__esModule", {
97
+ value: true
98
+ }), mod);
99
+ };
100
+ // src/index.ts
101
+ var src_exports = {};
102
+ __export(src_exports, {
103
+ default: function() {
104
+ return src_default;
105
+ }
106
+ });
107
+ module.exports = __toCommonJS(src_exports);
108
+ // src/consts.ts
109
+ var defaultKeyBindings = {
110
+ ArrowLeft: "left",
111
+ ArrowRight: "right",
112
+ ArrowUp: "up",
113
+ ArrowDown: "down",
114
+ Period: "forward",
115
+ Comma: "backward",
116
+ Escape: "parent",
117
+ Enter: "child"
118
+ };
119
+ var GenericFullNavigationRules = {
120
+ down: {
121
+ keyCode: "ArrowDown",
122
+ direction: "target"
123
+ },
124
+ left: {
125
+ keyCode: "ArrowLeft",
126
+ direction: "source"
127
+ },
128
+ right: {
129
+ keyCode: "ArrowRight",
130
+ direction: "target"
131
+ },
132
+ up: {
133
+ keyCode: "ArrowUp",
134
+ direction: "source"
135
+ },
136
+ backward: {
137
+ keyCode: "Comma",
138
+ direction: "source"
139
+ },
140
+ child: {
141
+ keyCode: "Enter",
142
+ direction: "target"
143
+ },
144
+ parent: {
145
+ keyCode: "Backspace",
146
+ direction: "source"
147
+ },
148
+ forward: {
149
+ keyCode: "Period",
150
+ direction: "target"
151
+ },
152
+ exit: {
153
+ keyCode: "Escape",
154
+ direction: "target"
155
+ }
156
+ };
157
+ var GenericLimitedNavigationRules = {
158
+ right: {
159
+ key: "ArrowRight",
160
+ direction: "target"
161
+ },
162
+ left: {
163
+ key: "ArrowLeft",
164
+ direction: "source"
165
+ },
166
+ down: {
167
+ key: "ArrowDown",
168
+ direction: "target"
169
+ },
170
+ up: {
171
+ key: "ArrowUp",
172
+ direction: "source"
173
+ },
174
+ child: {
175
+ key: "Enter",
176
+ direction: "target"
177
+ },
178
+ parent: {
179
+ key: "Backspace",
180
+ direction: "source"
181
+ },
182
+ exit: {
183
+ key: "Escape",
184
+ direction: "target"
185
+ },
186
+ undo: {
187
+ key: "Period",
188
+ direction: "target"
189
+ },
190
+ legend: {
191
+ key: "KeyL",
192
+ direction: "target"
193
+ }
194
+ };
195
+ var NodeElementDefaults = {
196
+ cssClass: "",
197
+ dimensions: {
198
+ x: 0,
199
+ y: 0,
200
+ width: 0,
201
+ height: 0,
202
+ path: ""
203
+ },
204
+ semantics: {
205
+ label: "",
206
+ elementType: "div",
207
+ role: "image",
208
+ attributes: void 0
209
+ },
210
+ parentSemantics: {
211
+ label: "",
212
+ elementType: "figure",
213
+ role: "figure",
214
+ attributes: void 0
215
+ },
216
+ existingElement: {
217
+ useForDimensions: false,
218
+ dimensions: void 0
219
+ }
220
+ };
221
+ // src/utilities.ts
222
+ var describeNode = function(d, descriptionOptions) {
223
+ var keys = Object.keys(d);
224
+ var description = "";
225
+ keys.forEach(function(key) {
226
+ description += "".concat(descriptionOptions && descriptionOptions.omitKeyNames ? "" : key + ": ").concat(d[key], ". ");
227
+ });
228
+ description += descriptionOptions && descriptionOptions.semanticLabel || "Data point.";
229
+ return description;
230
+ };
231
+ // src/structure.ts
232
+ var structure_default = function(options) {
233
+ if (options.dataType === "vega-lite" || options.dataType === "vl" || options.dataType === "Vega-Lite") {
234
+ return buildNodeStructureFromVegaLite(options);
235
+ } else {
236
+ console.warn("Apologies, we currently only have structure scaffolding for Vega-Lite, generic scaffolding coming soon!");
237
+ return;
238
+ }
239
+ };
240
+ var buildNodeStructureFromVegaLite = function(options) {
241
+ var navigationRules = GenericLimitedNavigationRules;
242
+ var nodes = {};
243
+ var edges = {};
244
+ var elementData = {};
245
+ var total = 0;
246
+ var includeGroup = options.groupInclusionCriteria ? options.groupInclusionCriteria : function() {
247
+ return true;
248
+ };
249
+ var includeItem = options.itemInclusionCriteria ? options.itemInclusionCriteria : function() {
250
+ return true;
251
+ };
252
+ var includeDataProperties = options.datumInclusionCriteria ? options.datumInclusionCriteria : function() {
253
+ return true;
254
+ };
255
+ var offset = options.vegaLiteView._renderer._origin;
256
+ var groupParent = options.vegaLiteView._scenegraph.root.items[0].mark.items[0];
257
+ var idBuilder = function(i2, level) {
258
+ if (i2["data-navigator-id"]) {
259
+ return i2["data-navigator-id"];
260
+ }
261
+ var id = "dn-node-".concat(level, "-").concat(total);
262
+ total++;
263
+ i2["data-navigator-id"] = id;
264
+ return id;
265
+ };
266
+ var edgeBuilder = function(id) {
267
+ var node = nodes[id];
268
+ var index = node.index;
269
+ var level = node.level;
270
+ var parent = node.parent;
271
+ var edgeList = [];
272
+ var previous = parent.items[index - 1];
273
+ if (previous) {
274
+ var previousId = idBuilder(previous, level);
275
+ if (nodes[previousId]) {
276
+ var previousEdge = "".concat(previousId, "-").concat(node.id);
277
+ edgeList.push(previousEdge);
278
+ if (!edges[previousEdge]) {
279
+ edges[previousEdge] = {
280
+ source: previousId,
281
+ target: node.id,
282
+ navigationRules: [
283
+ "left",
284
+ "right"
285
+ ]
286
+ };
287
+ }
288
+ }
289
+ }
290
+ var next = parent.items[index + 1];
291
+ if (next) {
292
+ var nextId = idBuilder(next, level);
293
+ if (nodes[nextId]) {
294
+ var nextEdge = "".concat(node.id, "-").concat(nextId);
295
+ edgeList.push(nextEdge);
296
+ if (!edges[nextEdge]) {
297
+ edges[nextEdge] = {
298
+ source: node.id,
299
+ target: nextId,
300
+ navigationRules: [
301
+ "left",
302
+ "right"
303
+ ]
304
+ };
305
+ }
306
+ }
307
+ }
308
+ if (level === "group" && parent.items[index].items) {
309
+ var g = parent.items[index].items[0].mark.items[0].items || parent.items[index].items;
310
+ var firstChild = g[0];
311
+ var firstChildId = idBuilder(firstChild, "item");
312
+ if (nodes[firstChildId]) {
313
+ var firstChildEdge = "".concat(node.id, "-").concat(firstChildId);
314
+ edgeList.push(firstChildEdge);
315
+ if (!edges[firstChildEdge]) {
316
+ edges[firstChildEdge] = {
317
+ source: node.id,
318
+ target: firstChildId,
319
+ navigationRules: [
320
+ "parent",
321
+ "child"
322
+ ]
323
+ };
324
+ }
325
+ }
326
+ } else if (level === "item") {
327
+ var parentId = idBuilder(parent, "group");
328
+ if (nodes[parentId]) {
329
+ var parentEdge = "".concat(parentId, "-").concat(node.id);
330
+ edgeList.push(parentEdge);
331
+ if (!edges[parentEdge]) {
332
+ edges[parentEdge] = {
333
+ source: parentId,
334
+ target: node.id,
335
+ navigationRules: [
336
+ "parent",
337
+ "child"
338
+ ]
339
+ };
340
+ }
341
+ }
342
+ }
343
+ if (options.exitFunction) {
344
+ edgeList.push("any-exit");
345
+ if (!edges["any-exit"]) {
346
+ edges["any-exit"] = {
347
+ source: options.getCurrent,
348
+ target: options.exitFunction,
349
+ navigationRules: [
350
+ "exit"
351
+ ]
352
+ };
353
+ }
354
+ }
355
+ edgeList.push("any-undo");
356
+ if (!edges["any-undo"]) {
357
+ edges["any-undo"] = {
358
+ source: options.getCurrent,
359
+ target: options.getPrevious,
360
+ navigationRules: [
361
+ "undo"
362
+ ]
363
+ };
364
+ }
365
+ return edgeList;
366
+ };
367
+ var nodeBuilder = function(item, level, offset2, index, parent) {
368
+ var id = idBuilder(item, level);
369
+ var renderId = "render-" + id;
370
+ var o = offset2 || [
371
+ 0,
372
+ 0
373
+ ];
374
+ nodes[id] = {};
375
+ nodes[id].d = {};
376
+ nodes[id].id = id;
377
+ nodes[id].renderId = renderId;
378
+ nodes[id].index = index;
379
+ nodes[id].level = level;
380
+ nodes[id].parent = parent;
381
+ elementData[renderId] = {};
382
+ elementData[renderId].renderId = renderId;
383
+ elementData[renderId].dimensions = {};
384
+ elementData[renderId].dimensions.x = item.bounds.x1 + o[0];
385
+ elementData[renderId].dimensions.y = item.bounds.y1 + o[1];
386
+ elementData[renderId].dimensions.width = item.bounds.x2 - item.bounds.x1;
387
+ elementData[renderId].dimensions.height = item.bounds.y2 - item.bounds.y1;
388
+ elementData[renderId].cssClass = "dn-vega-lite-node";
389
+ if (item.datum) {
390
+ Object.keys(item.datum).forEach(function(key) {
391
+ var value = item.datum[key];
392
+ if (includeDataProperties(key, value, item.datum, level, options.vegaLiteSpec)) {
393
+ nodes[id].d[options.keyRenamingHash && options.keyRenamingHash[key] ? options.keyRenamingHash[key] : key] = value;
394
+ }
395
+ });
396
+ }
397
+ elementData[renderId].semantics = {};
398
+ elementData[renderId].semantics.label = options.nodeDescriber ? options.nodeDescriber(nodes[id].d, item, level) : describeNode(nodes[id].d);
399
+ };
400
+ var i = 0;
401
+ var groups = groupParent.items;
402
+ groups.forEach(function(group) {
403
+ if (includeGroup(group, i, options.vegaLiteSpec)) {
404
+ nodeBuilder(group, "group", offset, i, groupParent);
405
+ var j = 0;
406
+ var g = group.items[0].mark.items[0].items ? group.items[0].mark.items[0] : group;
407
+ g.items.forEach(function(item) {
408
+ if (includeItem(item, j, group, options.vegaLiteSpec)) {
409
+ nodeBuilder(item, "item", offset, j, g);
410
+ }
411
+ j++;
412
+ });
413
+ }
414
+ i++;
415
+ });
416
+ Object.keys(nodes).forEach(function(n) {
417
+ nodes[n].edges = edgeBuilder(n);
418
+ });
419
+ return {
420
+ nodes: nodes,
421
+ edges: edges,
422
+ elementData: elementData,
423
+ navigationRules: navigationRules
424
+ };
425
+ };
426
+ // src/input.ts
427
+ var input_default = function(options) {
428
+ var inputHandler = {};
429
+ var keyBindings = defaultKeyBindings;
430
+ var directions = GenericFullNavigationRules;
431
+ inputHandler.moveTo = function(id) {
432
+ var target = options.structure.nodes[id];
433
+ if (target) {
434
+ return target;
435
+ }
436
+ return;
437
+ };
438
+ inputHandler.move = function(currentFocus, direction) {
439
+ if (currentFocus) {
440
+ var d = options.structure.nodes[currentFocus];
441
+ if (d.edges) {
442
+ var _loop = function() {
443
+ var edge = options.structure.edges[d.edges[i]];
444
+ edge.navigationRules.forEach(function(rule) {
445
+ if (!target) {
446
+ target = findTarget(rule, edge);
447
+ }
448
+ });
449
+ if (target) {
450
+ return "break";
451
+ }
452
+ };
453
+ var target = null;
454
+ var i = 0;
455
+ var navRule = directions[direction];
456
+ if (!navRule) {
457
+ return;
458
+ }
459
+ var findTarget = function(rule, edge) {
460
+ if (!(rule === direction)) {
461
+ return null;
462
+ }
463
+ var resolvedNodes = {
464
+ target: typeof edge.target === "string" ? edge.target : edge.target(d, currentFocus),
465
+ source: typeof edge.source === "string" ? edge.source : edge.source(d, currentFocus)
466
+ };
467
+ return !(resolvedNodes[navRule.direction] === currentFocus) ? resolvedNodes[navRule.direction] : null;
468
+ };
469
+ for(i = 0; i < d.edges.length; i++){
470
+ var _ret = _loop();
471
+ if (_ret === "break") break;
472
+ }
473
+ if (target) {
474
+ return inputHandler.moveTo(target);
475
+ }
476
+ return void 0;
477
+ }
478
+ }
479
+ };
480
+ inputHandler.enter = function() {
481
+ if (options.entryPoint) {
482
+ return inputHandler.moveTo(options.entryPoint);
483
+ } else {
484
+ console.error("No entry point was specified in InputOptions, returning undefined");
485
+ return;
486
+ }
487
+ };
488
+ inputHandler.exit = function() {
489
+ if (options.exitPoint) {
490
+ return options.exitPoint;
491
+ } else {
492
+ console.error("No exit point was specified in InputOptions, returning undefined");
493
+ return;
494
+ }
495
+ };
496
+ inputHandler.keydownValidator = function(e) {
497
+ var direction = keyBindings[e.code];
498
+ if (direction) {
499
+ return direction;
500
+ }
501
+ };
502
+ inputHandler.focus = function(renderId) {
503
+ var node = document.getElementById(renderId);
504
+ if (node) {
505
+ node.focus();
506
+ }
507
+ };
508
+ inputHandler.setNavigationKeyBindings = function(navKeyBindings) {
509
+ if (!navKeyBindings) {
510
+ keyBindings = defaultKeyBindings;
511
+ directions = GenericFullNavigationRules;
512
+ } else {
513
+ keyBindings = {};
514
+ directions = navKeyBindings;
515
+ Object.keys(navKeyBindings).forEach(function(direction) {
516
+ var navOption = navKeyBindings[direction];
517
+ keyBindings[navOption.key] = direction;
518
+ });
519
+ }
520
+ };
521
+ inputHandler.setNavigationKeyBindings(options.navigationRules);
522
+ return inputHandler;
523
+ };
524
+ // src/rendering.ts
525
+ var rendering_default = function(options) {
526
+ var renderer = {};
527
+ var initialized = false;
528
+ var defaults = {
529
+ cssClass: NodeElementDefaults.cssClass,
530
+ dimensions: _object_spread({}, NodeElementDefaults.dimensions),
531
+ semantics: _object_spread({}, NodeElementDefaults.semantics),
532
+ parentSemantics: _object_spread({}, NodeElementDefaults.parentSemantics),
533
+ existingElement: _object_spread({}, NodeElementDefaults.existingElement)
534
+ };
535
+ if (options.defaults) {
536
+ defaults.cssClass = options.defaults.cssClass || defaults.cssClass;
537
+ defaults.dimensions = options.defaults.dimensions ? _object_spread({}, defaults.dimensions, options.defaults.dimensions) : defaults.dimensions;
538
+ defaults.semantics = options.defaults.semantics ? _object_spread({}, defaults.semantics, options.defaults.semantics) : defaults.semantics;
539
+ defaults.parentSemantics = options.defaults.parentSemantics ? _object_spread({}, defaults.parentSemantics, options.defaults.parentSemantics) : defaults.parentSemantics;
540
+ defaults.existingElement = options.defaults.existingElement ? _object_spread({}, defaults.existingElement, options.defaults.existingElement) : defaults.existingElement;
541
+ }
542
+ renderer.initialize = function() {
543
+ if (initialized) {
544
+ console.error("The renderer wrapper has already been initialized successfully, RenderingOptions.suffixId is: ".concat(options.suffixId, ". No further action was taken."));
545
+ return;
546
+ }
547
+ if (options.root && document.getElementById(options.root.id)) {
548
+ renderer.root = document.getElementById(options.root.id);
549
+ } else {
550
+ console.error("No root element found, cannot build: RenderingOptions.root.id must reference an existing DOM element in order to render children.");
551
+ return;
552
+ }
553
+ renderer.root.style.position = "relative";
554
+ renderer.root.classList.add("dn-root");
555
+ if (!options.suffixId) {
556
+ console.error("No suffix id found: options.suffixId must be specified.");
557
+ return;
558
+ }
559
+ renderer.wrapper = document.createElement("div");
560
+ renderer.wrapper.id = "dn-wrapper-" + options.suffixId;
561
+ renderer.wrapper.classList.add("dn-wrapper");
562
+ renderer.wrapper.style.width = options.root && options.root.width ? options.root.width : "100%";
563
+ if (options.root && options.root.height) {
564
+ renderer.wrapper.style.height = options.root.height;
565
+ }
566
+ if (options.entryButton && options.entryButton.include) {
567
+ renderer.entryButton = document.createElement("button");
568
+ renderer.entryButton.id = "dn-entry-button-" + options.suffixId;
569
+ renderer.entryButton.classList.add("dn-entry-button");
570
+ renderer.entryButton.innerText = "Enter navigation area";
571
+ if (options.entryButton.callbacks && options.entryButton.callbacks.click) {
572
+ renderer.entryButton.addEventListener("click", options.entryButton.callbacks.click);
573
+ }
574
+ if (options.entryButton.callbacks && options.entryButton.callbacks.focus) {
575
+ renderer.entryButton.addEventListener("focus", options.entryButton.callbacks.focus);
576
+ }
577
+ renderer.wrapper.appendChild(renderer.entryButton);
578
+ }
579
+ renderer.root.appendChild(renderer.wrapper);
580
+ if (options.exitElement && options.exitElement.include) {
581
+ renderer.exitElement = document.createElement("div");
582
+ renderer.exitElement.id = "dn-exit-" + options.suffixId;
583
+ renderer.exitElement.classList.add("dn-exit-position");
584
+ renderer.exitElement.innerText = "End of data structure.";
585
+ renderer.exitElement.setAttribute("aria-label", "End of data structure.");
586
+ renderer.exitElement.setAttribute("role", "note");
587
+ renderer.exitElement.setAttribute("tabindex", "-1");
588
+ renderer.exitElement.style.display = "none";
589
+ renderer.exitElement.addEventListener("focus", function(e) {
590
+ renderer.exitElement.style.display = "block";
591
+ renderer.clearStructure();
592
+ if (options.exitElement.callbacks && options.exitElement.callbacks.focus) {
593
+ options.exitElement.callbacks.focus(e);
594
+ }
595
+ });
596
+ renderer.exitElement.addEventListener("blur", function(e) {
597
+ renderer.exitElement.style.display = "none";
598
+ if (options.exitElement.callbacks && options.exitElement.callbacks.blur) {
599
+ options.exitElement.callbacks.blur(e);
600
+ }
601
+ });
602
+ renderer.root.appendChild(renderer.exitElement);
603
+ }
604
+ initialized = true;
605
+ return renderer.root;
606
+ };
607
+ renderer.render = function(nodeData) {
608
+ var id = nodeData.renderId;
609
+ var d = options.elementData[id];
610
+ if (!d) {
611
+ console.warn("Render data not found with renderId: ".concat(id, ". Failed to render."));
612
+ return;
613
+ }
614
+ if (!initialized) {
615
+ console.error("render() was called before initialize(), renderer must be initialized first.");
616
+ return;
617
+ }
618
+ var useExisting = false;
619
+ var existingDimensions = {};
620
+ var resolveProp = function(prop, subprop, checkExisting) {
621
+ var p1 = d[prop] || defaults[prop];
622
+ var s1 = !(checkExisting && useExisting) ? p1[subprop] : existingDimensions[subprop];
623
+ var s2 = defaults[prop][subprop];
624
+ return typeof p1 === "function" ? p1(d, nodeData.datum) : typeof s1 === "function" ? s1(d, nodeData.datum) : s1 || s2 || (!subprop ? p1 : void 0);
625
+ };
626
+ useExisting = resolveProp("existingElement", "useForDimensions");
627
+ existingDimensions = resolveProp("existingElement", "dimensions");
628
+ var width = parseFloat(resolveProp("dimensions", "width", true) || 0);
629
+ var height = parseFloat(resolveProp("dimensions", "height", true) || 0);
630
+ var x = parseFloat(resolveProp("dimensions", "x", true) || 0);
631
+ var y = parseFloat(resolveProp("dimensions", "y", true) || 0);
632
+ var node = document.createElement(resolveProp("parentSemantics", "elementType"));
633
+ var wrapperAttrs = resolveProp("parentSemantics", "attributes");
634
+ if (typeof wrapperAttrs === "object") {
635
+ Object.keys(wrapperAttrs).forEach(function(wrapperAttr) {
636
+ node.setAttribute(wrapperAttr, wrapperAttrs[wrapperAttr]);
637
+ });
638
+ }
639
+ node.setAttribute("role", resolveProp("parentSemantics", "role"));
640
+ node.id = id;
641
+ node.classList.add("dn-node");
642
+ node.classList.add(resolveProp("cssClass"));
643
+ node.style.width = width + "px";
644
+ node.style.height = height + "px";
645
+ node.style.left = x + "px";
646
+ node.style.top = y + "px";
647
+ node.setAttribute("tabindex", "-1");
648
+ var nodeText = document.createElement(resolveProp("semantics", "elementType"));
649
+ var attributes = resolveProp("semantics", "attributes");
650
+ if (typeof attributes === "object") {
651
+ Object.keys(attributes).forEach(function(attribute) {
652
+ node.setAttribute(attribute, attributes[attribute]);
653
+ });
654
+ }
655
+ nodeText.setAttribute("role", resolveProp("semantics", "role"));
656
+ nodeText.classList.add("dn-node-text");
657
+ if (d.showText) {
658
+ nodeText.innerText = d.semantics.label;
659
+ }
660
+ var label = resolveProp("semantics", "label");
661
+ if (!label) {
662
+ console.error("Accessibility error: a label must be supplied to every rendered element using semantics.label.");
663
+ }
664
+ nodeText.setAttribute("aria-label", label);
665
+ node.appendChild(nodeText);
666
+ var hasPath = resolveProp("dimensions", "path");
667
+ if (hasPath) {
668
+ var totalWidth = width + x + 10;
669
+ var totalHeight = height + y + 10;
670
+ var svg = document.createElementNS("http://www.w3.org/2000/svg", "svg");
671
+ svg.setAttribute("width", totalWidth + "");
672
+ svg.setAttribute("height", totalHeight + "");
673
+ svg.setAttribute("viewBox", "0 0 ".concat(totalWidth, " ").concat(totalHeight));
674
+ svg.style.left = -x + "";
675
+ svg.style.top = -y + "";
676
+ svg.classList.add("dn-node-svg");
677
+ svg.setAttribute("role", "presentation");
678
+ svg.setAttribute("focusable", "false");
679
+ var path = document.createElementNS("http://www.w3.org/2000/svg", "path");
680
+ path.setAttribute("d", hasPath);
681
+ path.classList.add("dn-node-path");
682
+ svg.appendChild(path);
683
+ node.appendChild(svg);
684
+ }
685
+ renderer.wrapper.appendChild(node);
686
+ return node;
687
+ };
688
+ renderer.remove = function(renderId) {
689
+ var node = document.getElementById(renderId);
690
+ if (node) {
691
+ node.remove();
692
+ }
693
+ };
694
+ renderer.clearStructure = function() {
695
+ _to_consumable_array(renderer.wrapper.children).forEach(function(child) {
696
+ if (!(renderer.entryButton && renderer.entryButton === child)) {
697
+ renderer.remove(child.id);
698
+ }
699
+ });
700
+ };
701
+ return renderer;
702
+ };
703
+ // src/index.ts
704
+ var src_default = {
705
+ structure: structure_default,
706
+ input: input_default,
707
+ rendering: rendering_default
708
+ };