it-data-nexus-ui-library 2.10.9 → 2.10.11

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.
@@ -1 +1 @@
1
- const e=1e3,t=/^[a-z][a-z0-9-]{1,31}$/,s=/^[a-zA-Z][a-zA-Z0-9]{0,31}$/,n=/^\d+\.\d+\.\d+$/,i=/[a-z][a-z0-9+.-]*:\/\/|www\.|\b(?:mailto|data|javascript|vbscript|file|tel|sms):/i,r=["schemaVersion","chartType","title","description","config","data"],a=["valueFormat","xAxis","yAxis"],o=["chartType","version","description","dataItem","configKeys","limits","example","component","lazy"],m=e=>null!==e&&"object"==typeof e&&!Array.isArray(e),u=(e,t)=>Object.keys(e).filter(e=>!t.includes(e)),p=(e,t,s)=>{if("number"===t.type)return"number"==typeof s&&Number.isFinite(s)?void 0!==t.minimum&&s<t.minimum?[`${e} must be >= ${t.minimum}`]:[]:[`${e} must be a finite number`];if("string"!=typeof s||""===s.trim())return[`${e} must be a non-blank string`];const n=[];return void 0!==t.maxLength&&s.length>t.maxLength&&n.push(`${e} must be at most ${t.maxLength} characters`),t.enum&&!t.enum.includes(s)&&n.push(`${e} must be one of ${t.enum.join(", ")}`),void 0===t.pattern||new RegExp(t.pattern).test(s)||n.push(`${e} must match ${t.pattern}`),"iso-date"===t.format&&Number.isNaN(new Date(s.trim()).getTime())&&n.push(`${e} must be a parseable date`),n},c=(e,t)=>{if(!m(t))return{valid:!1,errors:["item must be an object"]};const{properties:s,required:n}=e.dataItem,i=u(t,Object.keys(s)).map(e=>`unknown field ${e}`);for(const e of n)Object.hasOwn(t,e)||i.push(`missing required field ${e}`);for(const[e,n]of Object.entries(s))Object.hasOwn(t,e)&&i.push(...p(e,n,t[e]));return{valid:0===i.length,errors:i}},l=(e,t)=>{if(!m(t))return[`${e} must be an object`];if("number"===t.type){const s=u(t,["type","minimum"]).map(t=>`${e}.${t} is not allowed`);return void 0===t.minimum||Number.isFinite(t.minimum)||s.push(`${e}.minimum must be finite`),s}if("string"!==t.type)return[`${e}.type must be string or number`];const s=u(t,["type","maxLength","enum","pattern","format"]).map(t=>`${e}.${t} is not allowed`),{maxLength:n,enum:i,pattern:r,format:a}=t;if(void 0===n||Number.isInteger(n)&&n>0||s.push(`${e}.maxLength must be a positive integer`),void 0===i||Array.isArray(i)&&i.length>0&&i.every(e=>"string"==typeof e)||s.push(`${e}.enum must be a non-empty string array`),void 0!==r)try{if("string"!=typeof r)throw new TypeError;new RegExp(r)}catch{s.push(`${e}.pattern must be a valid regular expression`)}return void 0!==a&&"iso-date"!==a&&s.push(`${e}.format must be iso-date`),s},h=(e,t,n=[])=>{if(!m(t))return[`${e} must be an object`];const i=Object.keys(t),r=i.length>8?[`${e} has more than 8 fields`]:[];for(const a of i)s.test(a)||r.push(`${e}.${a} has an invalid name`),n.includes(a)&&r.push(`${e}.${a} is a shared envelope config key`),r.push(...l(`${e}.${a}`,t[a]));return r},d=s=>{if(!m(s))return{valid:!1,errors:["definition must be an object"]};const l=u(s,o).map(e=>`${e} is not allowed`),{chartType:d,version:f,description:b,dataItem:y,configKeys:g,limits:$,example:x,lazy:v}=s;"string"==typeof d&&t.test(d)||l.push(`chartType must match ${t}`),"string"==typeof f&&n.test(f)||l.push("version must be semver x.y.z"),"string"!=typeof b||""===b.trim()?l.push("description must be a non-blank string"):(b.length>300&&l.push("description must be at most 300 characters"),i.test(b)&&l.push("description must not contain URLs"),(b.includes("`")||b.includes("~~~"))&&l.push("description must not contain backticks or code fences"));let w=!1;if(m(y)){const e=l.length;l.push(...u(y,["properties","required"]).map(e=>`dataItem.${e} is not allowed`)),l.push(...h("dataItem.properties",y.properties));const{required:t,properties:s}=y;Array.isArray(t)&&t.every(e=>m(s)&&Object.hasOwn(s,e))?new Set(t).size!==t.length&&l.push("dataItem.required must not repeat a field"):l.push("dataItem.required must list declared properties"),w=l.length===e}else l.push("dataItem must be an object");void 0!==g&&l.push(...h("configKeys",g,a));let j=e;if(void 0!==$&&(!m($)||u($,["maxPoints"]).length>0?l.push("limits may only contain maxPoints"):void 0!==$.maxPoints&&(!Number.isInteger($.maxPoints)||$.maxPoints<1||$.maxPoints>e?l.push("limits.maxPoints must be an integer from 1 to 1000"):j=$.maxPoints)),void 0!==v&&"function"!=typeof v&&l.push("lazy must be a function"),m(x)){l.push(...u(x,r).map(e=>`example.${e} is not allowed`)),"1.0"!==x.schemaVersion&&l.push('example.schemaVersion must be "1.0"'),x.chartType!==d&&l.push("example.chartType must equal chartType"),"string"==typeof x.title&&""!==x.title.trim()||l.push("example.title is required");const e=x.config;if(m(e)&&["number","currency","percentage"].includes(e.valueFormat))if(m(g))for(const[t,s]of Object.entries(e)){if(a.includes(t))continue;const e=g[t];void 0===e?l.push(`example.config.${t} is not a declared config key`):l.push(...p(`example.config.${t}`,e,s))}else u(e,a).length>0&&l.push("example.config has undeclared config keys");else l.push("example.config.valueFormat must be number, currency or percentage");const t=x.data;!Array.isArray(t)||0===t.length||t.length>j?l.push(`example.data must hold 1 to ${j} items`):w&&t.forEach((e,t)=>{const n=c(s,e);l.push(...n.errors.map(e=>`example.data[${t}]: ${e}`))})}else l.push("example must be a nexus-chart envelope object");return{valid:0===l.length,errors:l}};export{e as MAX_CHART_POINTS,d as validateChartDefinition,c as validateChartItem};
1
+ const e=1e3,t=/^[a-z][a-z0-9-]{1,31}$/,s=/^[a-zA-Z][a-zA-Z0-9]{0,31}$/,n=/^\d+\.\d+\.\d+$/,i=/[a-z][a-z0-9+.-]*:\/\/|www\.|\b(?:mailto|data|javascript|vbscript|file|tel|sms):/i,r=["schemaVersion","chartType","title","description","config","data"],a=["valueFormat","xAxis","yAxis"],o=["chartType","version","description","dataItem","configKeys","limits","example","component","toProps","lazy"],m=e=>null!==e&&"object"==typeof e&&!Array.isArray(e),u=(e,t)=>Object.keys(e).filter(e=>!t.includes(e)),p=(e,t,s)=>{if("number"===t.type)return"number"==typeof s&&Number.isFinite(s)?void 0!==t.minimum&&s<t.minimum?[`${e} must be >= ${t.minimum}`]:[]:[`${e} must be a finite number`];if("string"!=typeof s||""===s.trim())return[`${e} must be a non-blank string`];const n=[];return void 0!==t.maxLength&&s.length>t.maxLength&&n.push(`${e} must be at most ${t.maxLength} characters`),t.enum&&!t.enum.includes(s)&&n.push(`${e} must be one of ${t.enum.join(", ")}`),void 0===t.pattern||new RegExp(t.pattern).test(s)||n.push(`${e} must match ${t.pattern}`),"iso-date"===t.format&&Number.isNaN(new Date(s.trim()).getTime())&&n.push(`${e} must be a parseable date`),n},c=(e,t)=>{if(!m(t))return{valid:!1,errors:["item must be an object"]};const{properties:s,required:n}=e.dataItem,i=u(t,Object.keys(s)).map(e=>`unknown field ${e}`);for(const e of n)Object.hasOwn(t,e)||i.push(`missing required field ${e}`);for(const[e,n]of Object.entries(s))Object.hasOwn(t,e)&&i.push(...p(e,n,t[e]));return{valid:0===i.length,errors:i}},l=(e,t)=>{if(!m(t))return[`${e} must be an object`];if("number"===t.type){const s=u(t,["type","minimum"]).map(t=>`${e}.${t} is not allowed`);return void 0===t.minimum||Number.isFinite(t.minimum)||s.push(`${e}.minimum must be finite`),s}if("string"!==t.type)return[`${e}.type must be string or number`];const s=u(t,["type","maxLength","enum","pattern","format"]).map(t=>`${e}.${t} is not allowed`),{maxLength:n,enum:i,pattern:r,format:a}=t;if(void 0===n||Number.isInteger(n)&&n>0||s.push(`${e}.maxLength must be a positive integer`),void 0===i||Array.isArray(i)&&i.length>0&&i.every(e=>"string"==typeof e)||s.push(`${e}.enum must be a non-empty string array`),void 0!==r)try{if("string"!=typeof r)throw new TypeError;new RegExp(r)}catch{s.push(`${e}.pattern must be a valid regular expression`)}return void 0!==a&&"iso-date"!==a&&s.push(`${e}.format must be iso-date`),s},h=(e,t,n=[])=>{if(!m(t))return[`${e} must be an object`];const i=Object.keys(t),r=i.length>8?[`${e} has more than 8 fields`]:[];for(const a of i)s.test(a)||r.push(`${e}.${a} has an invalid name`),n.includes(a)&&r.push(`${e}.${a} is a shared envelope config key`),r.push(...l(`${e}.${a}`,t[a]));return r},d=s=>{if(!m(s))return{valid:!1,errors:["definition must be an object"]};const l=u(s,o).map(e=>`${e} is not allowed`),{chartType:d,version:f,description:b,dataItem:y,configKeys:g,limits:$,example:x,toProps:v,lazy:w}=s;"string"==typeof d&&t.test(d)||l.push(`chartType must match ${t}`),"string"==typeof f&&n.test(f)||l.push("version must be semver x.y.z"),"string"!=typeof b||""===b.trim()?l.push("description must be a non-blank string"):(b.length>300&&l.push("description must be at most 300 characters"),i.test(b)&&l.push("description must not contain URLs"),(b.includes("`")||b.includes("~~~"))&&l.push("description must not contain backticks or code fences"));let j=!1;if(m(y)){const e=l.length;l.push(...u(y,["properties","required"]).map(e=>`dataItem.${e} is not allowed`)),l.push(...h("dataItem.properties",y.properties));const{required:t,properties:s}=y;Array.isArray(t)&&t.every(e=>m(s)&&Object.hasOwn(s,e))?new Set(t).size!==t.length&&l.push("dataItem.required must not repeat a field"):l.push("dataItem.required must list declared properties"),j=l.length===e}else l.push("dataItem must be an object");void 0!==g&&l.push(...h("configKeys",g,a));let A=e;if(void 0!==$&&(!m($)||u($,["maxPoints"]).length>0?l.push("limits may only contain maxPoints"):void 0!==$.maxPoints&&(!Number.isInteger($.maxPoints)||$.maxPoints<1||$.maxPoints>e?l.push("limits.maxPoints must be an integer from 1 to 1000"):A=$.maxPoints)),void 0!==v&&"function"!=typeof v&&l.push("toProps must be a function"),void 0!==w&&"function"!=typeof w&&l.push("lazy must be a function"),m(x)){l.push(...u(x,r).map(e=>`example.${e} is not allowed`)),"1.0"!==x.schemaVersion&&l.push('example.schemaVersion must be "1.0"'),x.chartType!==d&&l.push("example.chartType must equal chartType"),"string"==typeof x.title&&""!==x.title.trim()||l.push("example.title is required");const e=x.config;if(m(e)&&["number","currency","percentage"].includes(e.valueFormat))if(m(g))for(const[t,s]of Object.entries(e)){if(a.includes(t))continue;const e=g[t];void 0===e?l.push(`example.config.${t} is not a declared config key`):l.push(...p(`example.config.${t}`,e,s))}else u(e,a).length>0&&l.push("example.config has undeclared config keys");else l.push("example.config.valueFormat must be number, currency or percentage");const t=x.data;!Array.isArray(t)||0===t.length||t.length>A?l.push(`example.data must hold 1 to ${A} items`):j&&t.forEach((e,t)=>{const n=c(s,e);l.push(...n.errors.map(e=>`example.data[${t}]: ${e}`))})}else l.push("example must be a nexus-chart envelope object");return{valid:0===l.length,errors:l}};export{e as MAX_CHART_POINTS,d as validateChartDefinition,c as validateChartItem};
@@ -1 +1 @@
1
- import{NexusBarChart as e}from"../components/Charts/NexusBarChart.mjs";import{NexusFunnelChart as t}from"../components/Charts/NexusFunnelChart.mjs";import{NexusLineChart as a}from"../components/Charts/NexusLineChart.mjs";import{NexusPieChart as r}from"../components/Charts/NexusPieChart.mjs";const o=[{chartType:"pie",version:"1.0.0",description:"Show how a whole splits into parts, such as share by segment. Use for a few non-negative values that together make up a meaningful total. Prefer bar when there are many categories or the values do not form a whole.",dataItem:{properties:{label:{type:"string",maxLength:200},value:{type:"number",minimum:0}},required:["label","value"]},limits:{maxPoints:1e3},example:{schemaVersion:"1.0",chartType:"pie",title:"Share by segment",description:"Current distribution",config:{valueFormat:"percentage"},data:[{label:"Enterprise",value:62}]},component:r},{chartType:"bar",version:"1.0.0",description:"Compare one value across named categories, such as pipeline by stage or revenue by region. Values may be negative.",dataItem:{properties:{category:{type:"string",maxLength:200},value:{type:"number"}},required:["category","value"]},limits:{maxPoints:1e3},example:{schemaVersion:"1.0",chartType:"bar",title:"Pipeline by stage",description:"Open opportunity value",config:{valueFormat:"currency"},data:[{category:"Qualify",value:125e3}]},component:e},{chartType:"line",version:"1.0.0",description:"Show how one value changes over time, such as a monthly trend. Give each point a date, preferably YYYY-MM-DD, and order the points by date.",dataItem:{properties:{date:{type:"string",maxLength:64,format:"iso-date"},value:{type:"number"}},required:["date","value"]},limits:{maxPoints:1e3},example:{schemaVersion:"1.0",chartType:"line",title:"Monthly trend",description:"Revenue over time",config:{valueFormat:"currency"},data:[{date:"2026-08-01",value:42}]},component:a},{chartType:"funnel",version:"1.0.0",description:"Show drop-off through ordered pipeline stages, such as MQL to SQL to SQO to won. List the stages in order, widest first, with the count that reached each stage. Each stage's conversion rate from the one before is shown. Prefer bar for categories that are not sequential stages.",dataItem:{properties:{label:{type:"string",maxLength:200},value:{type:"number",minimum:0}},required:["label","value"]},limits:{maxPoints:1e3},example:{schemaVersion:"1.0",chartType:"funnel",title:"Pipeline conversion",description:"Leads by stage this quarter",config:{valueFormat:"number"},data:[{label:"MQL",value:1200},{label:"SQL",value:480},{label:"SQO",value:190},{label:"Won",value:60}]},component:t}];export{o as chartDefinitions};
1
+ import{NexusBarChart as e}from"../components/Charts/NexusBarChart.mjs";import{NexusFunnelChart as a}from"../components/Charts/NexusFunnelChart.mjs";import{NexusLineChart as t}from"../components/Charts/NexusLineChart.mjs";import{NexusPieChart as r}from"../components/Charts/NexusPieChart.mjs";const o=e=>e?.label?{label:e.label}:{},i=e=>e?.yAxis?.label?[{label:e.yAxis.label}]:void 0,s=[{chartType:"pie",version:"1.0.0",description:"Show how a whole splits into parts, such as share by segment. Use for a few non-negative values that together make up a meaningful total. Prefer bar when there are many categories or the values do not form a whole.",dataItem:{properties:{label:{type:"string",maxLength:200},value:{type:"number",minimum:0}},required:["label","value"]},limits:{maxPoints:1e3},example:{schemaVersion:"1.0",chartType:"pie",title:"Share by segment",description:"Current distribution",config:{valueFormat:"percentage"},data:[{label:"Enterprise",value:62}]},component:r,toProps:({data:e},a)=>({series:[{data:e.map((e,a)=>({id:a,value:e.value,label:e.label})),innerRadius:"40%",valueFormatter:({value:e})=>a(e)}]})},{chartType:"bar",version:"1.0.0",description:"Compare one value across named categories, such as pipeline by stage or revenue by region. Values may be negative.",dataItem:{properties:{category:{type:"string",maxLength:200},value:{type:"number"}},required:["category","value"]},limits:{maxPoints:1e3},example:{schemaVersion:"1.0",chartType:"bar",title:"Pipeline by stage",description:"Open opportunity value",config:{valueFormat:"currency"},data:[{category:"Qualify",value:125e3}]},component:e,toProps:({data:e,config:a},t)=>({xAxis:[{data:e.map(e=>e.category),scaleType:"band",...o(a?.xAxis)}],yAxis:i(a),series:[{data:e.map(e=>e.value),valueFormatter:t}]})},{chartType:"line",version:"1.0.0",description:"Show how one value changes over time, such as a monthly trend. Give each point a date, preferably YYYY-MM-DD, and order the points by date.",dataItem:{properties:{date:{type:"string",maxLength:64,format:"iso-date"},value:{type:"number"}},required:["date","value"]},limits:{maxPoints:1e3},example:{schemaVersion:"1.0",chartType:"line",title:"Monthly trend",description:"Revenue over time",config:{valueFormat:"currency"},data:[{date:"2026-08-01",value:42}]},component:t,toProps:({data:e,config:a,series:t},r)=>({xAxis:[{data:e.map(e=>e.date),...o(a?.xAxis)}],yAxis:i(a),series:t?t.map(a=>({data:e.map(e=>e[a]??null),label:a,area:!0,valueFormatter:r})):[{data:e.map(e=>e.value),area:!0,valueFormatter:r}]})},{chartType:"funnel",version:"1.0.0",description:"Show drop-off through ordered pipeline stages, such as MQL to SQL to SQO to won. List the stages in order, widest first, with the count that reached each stage. Each stage's conversion rate from the one before is shown. Prefer bar for categories that are not sequential stages.",dataItem:{properties:{label:{type:"string",maxLength:200},value:{type:"number",minimum:0}},required:["label","value"]},limits:{maxPoints:1e3},example:{schemaVersion:"1.0",chartType:"funnel",title:"Pipeline conversion",description:"Leads by stage this quarter",config:{valueFormat:"number"},data:[{label:"MQL",value:1200},{label:"SQL",value:480},{label:"SQO",value:190},{label:"Won",value:60}]},component:a,toProps:({data:e},a)=>({stages:e.map(e=>({label:e.label,value:e.value})),valueFormatter:a})}];export{s as chartDefinitions};
@@ -1 +1 @@
1
- import{jsxs as e,Fragment as t,jsx as o}from"react/jsx-runtime";import{useState as n,useRef as r,useEffect as i,useCallback as l}from"react";import s from"@mui/material/Box";import{Caption as c}from"./Typography.mjs";const a="#main-content",d="h1, h2, h3, h4, h5, h6",p=e=>null===e?null:"string"==typeof e?document.querySelector(e):e??document.querySelector(a),u=()=>window.matchMedia("(prefers-reduced-motion: reduce)").matches?"auto":"smooth",y=({items:y,"aria-label":m,scrollRoot:f=a,sticky:x=!0,stickyOffset:h=0,sx:b})=>{const[v,w]=n(y[0]?.id),g=r(null),S=r(null),k=r(!1),$=r(void 0),E=y.map(e=>e.id).join("\n");i(()=>{const e=E?E.split("\n"):[],t=p(f),o=new Set,n=new IntersectionObserver(t=>{for(const e of t)e.isIntersecting?o.add(e.target.id):o.delete(e.target.id);const n=e.find(e=>o.has(e));n&&w(n)},{root:t,rootMargin:"-35% 0px -60% 0px"});for(const t of e){const e=document.getElementById(t);e&&n.observe(e)}return()=>n.disconnect()},[E,f]),i(()=>{if(!x)return;const e=g.current,t=S.current,o=p(f);if(!e||!t)return;let n=!1,r=o?o.scrollTop:window.scrollY;const i=()=>{const e=(o??document.documentElement).getBoundingClientRect();return{top:e.top+h,left:e.left,width:o?o.clientWidth:window.innerWidth}},l=()=>{t.style.display="none",e.style.position="",e.style.top="",e.style.left="",e.style.width="",e.style.boxSizing=""},s=()=>{e.style.opacity="",e.style.visibility="",e.style.pointerEvents=""},c=()=>{const c=o?o.scrollTop:window.scrollY,a=c-r;if(r=c,c>h&&!n)(()=>{const{top:o,left:n,width:r}=i();t.style.height=`${e.offsetHeight}px`,t.style.display="block",e.style.position="fixed",e.style.top=`${o}px`,e.style.left=`${n}px`,e.style.width=`${r}px`,e.style.boxSizing="border-box"})(),n=!0;else if(c<=h&&n)l(),n=!1;else if(n){const{top:t,left:o,width:n}=i();e.style.top=`${t}px`,e.style.left=`${o}px`,e.style.width=`${n}px`}k.current||(c<=h||a<-5?s():c>100&&a>8&&(e.style.opacity="0",e.style.visibility="hidden",e.style.pointerEvents="none"))},a=o??window;a.addEventListener("scroll",c,{passive:!0});const d=new ResizeObserver(()=>{if(n){const{top:t,left:o,width:n}=i();e.style.top=`${t}px`,e.style.left=`${o}px`,e.style.width=`${n}px`}});return d.observe(o??document.documentElement),()=>{a.removeEventListener("scroll",c),d.disconnect(),l(),s(),clearTimeout($.current)}},[x,f,h]),i(()=>{const e=g.current,t=e?.querySelector('[aria-current="location"]');!e||!t||e.scrollWidth<=e.clientWidth||e.scrollTo({left:t.offsetLeft-(e.clientWidth-t.offsetWidth)/2,behavior:u()})},[v]);const I=l((e,t)=>{if(e.defaultPrevented||0!==e.button)return;if(e.metaKey||e.ctrlKey||e.shiftKey||e.altKey)return;const o=document.getElementById(t);if(!o)return;e.preventDefault();const n=o.matches(d)?o:o.querySelector(d)??o;n.hasAttribute("tabindex")||n.setAttribute("tabindex","-1");const r=g.current;r&&(r.style.opacity="",r.style.visibility="",r.style.pointerEvents=""),k.current=!0,clearTimeout($.current),$.current=setTimeout(()=>{k.current=!1},1e3),o.scrollIntoView({block:"start",behavior:u()}),n.focus({preventScroll:!0}),w(t)},[]);return e(t,{children:[o("div",{ref:S,"aria-hidden":"true",style:{display:"none",flexShrink:0}}),o(s,{ref:g,component:"nav","aria-label":m,sx:[e=>({width:"100%",boxSizing:"border-box",overflowX:{xs:"auto",sm:"visible"},overscrollBehaviorX:"contain",scrollbarWidth:"none","&::-webkit-scrollbar":{display:"none"},px:{xs:"16px",sm:x?"16px":0},maskImage:{xs:"linear-gradient(90deg, transparent, #000 16px, #000 calc(100% - 16px), transparent)",sm:"none"},zIndex:x?e.zIndex.appBar:void 0,backgroundColor:x?"background.default":void 0,...x&&{transition:"opacity 0.2s ease, visibility 0.2s ease","@media (prefers-reduced-motion: reduce)":{transition:"none"}}}),...Array.isArray(b)?b:b?[b]:[]],children:o(s,{component:"ul",role:"list",sx:{listStyle:"none",m:0,p:0,display:"flex",flexWrap:{xs:"nowrap",sm:"wrap"},columnGap:{xs:2.5,sm:3}},children:y.map(({id:e,label:t})=>{const n=e===v;return o(s,{component:"li",sx:{flex:"none"},children:o(s,{component:"a",href:`#${e}`,"aria-current":n?"location":void 0,onClick:t=>I(t,e),sx:{display:"block",py:1.25,whiteSpace:"nowrap",color:n?"text.primary":"text.secondary",textDecoration:n?"underline":"none",textDecorationColor:e=>e.palette.primary.main,textDecorationThickness:n?"2px":void 0,textUnderlineOffset:"7px",borderRadius:.5,"&:hover":{color:"text.primary",textDecoration:"underline",textDecorationColor:e=>e.palette.primary.main},"&:focus-visible":{outline:e=>`2px solid ${e.palette.primary.main}`,outlineOffset:2}},children:o(c,{component:"span",sx:{color:"inherit",letterSpacing:"0.015em"},children:t})})},e)})})})]})};export{y as SectionNav};
1
+ import{jsxs as e,Fragment as t,jsx as o}from"react/jsx-runtime";import{useState as n,useRef as r,useEffect as i,useCallback as l}from"react";import s from"@mui/material/Box";import{Caption as c}from"./Typography.mjs";const a="#main-content",d="h1, h2, h3, h4, h5, h6",p=e=>null===e?null:"string"==typeof e?document.querySelector(e):e??document.querySelector(a),u=()=>window.matchMedia("(prefers-reduced-motion: reduce)").matches?"auto":"smooth",y=({items:y,"aria-label":m,scrollRoot:f=a,sticky:x=!0,stickyOffset:h=0,justifyContent:b="center",sx:v})=>{const[w,g]=n(y[0]?.id),S=r(null),k=r(null),$=r(!1),E=r(void 0),I=y.map(e=>e.id).join("\n");i(()=>{const e=I?I.split("\n"):[],t=p(f),o=new Set,n=new IntersectionObserver(t=>{for(const e of t)e.isIntersecting?o.add(e.target.id):o.delete(e.target.id);const n=e.find(e=>o.has(e));n&&g(n)},{root:t,rootMargin:"-35% 0px -60% 0px"});for(const t of e){const e=document.getElementById(t);e&&n.observe(e)}return()=>n.disconnect()},[I,f]),i(()=>{if(!x)return;const e=S.current,t=k.current,o=p(f);if(!e||!t)return;let n=!1,r=o?o.scrollTop:window.scrollY;const i=()=>{const e=(o??document.documentElement).getBoundingClientRect();return{top:e.top+h,left:e.left,width:o?o.clientWidth:window.innerWidth}},l=()=>{t.style.display="none",e.style.position="",e.style.top="",e.style.left="",e.style.width="",e.style.boxSizing=""},s=()=>{e.style.opacity="",e.style.visibility="",e.style.pointerEvents=""},c=()=>{const c=o?o.scrollTop:window.scrollY,a=c-r;if(r=c,c>h&&!n)(()=>{const{top:o,left:n,width:r}=i();t.style.height=`${e.offsetHeight}px`,t.style.display="block",e.style.position="fixed",e.style.top=`${o}px`,e.style.left=`${n}px`,e.style.width=`${r}px`,e.style.boxSizing="border-box"})(),n=!0;else if(c<=h&&n)l(),n=!1;else if(n){const{top:t,left:o,width:n}=i();e.style.top=`${t}px`,e.style.left=`${o}px`,e.style.width=`${n}px`}$.current||(c<=h||a<-5?s():c>100&&a>8&&(e.style.opacity="0",e.style.visibility="hidden",e.style.pointerEvents="none"))},a=o??window;a.addEventListener("scroll",c,{passive:!0});const d=new ResizeObserver(()=>{if(n){const{top:t,left:o,width:n}=i();e.style.top=`${t}px`,e.style.left=`${o}px`,e.style.width=`${n}px`}});return d.observe(o??document.documentElement),()=>{a.removeEventListener("scroll",c),d.disconnect(),l(),s(),clearTimeout(E.current)}},[x,f,h]),i(()=>{const e=S.current,t=e?.querySelector('[aria-current="location"]');!e||!t||e.scrollWidth<=e.clientWidth||e.scrollTo({left:t.offsetLeft-(e.clientWidth-t.offsetWidth)/2,behavior:u()})},[w]);const T=l((e,t)=>{if(e.defaultPrevented||0!==e.button)return;if(e.metaKey||e.ctrlKey||e.shiftKey||e.altKey)return;const o=document.getElementById(t);if(!o)return;e.preventDefault();const n=o.matches(d)?o:o.querySelector(d)??o;n.hasAttribute("tabindex")||n.setAttribute("tabindex","-1");const r=S.current;r&&(r.style.opacity="",r.style.visibility="",r.style.pointerEvents=""),$.current=!0,clearTimeout(E.current),E.current=setTimeout(()=>{$.current=!1},1e3),o.scrollIntoView({block:"start",behavior:u()}),n.focus({preventScroll:!0}),g(t)},[]);return e(t,{children:[o("div",{ref:k,"aria-hidden":"true",style:{display:"none",flexShrink:0}}),o(s,{ref:S,component:"nav","aria-label":m,sx:[e=>({width:"100%",boxSizing:"border-box",overflowX:{xs:"auto",sm:"visible"},overscrollBehaviorX:"contain",scrollbarWidth:"none","&::-webkit-scrollbar":{display:"none"},px:{xs:"16px",sm:x?"16px":0},maskImage:{xs:"linear-gradient(90deg, transparent, #000 16px, #000 calc(100% - 16px), transparent)",sm:"none"},zIndex:x?e.zIndex.appBar:void 0,backgroundColor:x?"background.default":void 0,...x&&{transition:"opacity 0.2s ease, visibility 0.2s ease","@media (prefers-reduced-motion: reduce)":{transition:"none"}}}),...Array.isArray(v)?v:v?[v]:[]],children:o(s,{component:"ul",role:"list",sx:{listStyle:"none",m:0,p:0,display:"flex",flexWrap:{xs:"nowrap",sm:"wrap"},justifyContent:b,columnGap:{xs:2.5,sm:3}},children:y.map(({id:e,label:t})=>{const n=e===w;return o(s,{component:"li",sx:{flex:"none"},children:o(s,{component:"a",href:`#${e}`,"aria-current":n?"location":void 0,onClick:t=>T(t,e),sx:{display:"block",py:1.25,whiteSpace:"nowrap",color:n?"text.primary":"text.secondary",textDecoration:n?"underline":"none",textDecorationColor:e=>e.palette.primary.main,textDecorationThickness:n?"2px":void 0,textUnderlineOffset:"7px",borderRadius:.5,"&:hover":{color:"text.primary",textDecoration:"underline",textDecorationColor:e=>e.palette.primary.main},"&:focus-visible":{outline:e=>`2px solid ${e.palette.primary.main}`,outlineOffset:2}},children:o(c,{component:"span",sx:{color:"inherit",letterSpacing:"0.015em"},children:t})})},e)})})})]})};export{y as SectionNav};
@@ -1 +1 @@
1
- import{createTheme as r,alpha as o}from"@mui/material/styles";import{getModeTokens as e,fontSageUI as t,fontSageText as a,fontSageHeadline as i,colours as d}from"./tokens.mjs";const n=(n="light")=>{const s=e(n),l=((r,o)=>({h1:r.text.primary,h2:r.text.primary,h3:r.text.primary,h4:r.text.primary,body1:r.text.primary,body2:r.text.secondary,caption:r.text.secondary,actionBarTitle:"dark"===o?d.brilliantGreen:d.jadeDark}))(s,n);return r({palette:{mode:n,primary:{main:"dark"===n?d.jadeLight:d.jadeDark,dark:d.primaryGreenActive,contrastText:"dark"===n?d.black:d.white},secondary:{main:d.teal,contrastText:d.white},success:{main:"dark"===n?d.jadeLight:d.jadeDark,contrastText:"dark"===n?d.black:d.white},warning:{main:d.amber,contrastText:d.white},error:{main:d.cherry,contrastText:d.white},info:{main:d.navy,contrastText:d.white},background:{default:s.background.default,paper:s.background.paper},text:s.text,divider:s.border},shape:{borderRadius:8},typography:{fontFamily:a,h1:{fontFamily:i,fontSize:"clamp(2rem, 3vw, 2.75rem)",lineHeight:1.08,letterSpacing:"-0.01em",fontWeight:700},h2:{fontFamily:i,fontSize:"1.5rem",lineHeight:1.2,fontWeight:600},h3:{fontSize:"0.9rem",lineHeight:1.25,fontWeight:700},h4:{fontSize:"0.8rem",lineHeight:1.2,fontWeight:500},actionBarTitle:{fontFamily:i,fontSize:"1.6rem",fontWeight:700,lineHeight:1.2,textTransform:"none"},body1:{fontSize:"0.8rem",lineHeight:1.4},chatWindowBody:{fontSize:"1rem",lineHeight:1.6},body2:{fontSize:"0.8rem",lineHeight:1.4},caption:{fontSize:"0.7rem",lineHeight:1.4},button:{fontFamily:t,fontSize:"0.95rem",fontWeight:600,textTransform:"none"}},shadows:["none","0 1px 2px rgba(0,0,0,0.08)","0 4px 12px rgba(0,0,0,0.10)","0 8px 24px rgba(0,0,0,0.12)","0 16px 48px rgba(0,0,0,0.18)",...Array(20).fill("none")],components:{MuiCssBaseline:{styleOverrides:{html:{backgroundColor:s.background.default},body:{backgroundColor:s.background.default,fontFamily:a,color:s.text.primary,transition:"background-color 200ms ease, color 200ms ease"},"#root":{minHeight:"100vh"},"::selection":{backgroundColor:o(s.background.jades,.28),color:s.text.primary},a:{color:s.text.greens,"&:hover":{color:s.text.secondary}},aside:{marginRight:"10px",borderLeft:"2px solid",borderColor:s.text.secondary,padding:"0 8px"}}},MuiTypography:{styleOverrides:{root:({ownerState:r})=>({color:l[r.variant]??"inherit"})}},MuiPaper:{defaultProps:{elevation:1},styleOverrides:{root:({theme:r})=>({position:"relative",zIndex:1,backgroundImage:"none",backgroundColor:s.background.paper,border:`1px solid ${s.border}`,borderRadius:r.shape.borderRadius,padding:r.spacing(1)})}},MuiCard:{styleOverrides:{root:({theme:r})=>({borderRadius:r.shape.borderRadius,boxShadow:s.shadow,border:`1px solid ${s.border}`,position:"relative",zIndex:1})}},MuiButton:{defaultProps:{disableElevation:!0}},MuiChip:{styleOverrides:{root:{borderRadius:999,fontFamily:t},label:{fontWeight:400}}},MuiDivider:{styleOverrides:{root:{borderColor:s.border}}},MuiDataGrid:{styleOverrides:{root:({theme:r})=>({borderRadius:r.shape.borderRadius,border:`1px solid ${s.border}`,backgroundColor:s.background.paper,color:s.text.primary,"--DataGrid-rowBorderColor":s.border,"--DataGrid-containerBackground":s.background.paper,"--DataGrid-pinnedBackground":s.background.paper,"& .MuiDataGrid-toolbarContainer":{padding:"12px 16px 0",gap:8},"& .MuiDataGrid-toolbarContainer .MuiButton-root":{minHeight:36,paddingInline:12,color:s.text.secondary},"& .MuiDataGrid-toolbarContainer .MuiInputBase-root":{borderRadius:999,backgroundColor:o(s.background.jades,"dark"===n?.08:.05)},"& .MuiDataGrid-toolbarContainer .MuiInputBase-input":{paddingBlock:8},"& .MuiDataGrid-overlay":{backgroundColor:"transparent"}}),columnHeaders:{backgroundColor:o(s.background.jades,"dark"===n?.12:.08),borderBottom:`1px solid ${s.border}`},columnHeader:{"&:focus, &:focus-within":{outline:"none"}},columnHeaderTitle:{fontWeight:600},cell:{alignItems:"center",borderTop:`1px solid ${s.border}`,"&:focus, &:focus-within":{outline:"none"}},row:{"&:hover":{backgroundColor:o(s.background.jades,"dark"===n?.08:.04)}},footerContainer:{borderTop:`1px solid ${s.border}`,backgroundColor:o(s.background.jades,"dark"===n?.05:.03)},sortIcon:{color:s.background.jades},menuIconButton:{color:s.text.secondary},withBorderColor:{borderColor:s.border}}},MuiListItemButton:{styleOverrides:{root:({theme:r})=>({borderRadius:r.shape.borderRadius,border:`1px solid ${s.border}`,backgroundColor:s.background.paper,color:s.text.primary})}},MuiAppBar:{defaultProps:{elevation:1},styleOverrides:{root:{backgroundColor:s.background.paper,backgroundImage:"none",borderBottom:`1px solid ${s.border}`,borderRadius:0,color:s.text.primary}}},MuiAccordion:{defaultProps:{disableGutters:!0,elevation:0},styleOverrides:{root:{backgroundColor:"transparent",border:`1px solid ${s.border}`,borderRadius:"8px !important","&:before":{display:"none"},"&.Mui-expanded":{borderColor:o(s.background.jades,"dark"===n?.4:.3)}}}},MuiAccordionSummary:{styleOverrides:{root:({theme:r})=>({borderRadius:r.shape.borderRadius,minHeight:24,"&.Mui-expanded":{minHeight:24},"&:focus-visible":{outline:`2px solid ${s.outlinedPrimary}`,outlineOffset:2},padding:0}),content:{margin:"0","&.Mui-expanded":{margin:"0"}},expandIconWrapper:{color:s.text.secondary}}},MuiAccordionDetails:{styleOverrides:{root:{padding:0,borderTop:`1px solid ${s.border}`}}},MuiTabs:{styleOverrides:{root:{minHeight:40,borderBottom:`1px solid ${s.border}`},indicator:{backgroundColor:s.background.jades,height:2}}},MuiTab:{styleOverrides:{root:{minHeight:40,fontFamily:t,fontWeight:600,fontSize:"0.85rem",letterSpacing:"0.01em",textTransform:"none",color:s.text.secondary,"&.Mui-selected":{color:s.text.primary},"&:focus-visible":{outline:`2px solid ${s.outlinedPrimary}`,outlineOffset:2}}}},MuiDialog:{styleOverrides:{paper:({theme:r})=>({backgroundColor:s.background.paper,backgroundImage:"none",border:`1px solid ${s.border}`,borderRadius:r.shape.borderRadius,boxShadow:s.shadow})}},MuiDialogTitle:{styleOverrides:{root:{paddingBottom:8}}},MuiDialogContent:{styleOverrides:{root:{paddingTop:"8px !important"}}}}})};export{n as createSageTheme};
1
+ import{createTheme as r,alpha as o}from"@mui/material/styles";import{getModeTokens as e,fontSageUI as t,fontSageText as a,fontSageHeadline as i,colours as d}from"./tokens.mjs";const n=(n="light")=>{const s=e(n),l=((r,o)=>({h1:r.text.primary,h2:r.text.primary,h3:r.text.primary,h4:r.text.primary,body1:r.text.primary,body2:r.text.secondary,caption:r.text.secondary,actionBarTitle:"dark"===o?d.brilliantGreen:d.jadeDark}))(s,n);return r({palette:{mode:n,primary:{main:"dark"===n?d.jadeLight:d.jadeDark,dark:d.primaryGreenActive,contrastText:"dark"===n?d.black:d.white},secondary:{main:d.teal,contrastText:d.white},success:{main:"dark"===n?d.jadeLight:d.jadeDark,contrastText:"dark"===n?d.black:d.white},warning:{main:d.amber,contrastText:d.white},error:{main:d.cherry,contrastText:d.white},info:{main:d.navy,contrastText:d.white},background:{default:s.background.default,paper:s.background.paper},text:s.text,divider:s.border},shape:{borderRadius:8},typography:{fontFamily:a,h1:{fontFamily:i,fontSize:"clamp(2rem, 3vw, 2.75rem)",lineHeight:1.08,letterSpacing:"-0.01em",fontWeight:700},h2:{fontFamily:i,fontSize:"1.5rem",lineHeight:1.2,fontWeight:600},h3:{fontSize:"0.9rem",lineHeight:1.25,fontWeight:700},h4:{fontSize:"0.8rem",lineHeight:1.2,fontWeight:500},actionBarTitle:{fontFamily:i,fontSize:"1.6rem",fontWeight:700,lineHeight:1.2,textTransform:"none"},body1:{fontSize:"0.8rem",lineHeight:1.4},chatWindowBody:{fontSize:"1rem",lineHeight:1.6},body2:{fontSize:"0.8rem",lineHeight:1.4},caption:{fontSize:"0.7rem",lineHeight:1.4},button:{fontFamily:t,fontSize:"0.95rem",fontWeight:600,textTransform:"none"}},shadows:["none","0 1px 2px rgba(0,0,0,0.08)","0 4px 12px rgba(0,0,0,0.10)","0 8px 24px rgba(0,0,0,0.12)","0 16px 48px rgba(0,0,0,0.18)",...Array(20).fill("none")],components:{MuiCssBaseline:{styleOverrides:{html:{backgroundColor:s.background.default},body:{backgroundColor:s.background.default,fontFamily:a,color:s.text.primary,transition:"background-color 200ms ease, color 200ms ease"},"#root":{minHeight:"100vh"},"::selection":{backgroundColor:o(s.background.jades,.28),color:s.text.primary},a:{color:s.text.greens,"&:hover":{color:s.text.secondary}},aside:{marginRight:"10px",borderLeft:"2px solid",borderColor:s.text.secondary,padding:"0 8px"}}},MuiTypography:{styleOverrides:{root:({ownerState:r})=>({color:l[r.variant]??"inherit"})}},MuiPaper:{defaultProps:{elevation:1},styleOverrides:{root:({theme:r})=>({position:"relative",zIndex:1,backgroundImage:"none",backgroundColor:s.background.paper,border:`1px solid ${s.border}`,borderRadius:r.shape.borderRadius,padding:r.spacing(1)})}},MuiCard:{styleOverrides:{root:({theme:r})=>({borderRadius:r.shape.borderRadius,boxShadow:s.shadow,border:`1px solid ${s.border}`,position:"relative",zIndex:1})}},MuiButton:{defaultProps:{disableElevation:!0}},MuiChip:{styleOverrides:{root:{borderRadius:999,fontFamily:t},label:{fontWeight:400}}},MuiDivider:{styleOverrides:{root:{borderColor:s.border}}},MuiDataGrid:{styleOverrides:{root:({theme:r})=>({borderRadius:r.shape.borderRadius,border:`1px solid ${s.border}`,backgroundColor:s.background.paper,color:s.text.primary,"--DataGrid-rowBorderColor":s.border,"--DataGrid-containerBackground":s.background.paper,"--DataGrid-pinnedBackground":s.background.paper,"& .MuiDataGrid-toolbarContainer":{padding:"12px 16px 0",gap:8},"& .MuiDataGrid-toolbarContainer .MuiButton-root":{minHeight:36,paddingInline:12,color:s.text.secondary},"& .MuiDataGrid-toolbarContainer .MuiInputBase-root":{borderRadius:999,backgroundColor:o(s.background.jades,"dark"===n?.08:.05)},"& .MuiDataGrid-toolbarContainer .MuiInputBase-input":{paddingBlock:8},"& .MuiDataGrid-overlay":{backgroundColor:"transparent"}}),columnHeaders:{backgroundColor:o(s.background.jades,"dark"===n?.12:.08),borderBottom:`1px solid ${s.border}`},columnHeader:{"&:focus, &:focus-within":{outline:"none"}},columnHeaderTitle:{fontWeight:600},cell:{alignItems:"center",borderTop:`1px solid ${s.border}`,"&:focus, &:focus-within":{outline:"none"}},row:{"&:hover":{backgroundColor:o(s.background.jades,"dark"===n?.08:.04)}},footerContainer:{borderTop:`1px solid ${s.border}`,backgroundColor:o(s.background.jades,"dark"===n?.05:.03)},sortIcon:{color:s.background.jades},menuIconButton:{color:s.text.secondary},withBorderColor:{borderColor:s.border}}},MuiListItemButton:{styleOverrides:{root:({theme:r})=>({borderRadius:r.shape.borderRadius,border:`1px solid ${s.border}`,backgroundColor:s.background.paper,color:s.text.primary})}},MuiAppBar:{defaultProps:{elevation:1},styleOverrides:{root:{backgroundColor:s.background.paper,backgroundImage:"none",borderBottom:`1px solid ${s.border}`,borderRadius:0,color:s.text.primary}}},MuiAccordion:{defaultProps:{disableGutters:!0,elevation:0},styleOverrides:{root:{backgroundColor:"transparent",border:`1px solid ${s.border}`,borderRadius:"8px !important","&:before":{display:"none"},"&.Mui-expanded":{borderColor:o(s.background.jades,"dark"===n?.4:.3)}}}},MuiAccordionSummary:{styleOverrides:{root:({theme:r})=>({borderRadius:r.shape.borderRadius,minHeight:24,"&.Mui-expanded":{minHeight:24},"&:focus-visible":{outline:`2px solid ${s.outlinedPrimary}`,outlineOffset:2},padding:0}),content:{margin:"0","&.Mui-expanded":{margin:"0"}},expandIconWrapper:{color:s.text.secondary}}},MuiAccordionDetails:{styleOverrides:{root:{padding:0,borderTop:`1px solid ${s.border}`}}},MuiTabs:{styleOverrides:{root:{minHeight:40,borderBottom:`1px solid ${s.border}`},indicator:{backgroundColor:s.background.jades,height:2}}},MuiTab:{styleOverrides:{root:{minHeight:40,fontFamily:t,fontWeight:600,fontSize:"0.85rem",letterSpacing:"0.01em",textTransform:"none",color:s.text.secondary,"&.Mui-selected":{color:s.text.primary},"&:focus-visible":{outline:`2px solid ${s.outlinedPrimary}`,outlineOffset:2}}}},MuiDialog:{styleOverrides:{paper:({theme:r})=>({backgroundColor:s.background.paper,backgroundImage:"none",border:`1px solid ${s.border}`,borderRadius:r.shape.borderRadius,boxShadow:s.shadow,[r.breakpoints.only("xs")]:{margin:12,width:"calc(100% - 24px)",maxWidth:"calc(100% - 24px)"}})}},MuiDialogTitle:{styleOverrides:{root:{paddingBottom:8}}},MuiDialogContent:{styleOverrides:{root:{paddingTop:"8px !important"}}}}})};export{n as createSageTheme};
@@ -1 +1 @@
1
- import{jsx as a}from"react/jsx-runtime";import{Typography as t}from"@mui/material";import{forwardRef as r}from"react";const e=r((r,e)=>a(t,{ref:e,variant:"h1",...r}));e.displayName="H1";const i=r((r,e)=>a(t,{ref:e,variant:"h2",...r}));i.displayName="H2";const n=r((r,e)=>a(t,{ref:e,variant:"h3",...r}));n.displayName="H3";const o=r((r,e)=>a(t,{ref:e,variant:"h4",...r}));o.displayName="H4";const m=r((r,e)=>a(t,{ref:e,variant:"actionBarTitle",component:"h1",...r}));m.displayName="ActionBarTitle";const s=r((r,e)=>a(t,{ref:e,variant:"body1",...r}));s.displayName="Body1";const p=r((r,e)=>a(t,{ref:e,variant:"chatWindowBody",...r}));p.displayName="ChatWindowBody";const c=r((r,e)=>a(t,{ref:e,variant:"body2",...r}));c.displayName="Body2";const d=r((r,e)=>a(t,{ref:e,variant:"caption",...r}));d.displayName="Caption";const y=r((r,e)=>a(t,{ref:e,variant:"inherit",component:"span",...r}));y.displayName="Span";const l={xs:"1.1rem",sm:"1.5rem",md:"2rem",lg:"2.5rem"},f=r(({size:r="md",sx:e,...i},n)=>a(t,{ref:n,component:"p",sx:[{fontSize:l[r],fontWeight:700,lineHeight:1.1,letterSpacing:"-0.02em",color:"text.primary",margin:0},...Array.isArray(e)?e:e?[e]:[]],...i}));f.displayName="MetricValue";export{m as ActionBarTitle,s as Body1,c as Body2,d as Caption,p as ChatWindowBody,e as H1,i as H2,n as H3,o as H4,f as MetricValue,y as Span};
1
+ import{jsx as i}from"react/jsx-runtime";import{Typography as a}from"@mui/material";import{forwardRef as e}from"react";const t={fontSize:"clamp(44px,5vw,72px)",lineHeight:1.05,letterSpacing:"-0.02em"},n={fontSize:"clamp(30px,3.2vw,44px)",lineHeight:1.12,letterSpacing:"-0.01em"},r={fontSize:"20px",lineHeight:1.25},s={fontSize:"17px",lineHeight:1.55},o={fontSize:"15px",lineHeight:1.5},p={fontSize:"13px",lineHeight:1.45};function m(i,a){return[...Array.isArray(i)?i:i?[i]:[],a]}const l=e(({display:e,sx:n,...r},s)=>i(a,{ref:s,variant:"h1",sx:e?m(n,t):n,...r}));l.displayName="H1";const c=e(({display:e,sx:t,...r},s)=>i(a,{ref:s,variant:"h2",sx:e?m(t,n):t,...r}));c.displayName="H2";const y=e(({display:e,sx:t,...n},s)=>i(a,{ref:s,variant:"h3",sx:e?m(t,r):t,...n}));y.displayName="H3";const d=e((e,t)=>i(a,{ref:t,variant:"h4",...e}));d.displayName="H4";const x=e((e,t)=>i(a,{ref:t,variant:"actionBarTitle",component:"h1",...e}));x.displayName="ActionBarTitle";const f=e(({display:e,sx:t,...n},r)=>i(a,{ref:r,variant:"body1",sx:e?m(t,s):t,...n}));f.displayName="Body1";const h=e((e,t)=>i(a,{ref:t,variant:"chatWindowBody",...e}));h.displayName="ChatWindowBody";const g=e(({display:e,sx:t,...n},r)=>i(a,{ref:r,variant:"body2",sx:e?m(t,o):t,...n}));g.displayName="Body2";const v=e(({display:e,sx:t,...n},r)=>i(a,{ref:r,variant:"caption",sx:e?m(t,p):t,...n}));v.displayName="Caption";const H=e((e,t)=>i(a,{ref:t,variant:"inherit",component:"span",...e}));H.displayName="Span";const N={xs:"1.1rem",sm:"1.5rem",md:"2rem",lg:"2.5rem"},S=e(({size:e="md",sx:t,...n},r)=>i(a,{ref:r,component:"p",sx:[{fontSize:N[e],fontWeight:700,lineHeight:1.1,letterSpacing:"-0.02em",color:"text.primary",margin:0},...Array.isArray(t)?t:t?[t]:[]],...n}));S.displayName="MetricValue";export{x as ActionBarTitle,f as Body1,g as Body2,v as Caption,h as ChatWindowBody,l as H1,c as H2,y as H3,d as H4,S as MetricValue,H as Span};
@@ -1 +1 @@
1
- import{jsx as t}from"react/jsx-runtime";import{useRef as n,useCallback as r}from"react";import{Dialog as e,DialogActions as o,DialogContent as i,DialogContentText as s,DialogTitle as a}from"@mui/material";const l="scale(0.92)",c=()=>"undefined"!=typeof window&&Boolean(window.matchMedia?.("(prefers-reduced-motion: reduce)").matches),u=(t,n)=>{t.style.transition=[t.style.transition,n].filter(Boolean).join(", ")},m=({origin:o,slotProps:i,...s})=>{const a=n(null),m=r(t=>{if(!o||c())return void(a.current=null);const n=o.getBoundingClientRect();a.current={x:n.left+n.width/2,y:n.top+n.height/2},t.style.transformOrigin=`${a.current.x}px ${a.current.y}px`,t.style.transform=l},[o]),f=r(t=>{a.current&&(c()||(t.offsetHeight,u(t,"transform 225ms cubic-bezier(.2,.9,.3,1)")),t.style.transform="none")},[]),g=r(t=>{a.current&&!c()&&(u(t,"transform 195ms cubic-bezier(.7,0,.8,.1)"),t.style.transform=l)},[]),d=r(t=>{a.current&&(t.style.transform="",t.style.transformOrigin="",a.current=null)},[]),p=i?.transition,y=r(t=>{const n="function"==typeof p?p(t):p;return{...n,onEnter:(t,r)=>{m(t),n?.onEnter?.(t,r)},onEntering:(t,r)=>{f(t),n?.onEntering?.(t,r)},onExit:t=>{g(t),n?.onExit?.(t)},onExited:t=>{d(t),n?.onExited?.(t)}}},[m,f,g,d,p]);return t(e,{...s,slotProps:{...i,transition:y}})},f=n=>t(a,{...n}),g=n=>t(i,{...n}),d=n=>t(o,{...n}),p=n=>t(s,{...n});export{m as Dialog,d as DialogActions,g as DialogContent,p as DialogContentText,f as DialogTitle};
1
+ import{jsx as t}from"react/jsx-runtime";import{useRef as r,useCallback as n}from"react";import{Dialog as e,DialogActions as o,DialogContent as i,DialogContentText as s,DialogTitle as a}from"@mui/material";const l="scale(0.92)",c=()=>"undefined"!=typeof window&&Boolean(window.matchMedia?.("(prefers-reduced-motion: reduce)").matches),u=(t,r)=>{t.style.transition=[t.style.transition,r].filter(Boolean).join(", ")},m={borderRadius:{xs:2,sm:4}},f=({origin:o,display:i,slotProps:s,...a})=>{const f=r(null),p=n(t=>{if(!o||c())return void(f.current=null);const r=o.getBoundingClientRect();f.current={x:r.left+r.width/2,y:r.top+r.height/2},t.style.transformOrigin=`${f.current.x}px ${f.current.y}px`,t.style.transform=l},[o]),d=n(t=>{f.current&&(c()||(t.offsetHeight,u(t,"transform 225ms cubic-bezier(.2,.9,.3,1)")),t.style.transform="none")},[]),y=n(t=>{f.current&&!c()&&(u(t,"transform 195ms cubic-bezier(.7,0,.8,.1)"),t.style.transform=l)},[]),g=n(t=>{f.current&&(t.style.transform="",t.style.transformOrigin="",f.current=null)},[]),x=s?.transition,E=n(t=>{const r="function"==typeof x?x(t):x;return{...r,onEnter:(t,n)=>{p(t),r?.onEnter?.(t,n)},onEntering:(t,n)=>{d(t),r?.onEntering?.(t,n)},onExit:t=>{y(t),r?.onExit?.(t)},onExited:t=>{g(t),r?.onExited?.(t)}}},[p,d,y,g,x]),h=s?.paper,b=i?(()=>{const t=h?.sx;return{...h,sx:[m,...Array.isArray(t)?t:t?[t]:[]]}})():h;return t(e,{...a,slotProps:{...s,transition:E,paper:b}})},p=r=>t(a,{...r}),d=r=>t(i,{...r}),y=r=>t(o,{...r}),g=r=>t(s,{...r});export{f as Dialog,y as DialogActions,d as DialogContent,g as DialogContentText,p as DialogTitle};
@@ -1 +1 @@
1
- const o="2.10.9";export{o as SAGE_NEXUS_UI_VERSION};
1
+ const o="2.10.11";export{o as SAGE_NEXUS_UI_VERSION};
package/dist/index.d.ts CHANGED
@@ -671,15 +671,22 @@ declare const NotificationListItem: ({ title, timestamp, body, read, onClick, }:
671
671
  * All other TypographyProps (sx, component, className, children, …) are forwarded.
672
672
  */
673
673
  type Props = Omit<TypographyProps, "variant">;
674
- declare const H1: react.ForwardRefExoticComponent<Omit<Props, "ref"> & react.RefAttributes<HTMLElement>>;
675
- declare const H2: react.ForwardRefExoticComponent<Omit<Props, "ref"> & react.RefAttributes<HTMLElement>>;
676
- declare const H3: react.ForwardRefExoticComponent<Omit<Props, "ref"> & react.RefAttributes<HTMLElement>>;
674
+ /**
675
+ * Display-scale sizes for marketing / website compositions where the app's
676
+ * dense UI scale is too small. Pass `display` to opt a component into these sizes.
677
+ */
678
+ type DisplayProps = Props & {
679
+ display?: boolean;
680
+ };
681
+ declare const H1: react.ForwardRefExoticComponent<Omit<DisplayProps, "ref"> & react.RefAttributes<HTMLElement>>;
682
+ declare const H2: react.ForwardRefExoticComponent<Omit<DisplayProps, "ref"> & react.RefAttributes<HTMLElement>>;
683
+ declare const H3: react.ForwardRefExoticComponent<Omit<DisplayProps, "ref"> & react.RefAttributes<HTMLElement>>;
677
684
  declare const H4: react.ForwardRefExoticComponent<Omit<Props, "ref"> & react.RefAttributes<HTMLElement>>;
678
685
  declare const ActionBarTitle: react.ForwardRefExoticComponent<Omit<Props, "ref"> & react.RefAttributes<HTMLElement>>;
679
- declare const Body1: react.ForwardRefExoticComponent<Omit<Props, "ref"> & react.RefAttributes<HTMLElement>>;
686
+ declare const Body1: react.ForwardRefExoticComponent<Omit<DisplayProps, "ref"> & react.RefAttributes<HTMLElement>>;
680
687
  declare const ChatWindowBody: react.ForwardRefExoticComponent<Omit<Props, "ref"> & react.RefAttributes<HTMLElement>>;
681
- declare const Body2: react.ForwardRefExoticComponent<Omit<Props, "ref"> & react.RefAttributes<HTMLElement>>;
682
- declare const Caption: react.ForwardRefExoticComponent<Omit<Props, "ref"> & react.RefAttributes<HTMLElement>>;
688
+ declare const Body2: react.ForwardRefExoticComponent<Omit<DisplayProps, "ref"> & react.RefAttributes<HTMLElement>>;
689
+ declare const Caption: react.ForwardRefExoticComponent<Omit<DisplayProps, "ref"> & react.RefAttributes<HTMLElement>>;
683
690
  declare const Span: react.ForwardRefExoticComponent<Omit<Props, "ref"> & react.RefAttributes<HTMLElement>>;
684
691
  type MetricValueSize = "xs" | "sm" | "md" | "lg";
685
692
  type MetricValueProps = Omit<TypographyProps, "variant"> & {
@@ -987,9 +994,11 @@ declare const CheckboxGroup: React.FC<CheckboxGroupProps>;
987
994
  interface DialogProps extends DialogProps$1 {
988
995
  /** Element whose centre should be the origin of the dialog's scale transition. */
989
996
  origin?: Element | null;
997
+ /** Applies the display-scale border radius (16px mobile / 32px desktop) for marketing and website contexts. */
998
+ display?: boolean;
990
999
  }
991
1000
 
992
- declare const Dialog: ({ origin, slotProps, ...props }: DialogProps) => react.JSX.Element;
1001
+ declare const Dialog: ({ origin, display, slotProps, ...props }: DialogProps) => react.JSX.Element;
993
1002
  declare const DialogTitle: (props: DialogTitleProps) => react.JSX.Element;
994
1003
  declare const DialogContent: (props: DialogContentProps) => react.JSX.Element;
995
1004
  declare const DialogActions: (props: DialogActionsProps) => react.JSX.Element;
@@ -1670,6 +1679,12 @@ interface SectionNavProps {
1670
1679
  sticky?: boolean;
1671
1680
  /** Distance in px from the top of the scroll root when `sticky`. Defaults to 0. */
1672
1681
  stickyOffset?: number;
1682
+ /**
1683
+ * How items are distributed along the nav's horizontal axis. Defaults to `"center"`.
1684
+ * For `"flex-start"` or `"flex-end"`, add a matching `pl` or `pr` via `sx` to inset
1685
+ * items from the page edge by the page gutter.
1686
+ */
1687
+ justifyContent?: "center" | "flex-start" | "flex-end";
1673
1688
  sx?: SxProps<Theme>;
1674
1689
  }
1675
1690
  /**
@@ -1694,7 +1709,7 @@ interface SectionNavProps {
1694
1709
  * />
1695
1710
  * ```
1696
1711
  */
1697
- declare const SectionNav: ({ items, "aria-label": ariaLabel, scrollRoot, sticky, stickyOffset, sx, }: SectionNavProps) => react.JSX.Element;
1712
+ declare const SectionNav: ({ items, "aria-label": ariaLabel, scrollRoot, sticky, stickyOffset, justifyContent, sx, }: SectionNavProps) => react.JSX.Element;
1698
1713
 
1699
1714
  type CarouselBreakpoint = "xs" | "sm" | "md" | "lg";
1700
1715
  /** Cards visible at once per breakpoint. Fractions leave the next card peeking, e.g. `1.15`. */
@@ -2123,6 +2138,25 @@ type ChartFieldSchema = {
2123
2138
  type: "number";
2124
2139
  minimum?: number;
2125
2140
  };
2141
+ /** A validated `nexus-chart` envelope, as passed to `ChartDefinition.toProps`. */
2142
+ interface ChartEnvelope {
2143
+ data: Record<string, unknown>[];
2144
+ config?: {
2145
+ valueFormat?: string;
2146
+ xAxis?: {
2147
+ label?: string;
2148
+ };
2149
+ yAxis?: {
2150
+ label?: string;
2151
+ };
2152
+ [key: string]: unknown;
2153
+ };
2154
+ /** Legacy EA multi-series line shape: the named value keys on each data point. */
2155
+ series?: string[];
2156
+ }
2157
+ type ChartValueFormatter = (value: number | null) => string;
2158
+ /** Maps an envelope and the renderer's value formatter to the props of `component`. */
2159
+ type ChartToProps = (envelope: ChartEnvelope, valueFormatter: ChartValueFormatter) => Record<string, unknown>;
2126
2160
  interface ChartDefinition {
2127
2161
  /** `/^[a-z][a-z0-9-]{1,31}$/`, unique, append-only. */
2128
2162
  chartType: string;
@@ -2148,6 +2182,8 @@ interface ChartDefinition {
2148
2182
  example: Record<string, unknown>;
2149
2183
  /** Runtime-only renderer; never serialised into a served catalogue. */
2150
2184
  component: unknown;
2185
+ /** Runtime-only envelope -> `component` props adapter; never serialised into a served catalogue. */
2186
+ toProps?: ChartToProps;
2151
2187
  /** Frontend-local definitions only (e.g. us-map). */
2152
2188
  lazy?: () => Promise<unknown>;
2153
2189
  }
@@ -2232,4 +2268,4 @@ declare const leftPipe: SxProps<Theme>;
2232
2268
  declare const expandableText: (isExpanded: boolean) => SxProps<Theme>;
2233
2269
 
2234
2270
  export { AccordionGroup, AccordionGroupItem, AccordionSingle, ActionBar, ActionBarTitle, ActivityFeed, AgentChatDialog, AgentChatWidget, AgentChatWindow, AgentChatWindowHeader, AiButton, AiButtonTile, AiCard, AiChip, AiGlassCard, AiGlassPaper, AiPaper, Alert, ArtifactViewer, Avatar, Body1, Body2, Breadcrumbs, BudgetMeter, ButtonBase, ButtonTile, Caption, Card, Carousel, ChatAvatar, ChatContentFallback, ChatDatapoints, ChatHistory, ChatHistoryAgentItem, ChatHistoryButtonBase, ChatHistoryHeader, ChatInput, ChatResponseMarkdown, ChatWindowBody, Checkbox, CheckboxGroup, Chip, CircularProgress, Code, Collapse, Container, CopyButton, CopyableTableContainer, DateRangeFilter, DateRangePicker, DeltaChip, Dialog, DialogActions, DialogContent, DialogContentText, DialogTitle, DiffView, Divider, Duration, EmptyState, FABButton, FaviconLinks, FlowDiagram, FormControlLabel, FormDialog, FormGroup, GhostButton, GlassCard, GlassPaper, GlassPaperAsync, GreenWaveBackground, Grid, H1, H2, H3, H4, IconButton, JsonViewer, KeyValueList, Link, LoadingSpinnerNexus, LocationMultiSelect, LogoOptions, MAX_CHART_POINTS, MarkdownContent, MessageBubble, MessageFeedbackBar, MessageList, MetricCard, MetricStat, MetricValue, MuiAppThemeProvider, NEXUS_THEME_STORAGE_KEY, NexusAreaChart, NexusBarChart, NexusDataGrid, NexusEmptyState, NexusFunnelChart, NexusHeatmap, NexusHome, NexusLineChart, NexusLogo, NexusNodeIcon, NexusOrbit, NexusPieChart, NexusScatterChart, NexusStackedAreaChart, NexusStackedBarChart, NexusiFrame, NotificationBell, NotificationListItem, Paper, PaperAsync, PrimaryButton, PrimaryButtonLink, ProcessSteps, RagChip, RagDot, RelativeTime, SageLogoSvg, SchemaFieldView, SearchInput, SecondaryButton, SecondaryButtonLink, SectionNav, SegmentedControl, Select, SelectableList, SideBlade, SideBladeNavList, SideBladeNavListItem, Skeleton, SkillChip, SkipLink, Slider, SourceCitations, Span, Stack, StageProgress, StatusBadge, StatusChip, StreamingBubble, SuggestedPrompts, Switch, Tab, Table, TableBody, TableCell, TableHead, TableRow, Tabs, TextField, ThemeModeContext, ThemeModeProvider, ThemeToggle, Toast, Tooltip, TypingIndicator, chartDefinitions, chatHistoryMatchesQuery, chatWindowMarkdownComponents, colours, columnsForItemCount, createSageTheme, deltaColorForPolarity, expandableText, filterChatHistoryConversations, fontSageHeadline, fontSageText, fontSageUI, formatDatapointDelta, formatDatapointValue, formatDate, formatDurationMs, formatSurnameFirstname, getFaviconUrls, getFiscalPeriod, getGradientBorderStyles, getModeTokens, gradients, isAllowedImageSrc, latestTraceLabel, leftPipe, ragColorForDelta, resolveArtifact, safeChatMarkdownComponents, safeMarkdownUrl, sanitizeRawHtmlTable, splitRawHtmlTables, toSandboxedSrcDoc, useThemeMode, useTokens, validateChartDefinition, validateChartItem };
2235
- export type { AccordionGroupItemProps, AccordionGroupProps, AccordionSingleProps, ActivityFeedEntry, ActivityFeedProps, ActivitySummary, AgentChatDialogProps, AgentChatWidgetProps, AgentChatWindowHeaderProps, AgentChatWindowProps, AiButtonProps, AiButtonTileProps, AiCardProps, AiChipProps, AiGlassCardProps, AiGlassPaperProps, AiPaperProps, ArtifactContent, ArtifactKind, ArtifactViewerProps, AvatarProps, AvatarSize, AvatarVariant, BreadcrumbItem, BreadcrumbsProps, BudgetMeterProps, ButtonTileProps, CardProps, CardTrend, CarouselBreakpoint, CarouselItemsPerView, CarouselProps, ChartAsyncProps, ChartDefinition, ChartFieldSchema, ChartValidationResult, ChatAvatarProps, ChatContentFallbackProps, ChatDatapointDelta, ChatDatapointItem, ChatDatapointPolarity, ChatDatapointValueFormat, ChatDatapointsData, ChatDatapointsProps, ChatHistoryAgent, ChatHistoryAgentItemProps, ChatHistoryButtonBaseProps, ChatHistoryConversation, ChatHistoryHeaderProps, ChatHistoryProps, ChatInputProps, ChatMessage, ChatResponseMarkdownProps, ChatTableCell, ChatTableData, ChatTablePart, CodeBlock, CopyButtonProps, CopyableTableContainerProps, DateRangeFilterProps, DateRangePickerProps, DateRangePreset, DateRangeValue, DeltaChipProps, DeltaChipTone, DialogProps, DiffViewProps, DurationProps, EmptyStateProps, FABButtonProps, FileArtifact, FlowDiagramColumn, FlowDiagramHub, FlowDiagramItem, FlowDiagramLogo, FlowDiagramProps, FormDialogProps, GhostButtonProps, GlassCardProps, GlassPaperAsyncProps, GlassPaperProps, GradientBorderOptions, GreenWaveBackgroundProps, IconButtonProps, IconButtonVariant, JsonSchema, JsonViewerProps, KeyValueItem, KeyValueListProps, LatencyMetrics, LinkProps, LoadingSpinnerNexusProps, MarkdownContentProps, MessageBubbleProps, MessageFeedbackBarProps, MessageListProps, MetricCardProps, MetricStatProps, MetricValueSize, ModeTokens, NexusAreaChartProps, NexusBarChartProps, NexusEmptyStateProps, NexusFunnelChartProps, NexusFunnelStage, NexusHeatmapAxisItem, NexusHeatmapCell, NexusHeatmapProps, NexusHeatmapStatus, NexusLineChartProps, NexusNodeIconProps, NexusNodeIconSize, NexusNodeIconTone, NexusOrbitProps, NexusPieChartProps, NexusScatterChartProps, NexusStackedAreaChartProps, NexusStackedBarChartProps, NexusiFrameProps, NotificationBellProps, NotificationListItemProps, PaperAsyncProps, ParsedActivity, PrimaryButtonLinkProps, PrimaryButtonProps, ProcessStep, ProcessStepsProps, RelativeTimeProps, ResolvedArtifact, SchemaFieldViewProps, SecondaryButtonLinkProps, SecondaryButtonProps, SectionNavItem, SectionNavProps, SegmentedControlOption, SegmentedControlProps, SelectOption, SelectProps, SelectableListItem, SelectableListProps, SideBladeNavItem, SideBladeNavListItemProps, SideBladeNavListProps, SideBladeProps, SkeletonProps, SkipLinkProps, SliderMarkOption, SliderProps, SourceCitationsProps, StackedBarItem, StageProgressProps, StageProgressStep, StageState, StatusBadgeProps, StatusBadgeVariant, StreamingBubbleProps, SuggestedPromptsProps, ThemeMode, ThemeModeContextValue, ThemeModeProviderProps, ToastProps, TooltipProps, TraceEvent, TypingIndicatorProps };
2271
+ export type { AccordionGroupItemProps, AccordionGroupProps, AccordionSingleProps, ActivityFeedEntry, ActivityFeedProps, ActivitySummary, AgentChatDialogProps, AgentChatWidgetProps, AgentChatWindowHeaderProps, AgentChatWindowProps, AiButtonProps, AiButtonTileProps, AiCardProps, AiChipProps, AiGlassCardProps, AiGlassPaperProps, AiPaperProps, ArtifactContent, ArtifactKind, ArtifactViewerProps, AvatarProps, AvatarSize, AvatarVariant, BreadcrumbItem, BreadcrumbsProps, BudgetMeterProps, ButtonTileProps, CardProps, CardTrend, CarouselBreakpoint, CarouselItemsPerView, CarouselProps, ChartAsyncProps, ChartDefinition, ChartEnvelope, ChartFieldSchema, ChartToProps, ChartValidationResult, ChartValueFormatter, ChatAvatarProps, ChatContentFallbackProps, ChatDatapointDelta, ChatDatapointItem, ChatDatapointPolarity, ChatDatapointValueFormat, ChatDatapointsData, ChatDatapointsProps, ChatHistoryAgent, ChatHistoryAgentItemProps, ChatHistoryButtonBaseProps, ChatHistoryConversation, ChatHistoryHeaderProps, ChatHistoryProps, ChatInputProps, ChatMessage, ChatResponseMarkdownProps, ChatTableCell, ChatTableData, ChatTablePart, CodeBlock, CopyButtonProps, CopyableTableContainerProps, DateRangeFilterProps, DateRangePickerProps, DateRangePreset, DateRangeValue, DeltaChipProps, DeltaChipTone, DialogProps, DiffViewProps, DurationProps, EmptyStateProps, FABButtonProps, FileArtifact, FlowDiagramColumn, FlowDiagramHub, FlowDiagramItem, FlowDiagramLogo, FlowDiagramProps, FormDialogProps, GhostButtonProps, GlassCardProps, GlassPaperAsyncProps, GlassPaperProps, GradientBorderOptions, GreenWaveBackgroundProps, IconButtonProps, IconButtonVariant, JsonSchema, JsonViewerProps, KeyValueItem, KeyValueListProps, LatencyMetrics, LinkProps, LoadingSpinnerNexusProps, MarkdownContentProps, MessageBubbleProps, MessageFeedbackBarProps, MessageListProps, MetricCardProps, MetricStatProps, MetricValueSize, ModeTokens, NexusAreaChartProps, NexusBarChartProps, NexusEmptyStateProps, NexusFunnelChartProps, NexusFunnelStage, NexusHeatmapAxisItem, NexusHeatmapCell, NexusHeatmapProps, NexusHeatmapStatus, NexusLineChartProps, NexusNodeIconProps, NexusNodeIconSize, NexusNodeIconTone, NexusOrbitProps, NexusPieChartProps, NexusScatterChartProps, NexusStackedAreaChartProps, NexusStackedBarChartProps, NexusiFrameProps, NotificationBellProps, NotificationListItemProps, PaperAsyncProps, ParsedActivity, PrimaryButtonLinkProps, PrimaryButtonProps, ProcessStep, ProcessStepsProps, RelativeTimeProps, ResolvedArtifact, SchemaFieldViewProps, SecondaryButtonLinkProps, SecondaryButtonProps, SectionNavItem, SectionNavProps, SegmentedControlOption, SegmentedControlProps, SelectOption, SelectProps, SelectableListItem, SelectableListProps, SideBladeNavItem, SideBladeNavListItemProps, SideBladeNavListProps, SideBladeProps, SkeletonProps, SkipLinkProps, SliderMarkOption, SliderProps, SourceCitationsProps, StackedBarItem, StageProgressProps, StageProgressStep, StageState, StatusBadgeProps, StatusBadgeVariant, StreamingBubbleProps, SuggestedPromptsProps, ThemeMode, ThemeModeContextValue, ThemeModeProviderProps, ToastProps, TooltipProps, TraceEvent, TypingIndicatorProps };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "it-data-nexus-ui-library",
3
- "version": "2.10.9",
3
+ "version": "2.10.11",
4
4
  "description": "Nexus core components",
5
5
  "license": "ISC",
6
6
  "author": "emsmart-sage",