data-navigator 1.0.2 → 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.
File without changes
File without changes
package/dist/index.js CHANGED
@@ -523,6 +523,12 @@ var input_default = function(options) {
523
523
  };
524
524
  // src/rendering.ts
525
525
  var rendering_default = function(options) {
526
+ var setActiveDescendant = function(e) {
527
+ renderer.wrapper.setAttribute("aria-activedescendant", e.srcElement.id);
528
+ };
529
+ var removeActiveDescendant = function() {
530
+ renderer.wrapper.setAttribute("aria-activedescendant", "");
531
+ };
526
532
  var renderer = {};
527
533
  var initialized = false;
528
534
  var defaults = {
@@ -559,6 +565,9 @@ var rendering_default = function(options) {
559
565
  }
560
566
  renderer.wrapper = document.createElement("div");
561
567
  renderer.wrapper.id = "dn-wrapper-" + options.suffixId;
568
+ renderer.wrapper.setAttribute("role", "application");
569
+ renderer.wrapper.setAttribute("aria-label", options.root.description || "Data navigation structure");
570
+ renderer.wrapper.setAttribute("aria-activedescendant", "");
562
571
  renderer.wrapper.classList.add("dn-wrapper");
563
572
  renderer.wrapper.style.width = options.root && options.root.width ? options.root.width : "100%";
564
573
  if (options.root && options.root.height) {
@@ -647,7 +656,9 @@ var rendering_default = function(options) {
647
656
  node.style.height = height + "px";
648
657
  node.style.left = x + "px";
649
658
  node.style.top = y + "px";
650
- node.setAttribute("tabindex", "-1");
659
+ node.setAttribute("tabindex", "0");
660
+ node.addEventListener("focus", setActiveDescendant);
661
+ node.addEventListener("blur", removeActiveDescendant);
651
662
  var nodeText = document.createElement(resolveProp("semantics", "elementType"));
652
663
  var attributes = resolveProp("semantics", "attributes");
653
664
  if (typeof attributes === "object") {
@@ -690,7 +701,12 @@ var rendering_default = function(options) {
690
701
  };
691
702
  renderer.remove = function(renderId) {
692
703
  var node = document.getElementById(renderId);
704
+ if (renderer.wrapper.getAttribute("aria-activedescendant") === renderId) {
705
+ renderer.wrapper.setAttribute("aria-activedescendant", "");
706
+ }
693
707
  if (node) {
708
+ node.removeEventListener("focus", setActiveDescendant);
709
+ node.removeEventListener("blur", removeActiveDescendant);
694
710
  node.remove();
695
711
  }
696
712
  };
package/dist/index.mjs CHANGED
@@ -393,6 +393,12 @@ var input_default = (options) => {
393
393
 
394
394
  // src/rendering.ts
395
395
  var rendering_default = (options) => {
396
+ const setActiveDescendant = (e) => {
397
+ renderer.wrapper.setAttribute("aria-activedescendant", e.srcElement.id);
398
+ };
399
+ const removeActiveDescendant = () => {
400
+ renderer.wrapper.setAttribute("aria-activedescendant", "");
401
+ };
396
402
  let renderer = {};
397
403
  let initialized = false;
398
404
  let defaults = {
@@ -432,6 +438,9 @@ var rendering_default = (options) => {
432
438
  }
433
439
  renderer.wrapper = document.createElement("div");
434
440
  renderer.wrapper.id = "dn-wrapper-" + options.suffixId;
441
+ renderer.wrapper.setAttribute("role", "application");
442
+ renderer.wrapper.setAttribute("aria-label", options.root.description || "Data navigation structure");
443
+ renderer.wrapper.setAttribute("aria-activedescendant", "");
435
444
  renderer.wrapper.classList.add("dn-wrapper");
436
445
  renderer.wrapper.style.width = options.root && options.root.width ? options.root.width : "100%";
437
446
  if (options.root && options.root.height) {
@@ -518,7 +527,9 @@ var rendering_default = (options) => {
518
527
  node.style.height = height + "px";
519
528
  node.style.left = x + "px";
520
529
  node.style.top = y + "px";
521
- node.setAttribute("tabindex", "-1");
530
+ node.setAttribute("tabindex", "0");
531
+ node.addEventListener("focus", setActiveDescendant);
532
+ node.addEventListener("blur", removeActiveDescendant);
522
533
  const nodeText = document.createElement(resolveProp("semantics", "elementType"));
523
534
  const attributes = resolveProp("semantics", "attributes");
524
535
  if (typeof attributes === "object") {
@@ -563,7 +574,12 @@ var rendering_default = (options) => {
563
574
  };
564
575
  renderer.remove = (renderId) => {
565
576
  const node = document.getElementById(renderId);
577
+ if (renderer.wrapper.getAttribute("aria-activedescendant") === renderId) {
578
+ renderer.wrapper.setAttribute("aria-activedescendant", "");
579
+ }
566
580
  if (node) {
581
+ node.removeEventListener("focus", setActiveDescendant);
582
+ node.removeEventListener("blur", removeActiveDescendant);
567
583
  node.remove();
568
584
  }
569
585
  };
package/dist/rendering.js CHANGED
@@ -1 +1 @@
1
- function e(e,t){if(t==null||t>e.length)t=e.length;for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function t(t){if(Array.isArray(t))return e(t)}function n(e,t,n){if(t in e){Object.defineProperty(e,t,{value:n,enumerable:true,configurable:true,writable:true})}else{e[t]=n}return e}function r(e){if(typeof Symbol!=="undefined"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function i(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function o(e){for(var t=1;t<arguments.length;t++){var r=arguments[t]!=null?arguments[t]:{};var i=Object.keys(r);if(typeof Object.getOwnPropertySymbols==="function"){i=i.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))}i.forEach(function(t){n(e,t,r[t])})}return e}function s(e){return t(e)||r(e)||a(e)||i()}function a(t,n){if(!t)return;if(typeof t==="string")return e(t,n);var r=Object.prototype.toString.call(t).slice(8,-1);if(r==="Object"&&t.constructor)r=t.constructor.name;if(r==="Map"||r==="Set")return Array.from(r);if(r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return e(t,n)}var l=Object.defineProperty;var u=Object.getOwnPropertyDescriptor;var c=Object.getOwnPropertyNames;var d=Object.prototype.hasOwnProperty;var m=function(e,t){for(var n in t)l(e,n,{get:t[n],enumerable:!0})},f=function(e,t,n,r){var i=true,o=false,s=undefined;if(t&&typeof t=="object"||typeof t=="function")try{var a=function(){var i=f.value;!d.call(e,i)&&i!==n&&l(e,i,{get:function(){return t[i]},enumerable:!(r=u(t,i))||r.enumerable})};for(var m=c(t)[Symbol.iterator](),f;!(i=(f=m.next()).done);i=true)a()}catch(e){o=true;s=e}finally{try{if(!i&&m.return!=null){m.return()}}finally{if(o){throw s}}}return e};var p=function(e){return f(l({},"__esModule",{value:!0}),e)};var b={};m(b,{default:function(){return v}});module.exports=p(b);var y={cssClass:"",dimensions:{x:0,y:0,width:0,height:0,path:""},semantics:{label:"",elementType:"div",role:"image",attributes:void 0},parentSemantics:{label:"",elementType:"figure",role:"figure",attributes:void 0},existingElement:{useForDimensions:!1,dimensions:void 0}};var v=function(e){var t={},n=!1,r={cssClass:y.cssClass,dimensions:o({},y.dimensions),semantics:o({},y.semantics),parentSemantics:o({},y.parentSemantics),existingElement:o({},y.existingElement)};return e.defaults&&(r.cssClass=e.defaults.cssClass||r.cssClass,r.dimensions=e.defaults.dimensions?o({},r.dimensions,e.defaults.dimensions):r.dimensions,r.semantics=e.defaults.semantics?o({},r.semantics,e.defaults.semantics):r.semantics,r.parentSemantics=e.defaults.parentSemantics?o({},r.parentSemantics,e.defaults.parentSemantics):r.parentSemantics,r.existingElement=e.defaults.existingElement?o({},r.existingElement,e.defaults.existingElement):r.existingElement),t.initialize=function(){var r;if(n){console.error("The renderer wrapper has already been initialized successfully, RenderingOptions.suffixId is: ".concat(e.suffixId,". No further action was taken."));return}if(e.root&&document.getElementById(e.root.id))t.root=document.getElementById(e.root.id);else{console.error("No root element found, cannot build: RenderingOptions.root.id must reference an existing DOM element in order to render children.");return}if(t.root.style.position="relative",t.root.classList.add("dn-root"),!e.suffixId){console.error("No suffix id found: options.suffixId must be specified.");return}return t.wrapper=document.createElement("div"),t.wrapper.id="dn-wrapper-"+e.suffixId,t.wrapper.classList.add("dn-wrapper"),t.wrapper.style.width=e.root&&e.root.width?e.root.width:"100%",e.root&&e.root.height&&(t.wrapper.style.height=e.root.height),e.entryButton&&e.entryButton.include&&(t.entryButton=document.createElement("button"),t.entryButton.id="dn-entry-button-"+e.suffixId,t.entryButton.classList.add("dn-entry-button"),t.entryButton.innerText="Enter navigation area",e.entryButton.callbacks&&e.entryButton.callbacks.click&&t.entryButton.addEventListener("click",e.entryButton.callbacks.click),e.entryButton.callbacks&&e.entryButton.callbacks.focus&&t.entryButton.addEventListener("focus",e.entryButton.callbacks.focus),t.wrapper.appendChild(t.entryButton)),t.root.appendChild(t.wrapper),((r=e.exitElement)===null||r===void 0?void 0:r.include)&&(t.exitElement=document.createElement("div"),t.exitElement.id="dn-exit-"+e.suffixId,t.exitElement.classList.add("dn-exit-position"),t.exitElement.innerText="End of data structure.",t.exitElement.setAttribute("aria-label","End of data structure."),t.exitElement.setAttribute("role","note"),t.exitElement.setAttribute("tabindex","-1"),t.exitElement.style.display="none",t.exitElement.addEventListener("focus",function(n){var r,i;t.exitElement.style.display="block",t.clearStructure(),((i=e.exitElement)===null||i===void 0?void 0:(r=i.callbacks)===null||r===void 0?void 0:r.focus)&&e.exitElement.callbacks.focus(n)}),t.exitElement.addEventListener("blur",function(n){var r,i;t.exitElement.style.display="none",((i=e.exitElement)===null||i===void 0?void 0:(r=i.callbacks)===null||r===void 0?void 0:r.blur)&&e.exitElement.callbacks.blur(n)}),t.root.appendChild(t.exitElement)),n=!0,t.root},t.render=function(i){var o=i.renderId+"",s=e.elementData[o];if(!s){console.warn("Render data not found with renderId: ".concat(o,". Failed to render."));return}if(!n){console.error("render() was called before initialize(), renderer must be initialized first.");return}var a=!1,l={},u=function(e,t,n){var o=s[e]||r[e],u=n&&a?l[t]:o[t],c=r[e][t];return typeof o=="function"?o(s,i.datum):typeof u=="function"?u(s,i.datum):u||c||(t?void 0:o)};a=u("existingElement","useForDimensions"),l=u("existingElement","dimensions");var c=parseFloat(u("dimensions","width",!0)||0),d=parseFloat(u("dimensions","height",!0)||0),m=parseFloat(u("dimensions","x",!0)||0),f=parseFloat(u("dimensions","y",!0)||0),p=document.createElement(u("parentSemantics","elementType")),b=u("parentSemantics","attributes");typeof b=="object"&&Object.keys(b).forEach(function(e){p.setAttribute(e,b[e])}),p.setAttribute("role",u("parentSemantics","role")),p.id=o,p.classList.add("dn-node"),p.classList.add(u("cssClass")),p.style.width=c+"px",p.style.height=d+"px",p.style.left=m+"px",p.style.top=f+"px",p.setAttribute("tabindex","-1");var y=document.createElement(u("semantics","elementType")),v=u("semantics","attributes");typeof v=="object"&&Object.keys(v).forEach(function(e){p.setAttribute(e,v[e])}),y.setAttribute("role",u("semantics","role")),y.classList.add("dn-node-text"),s.showText&&(y.innerText=s.semantics.label);var x=u("semantics","label");x||console.error("Accessibility error: a label must be supplied to every rendered element using semantics.label."),y.setAttribute("aria-label",x),p.appendChild(y);var h=u("dimensions","path");if(h){var E=c+m+10,g=d+f+10,w=document.createElementNS("http://www.w3.org/2000/svg","svg");w.setAttribute("width",E+""),w.setAttribute("height",g+""),w.setAttribute("viewBox","0 0 ".concat(E," ").concat(g)),w.style.left=-m+"px",w.style.top=-f+"px",w.classList.add("dn-node-svg"),w.setAttribute("role","presentation"),w.setAttribute("focusable","false");var A=document.createElementNS("http://www.w3.org/2000/svg","path");A.setAttribute("d",h),A.classList.add("dn-node-path"),w.appendChild(A),p.appendChild(w)}return t.wrapper.appendChild(p),p},t.remove=function(e){var t=document.getElementById(e);t&&t.remove()},t.clearStructure=function(){s(t.wrapper.children).forEach(function(e){t.entryButton&&t.entryButton===e||t.remove(e.id)})},t};
1
+ function e(e,t){if(t==null||t>e.length)t=e.length;for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function t(t){if(Array.isArray(t))return e(t)}function n(e,t,n){if(t in e){Object.defineProperty(e,t,{value:n,enumerable:true,configurable:true,writable:true})}else{e[t]=n}return e}function r(e){if(typeof Symbol!=="undefined"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function i(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function a(e){for(var t=1;t<arguments.length;t++){var r=arguments[t]!=null?arguments[t]:{};var i=Object.keys(r);if(typeof Object.getOwnPropertySymbols==="function"){i=i.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))}i.forEach(function(t){n(e,t,r[t])})}return e}function s(e){return t(e)||r(e)||o(e)||i()}function o(t,n){if(!t)return;if(typeof t==="string")return e(t,n);var r=Object.prototype.toString.call(t).slice(8,-1);if(r==="Object"&&t.constructor)r=t.constructor.name;if(r==="Map"||r==="Set")return Array.from(r);if(r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return e(t,n)}var l=Object.defineProperty;var u=Object.getOwnPropertyDescriptor;var c=Object.getOwnPropertyNames;var d=Object.prototype.hasOwnProperty;var f=function(e,t){for(var n in t)l(e,n,{get:t[n],enumerable:!0})},m=function(e,t,n,r){var i=true,a=false,s=undefined;if(t&&typeof t=="object"||typeof t=="function")try{var o=function(){var i=m.value;!d.call(e,i)&&i!==n&&l(e,i,{get:function(){return t[i]},enumerable:!(r=u(t,i))||r.enumerable})};for(var f=c(t)[Symbol.iterator](),m;!(i=(m=f.next()).done);i=true)o()}catch(e){a=true;s=e}finally{try{if(!i&&f.return!=null){f.return()}}finally{if(a){throw s}}}return e};var p=function(e){return m(l({},"__esModule",{value:!0}),e)};var b={};f(b,{default:function(){return v}});module.exports=p(b);var y={cssClass:"",dimensions:{x:0,y:0,width:0,height:0,path:""},semantics:{label:"",elementType:"div",role:"image",attributes:void 0},parentSemantics:{label:"",elementType:"figure",role:"figure",attributes:void 0},existingElement:{useForDimensions:!1,dimensions:void 0}};var v=function(e){var t=function(e){r.wrapper.setAttribute("aria-activedescendant",e.srcElement.id)},n=function(){r.wrapper.setAttribute("aria-activedescendant","")},r={},i=!1,o={cssClass:y.cssClass,dimensions:a({},y.dimensions),semantics:a({},y.semantics),parentSemantics:a({},y.parentSemantics),existingElement:a({},y.existingElement)};return e.defaults&&(o.cssClass=e.defaults.cssClass||o.cssClass,o.dimensions=e.defaults.dimensions?a({},o.dimensions,e.defaults.dimensions):o.dimensions,o.semantics=e.defaults.semantics?a({},o.semantics,e.defaults.semantics):o.semantics,o.parentSemantics=e.defaults.parentSemantics?a({},o.parentSemantics,e.defaults.parentSemantics):o.parentSemantics,o.existingElement=e.defaults.existingElement?a({},o.existingElement,e.defaults.existingElement):o.existingElement),r.initialize=function(){var t;if(i){console.error("The renderer wrapper has already been initialized successfully, RenderingOptions.suffixId is: ".concat(e.suffixId,". No further action was taken."));return}if(e.root&&document.getElementById(e.root.id))r.root=document.getElementById(e.root.id);else{console.error("No root element found, cannot build: RenderingOptions.root.id must reference an existing DOM element in order to render children.");return}if(r.root.style.position="relative",r.root.classList.add("dn-root"),!e.suffixId){console.error("No suffix id found: options.suffixId must be specified.");return}return r.wrapper=document.createElement("div"),r.wrapper.id="dn-wrapper-"+e.suffixId,r.wrapper.setAttribute("role","application"),r.wrapper.setAttribute("aria-label",e.root.description||"Data navigation structure"),r.wrapper.setAttribute("aria-activedescendant",""),r.wrapper.classList.add("dn-wrapper"),r.wrapper.style.width=e.root&&e.root.width?e.root.width:"100%",e.root&&e.root.height&&(r.wrapper.style.height=e.root.height),e.entryButton&&e.entryButton.include&&(r.entryButton=document.createElement("button"),r.entryButton.id="dn-entry-button-"+e.suffixId,r.entryButton.classList.add("dn-entry-button"),r.entryButton.innerText="Enter navigation area",e.entryButton.callbacks&&e.entryButton.callbacks.click&&r.entryButton.addEventListener("click",e.entryButton.callbacks.click),e.entryButton.callbacks&&e.entryButton.callbacks.focus&&r.entryButton.addEventListener("focus",e.entryButton.callbacks.focus),r.wrapper.appendChild(r.entryButton)),r.root.appendChild(r.wrapper),((t=e.exitElement)===null||t===void 0?void 0:t.include)&&(r.exitElement=document.createElement("div"),r.exitElement.id="dn-exit-"+e.suffixId,r.exitElement.classList.add("dn-exit-position"),r.exitElement.innerText="End of data structure.",r.exitElement.setAttribute("aria-label","End of data structure."),r.exitElement.setAttribute("role","note"),r.exitElement.setAttribute("tabindex","-1"),r.exitElement.style.display="none",r.exitElement.addEventListener("focus",function(t){var n,i;r.exitElement.style.display="block",r.clearStructure(),((i=e.exitElement)===null||i===void 0?void 0:(n=i.callbacks)===null||n===void 0?void 0:n.focus)&&e.exitElement.callbacks.focus(t)}),r.exitElement.addEventListener("blur",function(t){var n,i;r.exitElement.style.display="none",((i=e.exitElement)===null||i===void 0?void 0:(n=i.callbacks)===null||n===void 0?void 0:n.blur)&&e.exitElement.callbacks.blur(t)}),r.root.appendChild(r.exitElement)),i=!0,r.root},r.render=function(a){var s=a.renderId+"",l=e.elementData[s];if(!l){console.warn("Render data not found with renderId: ".concat(s,". Failed to render."));return}if(!i){console.error("render() was called before initialize(), renderer must be initialized first.");return}var u=!1,c={},d=function(e,t,n){var r=l[e]||o[e],i=n&&u?c[t]:r[t],s=o[e][t];return typeof r=="function"?r(l,a.datum):typeof i=="function"?i(l,a.datum):i||s||(t?void 0:r)};u=d("existingElement","useForDimensions"),c=d("existingElement","dimensions");var f=parseFloat(d("dimensions","width",!0)||0),m=parseFloat(d("dimensions","height",!0)||0),p=parseFloat(d("dimensions","x",!0)||0),b=parseFloat(d("dimensions","y",!0)||0),y=document.createElement(d("parentSemantics","elementType")),v=d("parentSemantics","attributes");typeof v=="object"&&Object.keys(v).forEach(function(e){y.setAttribute(e,v[e])}),y.setAttribute("role",d("parentSemantics","role")),y.id=s,y.classList.add("dn-node"),y.classList.add(d("cssClass")),y.style.width=f+"px",y.style.height=m+"px",y.style.left=p+"px",y.style.top=b+"px",y.setAttribute("tabindex","0"),y.addEventListener("focus",t),y.addEventListener("blur",n);var x=document.createElement(d("semantics","elementType")),E=d("semantics","attributes");typeof E=="object"&&Object.keys(E).forEach(function(e){y.setAttribute(e,E[e])}),x.setAttribute("role",d("semantics","role")),x.classList.add("dn-node-text"),l.showText&&(x.innerText=l.semantics.label);var h=d("semantics","label");h||console.error("Accessibility error: a label must be supplied to every rendered element using semantics.label."),x.setAttribute("aria-label",h),y.appendChild(x);var w=d("dimensions","path");if(w){var g=f+p+10,A=m+b+10,S=document.createElementNS("http://www.w3.org/2000/svg","svg");S.setAttribute("width",g+""),S.setAttribute("height",A+""),S.setAttribute("viewBox","0 0 ".concat(g," ").concat(A)),S.style.left=-p+"px",S.style.top=-b+"px",S.classList.add("dn-node-svg"),S.setAttribute("role","presentation"),S.setAttribute("focusable","false");var O=document.createElementNS("http://www.w3.org/2000/svg","path");O.setAttribute("d",w),O.classList.add("dn-node-path"),S.appendChild(O),y.appendChild(S)}return r.wrapper.appendChild(y),y},r.remove=function(e){var i=document.getElementById(e);r.wrapper.getAttribute("aria-activedescendant")===e&&r.wrapper.setAttribute("aria-activedescendant",""),i&&(i.removeEventListener("focus",t),i.removeEventListener("blur",n),i.remove())},r.clearStructure=function(){s(r.wrapper.children).forEach(function(e){r.entryButton&&r.entryButton===e||r.remove(e.id)})},r};
@@ -1 +1 @@
1
- import{d as m}from"./chunk-GP5LYFFJ.mjs";var L=t=>{let e={},x=!1,n={cssClass:m.cssClass,dimensions:{...m.dimensions},semantics:{...m.semantics},parentSemantics:{...m.parentSemantics},existingElement:{...m.existingElement}};return t.defaults&&(n.cssClass=t.defaults.cssClass||n.cssClass,n.dimensions=t.defaults.dimensions?{...n.dimensions,...t.defaults.dimensions}:n.dimensions,n.semantics=t.defaults.semantics?{...n.semantics,...t.defaults.semantics}:n.semantics,n.parentSemantics=t.defaults.parentSemantics?{...n.parentSemantics,...t.defaults.parentSemantics}:n.parentSemantics,n.existingElement=t.defaults.existingElement?{...n.existingElement,...t.defaults.existingElement}:n.existingElement),e.initialize=()=>{if(x){console.error(`The renderer wrapper has already been initialized successfully, RenderingOptions.suffixId is: ${t.suffixId}. No further action was taken.`);return}if(t.root&&document.getElementById(t.root.id))e.root=document.getElementById(t.root.id);else{console.error("No root element found, cannot build: RenderingOptions.root.id must reference an existing DOM element in order to render children.");return}if(e.root.style.position="relative",e.root.classList.add("dn-root"),!t.suffixId){console.error("No suffix id found: options.suffixId must be specified.");return}return e.wrapper=document.createElement("div"),e.wrapper.id="dn-wrapper-"+t.suffixId,e.wrapper.classList.add("dn-wrapper"),e.wrapper.style.width=t.root&&t.root.width?t.root.width:"100%",t.root&&t.root.height&&(e.wrapper.style.height=t.root.height),t.entryButton&&t.entryButton.include&&(e.entryButton=document.createElement("button"),e.entryButton.id="dn-entry-button-"+t.suffixId,e.entryButton.classList.add("dn-entry-button"),e.entryButton.innerText="Enter navigation area",t.entryButton.callbacks&&t.entryButton.callbacks.click&&e.entryButton.addEventListener("click",t.entryButton.callbacks.click),t.entryButton.callbacks&&t.entryButton.callbacks.focus&&e.entryButton.addEventListener("focus",t.entryButton.callbacks.focus),e.wrapper.appendChild(e.entryButton)),e.root.appendChild(e.wrapper),t.exitElement?.include&&(e.exitElement=document.createElement("div"),e.exitElement.id="dn-exit-"+t.suffixId,e.exitElement.classList.add("dn-exit-position"),e.exitElement.innerText="End of data structure.",e.exitElement.setAttribute("aria-label","End of data structure."),e.exitElement.setAttribute("role","note"),e.exitElement.setAttribute("tabindex","-1"),e.exitElement.style.display="none",e.exitElement.addEventListener("focus",r=>{e.exitElement.style.display="block",e.clearStructure(),t.exitElement?.callbacks?.focus&&t.exitElement.callbacks.focus(r)}),e.exitElement.addEventListener("blur",r=>{e.exitElement.style.display="none",t.exitElement?.callbacks?.blur&&t.exitElement.callbacks.blur(r)}),e.root.appendChild(e.exitElement)),x=!0,e.root},e.render=r=>{let o=r.renderId+"",u=t.elementData[o];if(!u){console.warn(`Render data not found with renderId: ${o}. Failed to render.`);return}if(!x){console.error("render() was called before initialize(), renderer must be initialized first.");return}let g=!1,w={},s=(a,c,l)=>{let d=u[a]||n[a],p=l&&g?w[c]:d[c],S=n[a][c];return typeof d=="function"?d(u,r.datum):typeof p=="function"?p(u,r.datum):p||S||(c?void 0:d)};g=s("existingElement","useForDimensions"),w=s("existingElement","dimensions");let B=parseFloat(s("dimensions","width",!0)||0),v=parseFloat(s("dimensions","height",!0)||0),b=parseFloat(s("dimensions","x",!0)||0),y=parseFloat(s("dimensions","y",!0)||0),i=document.createElement(s("parentSemantics","elementType")),E=s("parentSemantics","attributes");typeof E=="object"&&Object.keys(E).forEach(a=>{i.setAttribute(a,E[a])}),i.setAttribute("role",s("parentSemantics","role")),i.id=o,i.classList.add("dn-node"),i.classList.add(s("cssClass")),i.style.width=B+"px",i.style.height=v+"px",i.style.left=b+"px",i.style.top=y+"px",i.setAttribute("tabindex","-1");let f=document.createElement(s("semantics","elementType")),h=s("semantics","attributes");typeof h=="object"&&Object.keys(h).forEach(a=>{i.setAttribute(a,h[a])}),f.setAttribute("role",s("semantics","role")),f.classList.add("dn-node-text"),u.showText&&(f.innerText=u.semantics.label);let k=s("semantics","label");k||console.error("Accessibility error: a label must be supplied to every rendered element using semantics.label."),f.setAttribute("aria-label",k),i.appendChild(f);let A=s("dimensions","path");if(A){let a=B+b+10,c=v+y+10,l=document.createElementNS("http://www.w3.org/2000/svg","svg");l.setAttribute("width",a+""),l.setAttribute("height",c+""),l.setAttribute("viewBox",`0 0 ${a} ${c}`),l.style.left=-b+"px",l.style.top=-y+"px",l.classList.add("dn-node-svg"),l.setAttribute("role","presentation"),l.setAttribute("focusable","false");let d=document.createElementNS("http://www.w3.org/2000/svg","path");d.setAttribute("d",A),d.classList.add("dn-node-path"),l.appendChild(d),i.appendChild(l)}return e.wrapper.appendChild(i),i},e.remove=r=>{let o=document.getElementById(r);o&&o.remove()},e.clearStructure=()=>{[...e.wrapper.children].forEach(r=>{e.entryButton&&e.entryButton===r||e.remove(r.id)})},e};export{L as default};
1
+ import{d as m}from"./chunk-GP5LYFFJ.mjs";var T=t=>{let w=r=>{e.wrapper.setAttribute("aria-activedescendant",r.srcElement.id)},g=()=>{e.wrapper.setAttribute("aria-activedescendant","")},e={},b=!1,s={cssClass:m.cssClass,dimensions:{...m.dimensions},semantics:{...m.semantics},parentSemantics:{...m.parentSemantics},existingElement:{...m.existingElement}};return t.defaults&&(s.cssClass=t.defaults.cssClass||s.cssClass,s.dimensions=t.defaults.dimensions?{...s.dimensions,...t.defaults.dimensions}:s.dimensions,s.semantics=t.defaults.semantics?{...s.semantics,...t.defaults.semantics}:s.semantics,s.parentSemantics=t.defaults.parentSemantics?{...s.parentSemantics,...t.defaults.parentSemantics}:s.parentSemantics,s.existingElement=t.defaults.existingElement?{...s.existingElement,...t.defaults.existingElement}:s.existingElement),e.initialize=()=>{if(b){console.error(`The renderer wrapper has already been initialized successfully, RenderingOptions.suffixId is: ${t.suffixId}. No further action was taken.`);return}if(t.root&&document.getElementById(t.root.id))e.root=document.getElementById(t.root.id);else{console.error("No root element found, cannot build: RenderingOptions.root.id must reference an existing DOM element in order to render children.");return}if(e.root.style.position="relative",e.root.classList.add("dn-root"),!t.suffixId){console.error("No suffix id found: options.suffixId must be specified.");return}return e.wrapper=document.createElement("div"),e.wrapper.id="dn-wrapper-"+t.suffixId,e.wrapper.setAttribute("role","application"),e.wrapper.setAttribute("aria-label",t.root.description||"Data navigation structure"),e.wrapper.setAttribute("aria-activedescendant",""),e.wrapper.classList.add("dn-wrapper"),e.wrapper.style.width=t.root&&t.root.width?t.root.width:"100%",t.root&&t.root.height&&(e.wrapper.style.height=t.root.height),t.entryButton&&t.entryButton.include&&(e.entryButton=document.createElement("button"),e.entryButton.id="dn-entry-button-"+t.suffixId,e.entryButton.classList.add("dn-entry-button"),e.entryButton.innerText="Enter navigation area",t.entryButton.callbacks&&t.entryButton.callbacks.click&&e.entryButton.addEventListener("click",t.entryButton.callbacks.click),t.entryButton.callbacks&&t.entryButton.callbacks.focus&&e.entryButton.addEventListener("focus",t.entryButton.callbacks.focus),e.wrapper.appendChild(e.entryButton)),e.root.appendChild(e.wrapper),t.exitElement?.include&&(e.exitElement=document.createElement("div"),e.exitElement.id="dn-exit-"+t.suffixId,e.exitElement.classList.add("dn-exit-position"),e.exitElement.innerText="End of data structure.",e.exitElement.setAttribute("aria-label","End of data structure."),e.exitElement.setAttribute("role","note"),e.exitElement.setAttribute("tabindex","-1"),e.exitElement.style.display="none",e.exitElement.addEventListener("focus",r=>{e.exitElement.style.display="block",e.clearStructure(),t.exitElement?.callbacks?.focus&&t.exitElement.callbacks.focus(r)}),e.exitElement.addEventListener("blur",r=>{e.exitElement.style.display="none",t.exitElement?.callbacks?.blur&&t.exitElement.callbacks.blur(r)}),e.root.appendChild(e.exitElement)),b=!0,e.root},e.render=r=>{let d=r.renderId+"",u=t.elementData[d];if(!u){console.warn(`Render data not found with renderId: ${d}. Failed to render.`);return}if(!b){console.error("render() was called before initialize(), renderer must be initialized first.");return}let v=!1,A={},i=(a,o,l)=>{let c=u[a]||s[a],h=l&&v?A[o]:c[o],C=s[a][o];return typeof c=="function"?c(u,r.datum):typeof h=="function"?h(u,r.datum):h||C||(o?void 0:c)};v=i("existingElement","useForDimensions"),A=i("existingElement","dimensions");let B=parseFloat(i("dimensions","width",!0)||0),k=parseFloat(i("dimensions","height",!0)||0),p=parseFloat(i("dimensions","x",!0)||0),x=parseFloat(i("dimensions","y",!0)||0),n=document.createElement(i("parentSemantics","elementType")),E=i("parentSemantics","attributes");typeof E=="object"&&Object.keys(E).forEach(a=>{n.setAttribute(a,E[a])}),n.setAttribute("role",i("parentSemantics","role")),n.id=d,n.classList.add("dn-node"),n.classList.add(i("cssClass")),n.style.width=B+"px",n.style.height=k+"px",n.style.left=p+"px",n.style.top=x+"px",n.setAttribute("tabindex","0"),n.addEventListener("focus",w),n.addEventListener("blur",g);let f=document.createElement(i("semantics","elementType")),y=i("semantics","attributes");typeof y=="object"&&Object.keys(y).forEach(a=>{n.setAttribute(a,y[a])}),f.setAttribute("role",i("semantics","role")),f.classList.add("dn-node-text"),u.showText&&(f.innerText=u.semantics.label);let L=i("semantics","label");L||console.error("Accessibility error: a label must be supplied to every rendered element using semantics.label."),f.setAttribute("aria-label",L),n.appendChild(f);let S=i("dimensions","path");if(S){let a=B+p+10,o=k+x+10,l=document.createElementNS("http://www.w3.org/2000/svg","svg");l.setAttribute("width",a+""),l.setAttribute("height",o+""),l.setAttribute("viewBox",`0 0 ${a} ${o}`),l.style.left=-p+"px",l.style.top=-x+"px",l.classList.add("dn-node-svg"),l.setAttribute("role","presentation"),l.setAttribute("focusable","false");let c=document.createElementNS("http://www.w3.org/2000/svg","path");c.setAttribute("d",S),c.classList.add("dn-node-path"),l.appendChild(c),n.appendChild(l)}return e.wrapper.appendChild(n),n},e.remove=r=>{let d=document.getElementById(r);e.wrapper.getAttribute("aria-activedescendant")===r&&e.wrapper.setAttribute("aria-activedescendant",""),d&&(d.removeEventListener("focus",w),d.removeEventListener("blur",g),d.remove())},e.clearStructure=()=>{[...e.wrapper.children].forEach(r=>{e.entryButton&&e.entryButton===r||e.remove(r.id)})},e};export{T as default};
package/package.json CHANGED
@@ -1,21 +1,21 @@
1
1
  {
2
2
  "name": "data-navigator",
3
3
  "author": "Frank Elavsky",
4
- "version": "1.0.2",
5
- "main": "dist/index.jsm",
6
- "module": "dist/index",
7
- "types": "data-navigator.d.ts",
4
+ "version": "1.2.0",
5
+ "main": "./dist/index.jsm",
6
+ "module": "./dist/index",
7
+ "types": "./dist/data-navigator.d.ts",
8
8
  "files": [
9
9
  "dist/**/*"
10
10
  ],
11
11
  "exports": {
12
12
  ".": {
13
13
  "import": {
14
- "types": "./data-navigator.d.ts",
14
+ "types": "./dist/data-navigator.d.ts",
15
15
  "default": "./dist/index.js"
16
16
  },
17
17
  "require": {
18
- "types": "./data-navigator.d.ts",
18
+ "types": "./dist/data-navigator.d.ts",
19
19
  "default": "./dist/index.mjs"
20
20
  }
21
21
  }
@@ -29,9 +29,10 @@
29
29
  "description": "Data-navigator is a JavaScript library that allows for serial navigation of data structures using a variety of input modalities and assistive technologies.",
30
30
  "scripts": {
31
31
  "clean": "rm -rf ./dist && rm -rf ./app",
32
- "build": "yarn build:app && yarn build:index && yarn build:modules",
32
+ "build": "yarn build:app && yarn build:index && yarn build:types && yarn build:modules",
33
33
  "build:app": "webpack",
34
34
  "build:index": "tsup src/index.ts --format cjs,esm",
35
+ "build:types": "tsup data-navigator.d.ts --format cjs,esm",
35
36
  "build:modules": "tsup src/structure.ts src/input.ts src/rendering.ts src/utilities.ts src/consts.ts --format cjs,esm --minify",
36
37
  "server": "python -m http.server",
37
38
  "prettier-all-check": "prettier --config ./.prettierrc --ignore ./.prettierignore --debug-check \"**/*.{js,jsx,ts,tsx,html,jsx,json,css,scss,md}\"",