@malloydata/render 0.0.357 → 0.0.359

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.
@@ -126470,8 +126470,12 @@ const $Qe = {
126470
126470
  */
126471
126471
  matches: (e, t, n) => {
126472
126472
  const r = t.has("big_value"), i = n === Ht.RepeatedRecord || n === Ht.Record;
126473
- if (r && !i)
126473
+ if (r && !i) {
126474
+ const s = t.tag("big_value");
126475
+ if (s != null && s.has("sparkline") || s != null && s.has("comparison_field"))
126476
+ return !1;
126474
126477
  throw new Error("Malloy Big Value: field must be a query result (repeated record or record)");
126478
+ }
126475
126479
  return r && i;
126476
126480
  },
126477
126481
  /**
@@ -1142,4 +1142,4 @@ ${n.map(i=>` ${i}`).join(`,
1142
1142
  .malloy-big-value-error-icon {
1143
1143
  margin-right: 8px;
1144
1144
  }
1145
- `;function IZe(e){const t=new Td.Tag;return e.size&&e.size!==bd.size&&t.set(["big_value","size"],e.size),e.neutralThreshold!==void 0&&e.neutralThreshold!==bd.neutralThreshold&&t.set(["big_value","neutral_threshold"],String(e.neutralThreshold)),t}function zZe(e){return e.split("_").map(t=>t.charAt(0).toUpperCase()+t.slice(1).toLowerCase()).join(" ")}function PZe(e){const n=e.tag.tag("big_value"),r=n==null?void 0:n.text("size"),i=r==="sm"||r==="md"||r==="lg"?r:bd.size,s=n==null?void 0:n.text("neutral_threshold"),a=s!==void 0?parseFloat(s):bd.neutralThreshold;return{size:i,neutralThreshold:isNaN(a)?bd.neutralThreshold:a}}function LZe(e){const t=e.tag,n=t.text("label")||zZe(e.name),r=t.text("description")||null;let i=null;const s=t.text("big_value","comparison_field");if(s){const o=t.text("big_value","comparison_label")??void 0,l=t.text("big_value","comparison_format")??"pct",u=t.text("big_value","down_is_good")==="true";i={comparisonField:s,comparisonLabel:o,comparisonFormat:l,downIsGood:u}}const a=t.text("big_value","sparkline")||null;return{label:n,description:r,comparison:i,sparklineRef:a}}function BZe(e){const t=new Map,n=new Set;if(!e.isNest())return{fieldConfigs:t,sparklineNestNames:n};for(const r of e.fields)if(t.set(r.name,LZe(r)),r.isNest()){const i=r.tag,s=i.has("line_chart")&&i.text("line_chart","size")==="spark",a=i.has("bar_chart")&&i.text("bar_chart","size")==="spark";(s||a)&&n.add(r.name)}return{fieldConfigs:t,sparklineNestNames:n}}const Hie={name:"big_value",matches:(e,t,n)=>{const r=t.has("big_value"),i=n===Gt.RepeatedRecord||n===Gt.Record;if(r&&!i)throw new Error("Malloy Big Value: field must be a query result (repeated record or record)");return r&&i},create:e=>{if(!e.isNest())throw new Error("Big Value: must be a nest field");const t=PZe(e),n=BZe(e);return{name:"big_value",field:e,renderMode:"solidjs",sizingStrategy:"fixed",renderComponent:i=>{if(Pa.addStylesheet(NZe),!i.dataColumn.isRepeatedRecord()&&!i.dataColumn.isRecord())throw new Error("Malloy Big Value: data column must be a repeated record or record");return te(RZe,{get dataColumn(){return i.dataColumn},get field(){return i.field},settings:t,tagConfig:n})},getMetadata:()=>({type:"big_value",field:e,settings:t}),getSchema:()=>Wie,getSettings:()=>t,getDefaultSettings:()=>bd,settingsToTag:i=>IZe(i)}}};function d2(e){if(e.isTime())return"temporal";if(e.isString())return"nominal";if(e.isNumber())return"quantitative";throw new Error("Invalid field type for scatter chart.")}function UZe(e){if(e.isNull())return null;if(e.isTime()||e.isString()||e.isNumber())return e.value;throw new Error("Invalid field type for scatter chart.")}function qZe(e,t){return e.map(n=>{const r={};for(const i of n.field.fields){let s=UZe(n.column(i.name));s instanceof Date&&(s=TO(s,t)),r[i.name]=s}return r})}function jZe(e){return e.isRoot()?{height:350,width:500}:{height:175,width:250}}const VZe={name:"scatter_chart",matches:(e,t,n)=>{const r=t.has("scatter_chart"),i=n===Gt.RepeatedRecord;if(r&&!i)throw new Error("Malloy Scatter Chart: field is a scatter chart, but is not a repeated record");return r&&i},create:e=>{let t={},n;return{name:"scatter_chart",field:e,renderMode:"dom",sizingStrategy:"fixed",beforeRender:(r,i)=>{var s;t=((s=i.getVegaConfigOverride)==null?void 0:s.call(i,"scatter_chart"))??{},n=i.renderFieldMetadata.logCollector},renderToDOM:(r,i)=>{if(!i.dataColumn.isRepeatedRecord())throw new Error("Malloy Scatter Chart: data column is not a repeated record");const s=i.dataColumn,a=s.field.fields,o=a[0],l=a[1],u=a[2],c=a[3],f=a[4],d=d2(o),h=d2(l),m=u?d2(u):void 0,p=c?d2(c):void 0,g=f?d2(f):void 0,y=e.root().queryTimezone,b=u!==void 0?{field:u.name,type:m,axis:{title:u.name},scale:ir(m,!1)}:{value:"#4285F4"},v=c?{field:c.name,type:p,axis:{title:c.name}}:void 0,x=f?{field:f.name,type:g,axis:{title:f.name}}:void 0,$=d==="nominal"?null:void 0,S=h==="nominal"?null:void 0,w={...Gl,...jZe(e),data:{values:qZe(s.rows,y)},mark:"point",encoding:{x:{field:o.name,type:d,sort:$,axis:{title:o.name},scale:{zero:!1}},y:{field:l.name,type:h,sort:S,axis:{title:l.name},scale:{zero:!1}},size:v,color:b,shape:x},background:"transparent"};w.config=md(w.config??{},t);const k=$4(w).spec,_=new w1(F1(k),{renderer:"none"});_.logger().level(-1),_.toSVG().then(E=>{r.innerHTML=E}).catch(E=>{n==null||n.error(`Scatter chart render error: ${E}`)})},getMetadata:()=>({type:"scatter_chart",field:e}),getDeclaredTagPaths:()=>[["scatter_chart"]]}}};function WZe(e,t){if(e.isBasic()){if(e.isTime())return"nominal";if(e.isString())return e===t?"quantitative":"nominal";if(e.isNumber())return"quantitative"}throw new Error("Invalid field type for shape map.")}function HZe(e,t){if(e.isNumber())return e.value;if(e.isString()){if(e.field===t){const n=Tre[e.value];return n===void 0?void 0:n}return e.value}if(!e.isNull())throw new Error("Invalid field type for shape map.")}function GZe(e,t){return e.map(n=>{const r={};for(const i of n.field.fields)r[i.name]=HZe(n.column(i.name),t);return r})}function YZe(e){return e.isRoot()?{height:350,width:500}:{height:175,width:250}}const XZe={axis:{labelFont:"var(--malloy-font-family, 'Inter')",titleFont:"var(--malloy-font-family, 'Inter')",titleFontWeight:500,titleColor:"var(--malloy-title-color, #505050)",labelColor:"var(--malloy-label-color, #000000)",titleFontSize:12},legend:{labelFont:"var(--malloy-font-family, 'Inter')",titleFont:"var(--malloy-font-family, 'Inter')",titleFontWeight:500,titleColor:"var(--malloy-title-color, #505050)",labelColor:"var(--malloy-label-color, #000000)",titleFontSize:12},header:{labelFont:"var(--malloy-font-family, 'Inter')",titleFont:"var(--malloy-font-family, 'Inter')",titleFontWeight:500},mark:{font:"var(--malloy-font-family, 'Inter')"},title:{font:"var(--malloy-font-family, 'Inter')",subtitleFont:"var(--malloy-font-family, 'Inter')",fontWeight:500}},ZZe={name:"shape_map",matches:(e,t,n)=>{const r=t.has("shape_map"),i=n===Gt.RepeatedRecord;if(r&&!i)throw new Error("Malloy Shape Map: field is a shape map, but is not a repeated record");return r&&i},create:e=>{let t={},n;return{name:"shape_map",field:e,renderMode:"dom",sizingStrategy:"fixed",beforeRender:(r,i)=>{var s;t=((s=i.getVegaConfigOverride)==null?void 0:s.call(i,"shape_map"))??{},n=i.renderFieldMetadata.logCollector},renderToDOM:(r,i)=>{if(!i.dataColumn.isRepeatedRecord())throw new Error("Malloy Shape Map: data column is not a repeated record");const s=i.dataColumn,a=s.field.fields[0],o=s.field.fields[1],l=o?WZe(o,a):void 0,u=o!==void 0?{field:o.name,type:l,axis:{title:o.name},scale:ir(l,!1)}:void 0,c=GZe(s.rows,a).filter(m=>m[a.name]!==void 0),f={...YZe(e),data:{values:c},projection:{type:"albersUsa"},layer:[{data:{values:Ac,format:{type:"topojson",feature:"states"}},mark:{type:"geoshape",fill:"#efefef",stroke:"white"}},{transform:[{lookup:a.name,from:{data:{values:Ac,format:{type:"topojson",feature:"states"}},key:"id"},as:"geo"}],mark:"geoshape",encoding:{shape:{field:"geo",type:"geojson"},color:u}}],background:"transparent",config:XZe};f.config=md(f.config??{},t);const d=$4(f).spec,h=new w1(F1(d),{renderer:"none"});h.logger().level(-1),h.toSVG().then(m=>{r.innerHTML=m}).catch(m=>{n==null||n.error(`Shape map render error: ${m}`)})},getMetadata:()=>({type:"shape_map",field:e}),getDeclaredTagPaths:()=>[["shape_map"]]}}};function QZe(e){if(e.isString())return"nominal";if(e.isNumber())return"quantitative";throw new Error("Invalid field type for segment map.")}function KZe(e){if(e.isNull())return null;if(e.isNumber()||e.isString())return e.value;throw new Error("Invalid field type for segment map.")}function JZe(e){return e.map(t=>{const n={};for(const r of t.field.fields)n[r.name]=KZe(t.column(r.name));return n})}function eQe(e){return e.isRoot()?{height:350,width:500}:{height:175,width:250}}const tQe={axis:{labelFont:"var(--malloy-font-family, 'Inter')",titleFont:"var(--malloy-font-family, 'Inter')",titleFontWeight:500,titleColor:"var(--malloy-title-color, #505050)",labelColor:"var(--malloy-label-color, #000000)",titleFontSize:12},legend:{labelFont:"var(--malloy-font-family, 'Inter')",titleFont:"var(--malloy-font-family, 'Inter')",titleFontWeight:500,titleColor:"var(--malloy-title-color, #505050)",labelColor:"var(--malloy-label-color, #000000)",titleFontSize:12},header:{labelFont:"var(--malloy-font-family, 'Inter')",titleFont:"var(--malloy-font-family, 'Inter')",titleFontWeight:500},mark:{font:"var(--malloy-font-family, 'Inter')"},title:{font:"var(--malloy-font-family, 'Inter')",subtitleFont:"var(--malloy-font-family, 'Inter')",fontWeight:500}},nQe={name:"segment_map",matches:(e,t,n)=>{const r=t.has("segment_map"),i=n===Gt.RepeatedRecord;if(r&&!i)throw new Error("Malloy Segment Map: field is a segment map, but is not a repeated record");return r&&i},create:e=>{let t={},n;return{name:"segment_map",field:e,renderMode:"dom",sizingStrategy:"fixed",beforeRender:(r,i)=>{var s;t=((s=i.getVegaConfigOverride)==null?void 0:s.call(i,"segment_map"))??{},n=i.renderFieldMetadata.logCollector},renderToDOM:(r,i)=>{if(!i.dataColumn.isRepeatedRecord())throw new Error("Malloy Segment Map: data column is not a repeated record");const s=i.dataColumn,a=s.field.fields,o=a[0],l=a[1],u=a[2],c=a[3],f=a[4],d=f?QZe(f):void 0,h=f!==void 0?{field:f.name,type:d,axis:{title:f.name},scale:ir(d,!1)}:void 0,m={...eQe(e),data:{values:JZe(s.rows)},projection:{type:"albersUsa"},layer:[{data:{values:Ac,format:{type:"topojson",feature:"states"}},mark:{type:"geoshape",fill:"lightgray",stroke:"white"}},{mark:"line",encoding:{latitude:{field:o.name,type:"quantitative"},longitude:{field:l.name,type:"quantitative"},latitude2:{field:u.name},longitude2:{field:c.name},color:h}}],background:"transparent",config:tQe};m.config=md(m.config??{},t);const p=$4(m).spec,g=new w1(F1(p),{renderer:"none"});g.logger().level(-1),g.toSVG().then(y=>{r.innerHTML=y}).catch(y=>{n==null||n.error(`Segment map render error: ${y}`)})},getMetadata:()=>({type:"segment_map",field:e}),getDeclaredTagPaths:()=>[["segment_map"]]}}};class Gie{constructor(t={}){this.globalOptions=t,this.pluginRegistry=[fZe,Vie,Hie,VZe,ZZe,nQe,...t.plugins||[]]}createViz(t={}){const n={...this.globalOptions,...t};return new Pa(n,this.pluginRegistry)}updateOptions(t){this.globalOptions={...this.globalOptions,...t}}getOptions(){return{...this.globalOptions}}getRegisteredPlugins(){return[...this.pluginRegistry]}}class rQe{constructor(t){this.document=t,this.lastRenderedElement=null,this.lastViz=null}async render(t,n){if(M7(t.model_annotations,"## ").has("renderer_legacy")||n.useLegacy===!0)console.warn("Tried to use the new Malloy renderer, but the malloy-render component was not found. Falling back to the legacy renderer.");else{const o=new Gie,l=n.nextRendererOptions??{},u=o.createViz(l);u.setResult(t);const c=this.document.createElement("div");return u.render(c),this.lastRenderedElement=c,this.lastViz=u,c}const s=vR(t),a=Xie(s.field,this.document,n,{size:"large"},s.field.queryTimezone,s.field.tag);try{const o=await a.render(s);return this.lastRenderedElement=o,this.lastViz=null,o}catch(o){if(o instanceof Error){const l=as(this.document,o);return this.lastRenderedElement=l,this.lastViz=null,l}else{const l=as(this.document,"Internal error - Exception not an Error object.");return this.lastRenderedElement=l,this.lastViz=null,l}}}async getHTML(){if(!this.lastRenderedElement)throw new Error("No element has been rendered yet");return this.lastViz?this.lastViz.getHTML():this.lastRenderedElement.innerHTML}}class iQe{constructor(t){this.document=t}async render(t){const n=new wT(this.document);try{return await n.render(t)}catch(r){return r instanceof Error?as(this.document,r):as(this.document,"Internal error - Exception not an Error object.")}}}const Yie={shape_map:"shape_map",point_map:"point_map",bar_chart:"bar_chart",image:"image",json:"json",segment_map:"segment_map",dashboard:"dashboard",line_chart:"line_chart",scatter_chart:"scatter_chart",url:"url",list:"list",list_detail:"list_detail",sparkline:"sparkline",sparkline_area:"sparkline",sparkline_column:"sparkline",sparkline_bar:"sparkline"};function sQe(e,t){const n=t[e.name],{name:r}=e;for(const i in Yie)if(r.endsWith(`_${i}`)){const s=r.slice(0,r.length-i.length-1);return aQe(i,s,Yie,n)}return n}function aQe(e,t,n,r){var i;return r?(r.renderer??(r.renderer=n[e]),r.data??(r.data={}),(i=r.data).label??(i.label=t)):r={renderer:n[e],data:{label:t}},r}function zx(e){if(e.isRecordOrRepeatedRecord())return e;throw new Error(`${e.name} does not contain fields and cannot be rendered this way`)}function Xie(e,t,n,r,i,s){const a=sQe(e,n.dataStyles);n.dataStyles[e.name]=a;const o=new JF().create(a,s,t,r,n,e,i);if(o)return o;if((a==null?void 0:a.renderer)==="dashboard"||s.has("dashboard"))return Px(eT,t,zx(e),n,s);if((a==null?void 0:a.renderer)==="list"||s.has("list"))return Px(Bre,t,zx(e),n,s);if((a==null?void 0:a.renderer)==="list_detail"||s.has("list_detail"))return Px(JHe,t,zx(e),n,s);if((a==null?void 0:a.renderer)==="table"||s.has("table")||e.isRecordOrRepeatedRecord())return Px(m0,t,zx(e),n,s);throw new Error(`Could not find a proper renderer for field ${e.name}`)}function Px(e,t,n,r,i){const s=h2.make(e,t,n,r,i),a={};return n.fields.forEach(o=>{a[o.name]=Xie(o,t,r,s.defaultStylesForChildren,o.getEffectiveQueryTimezone(),o.tag)}),s.childRenderers=a,s}function oQe(e){return"getSchema"in e&&"getSettings"in e&&"getDefaultSettings"in e&&"settingsToTag"in e&&typeof e.getSchema=="function"&&typeof e.getSettings=="function"&&typeof e.getDefaultSettings=="function"&&typeof e.settingsToTag=="function"}mn.BarChartPluginFactory=Vie,mn.BigValuePluginFactory=Hie,mn.Currency=Rd,mn.DataVolumeUnit=au,mn.DurationUnit=lt,mn.ErrorPlugin=Mie,mn.HTMLView=rQe,mn.JSONView=iQe,mn.MalloyRenderer=Gie,mn.barChartSettingsSchema=jie,mn.bigValueSettingsSchema=Wie,mn.defaultBarChartSettings=gr,mn.defaultBigValueSettings=bd,mn.defaultLineChartSettings=Ql,mn.isCoreVizPluginInstance=oQe,mn.isDurationUnit=a7,mn.lineChartSettingsSchema=Nie,Object.defineProperty(mn,Symbol.toStringTag,{value:"Module"})});
1145
+ `;function IZe(e){const t=new Td.Tag;return e.size&&e.size!==bd.size&&t.set(["big_value","size"],e.size),e.neutralThreshold!==void 0&&e.neutralThreshold!==bd.neutralThreshold&&t.set(["big_value","neutral_threshold"],String(e.neutralThreshold)),t}function zZe(e){return e.split("_").map(t=>t.charAt(0).toUpperCase()+t.slice(1).toLowerCase()).join(" ")}function PZe(e){const n=e.tag.tag("big_value"),r=n==null?void 0:n.text("size"),i=r==="sm"||r==="md"||r==="lg"?r:bd.size,s=n==null?void 0:n.text("neutral_threshold"),a=s!==void 0?parseFloat(s):bd.neutralThreshold;return{size:i,neutralThreshold:isNaN(a)?bd.neutralThreshold:a}}function LZe(e){const t=e.tag,n=t.text("label")||zZe(e.name),r=t.text("description")||null;let i=null;const s=t.text("big_value","comparison_field");if(s){const o=t.text("big_value","comparison_label")??void 0,l=t.text("big_value","comparison_format")??"pct",u=t.text("big_value","down_is_good")==="true";i={comparisonField:s,comparisonLabel:o,comparisonFormat:l,downIsGood:u}}const a=t.text("big_value","sparkline")||null;return{label:n,description:r,comparison:i,sparklineRef:a}}function BZe(e){const t=new Map,n=new Set;if(!e.isNest())return{fieldConfigs:t,sparklineNestNames:n};for(const r of e.fields)if(t.set(r.name,LZe(r)),r.isNest()){const i=r.tag,s=i.has("line_chart")&&i.text("line_chart","size")==="spark",a=i.has("bar_chart")&&i.text("bar_chart","size")==="spark";(s||a)&&n.add(r.name)}return{fieldConfigs:t,sparklineNestNames:n}}const Hie={name:"big_value",matches:(e,t,n)=>{const r=t.has("big_value"),i=n===Gt.RepeatedRecord||n===Gt.Record;if(r&&!i){const s=t.tag("big_value");if(s!=null&&s.has("sparkline")||s!=null&&s.has("comparison_field"))return!1;throw new Error("Malloy Big Value: field must be a query result (repeated record or record)")}return r&&i},create:e=>{if(!e.isNest())throw new Error("Big Value: must be a nest field");const t=PZe(e),n=BZe(e);return{name:"big_value",field:e,renderMode:"solidjs",sizingStrategy:"fixed",renderComponent:i=>{if(Pa.addStylesheet(NZe),!i.dataColumn.isRepeatedRecord()&&!i.dataColumn.isRecord())throw new Error("Malloy Big Value: data column must be a repeated record or record");return te(RZe,{get dataColumn(){return i.dataColumn},get field(){return i.field},settings:t,tagConfig:n})},getMetadata:()=>({type:"big_value",field:e,settings:t}),getSchema:()=>Wie,getSettings:()=>t,getDefaultSettings:()=>bd,settingsToTag:i=>IZe(i)}}};function d2(e){if(e.isTime())return"temporal";if(e.isString())return"nominal";if(e.isNumber())return"quantitative";throw new Error("Invalid field type for scatter chart.")}function UZe(e){if(e.isNull())return null;if(e.isTime()||e.isString()||e.isNumber())return e.value;throw new Error("Invalid field type for scatter chart.")}function qZe(e,t){return e.map(n=>{const r={};for(const i of n.field.fields){let s=UZe(n.column(i.name));s instanceof Date&&(s=TO(s,t)),r[i.name]=s}return r})}function jZe(e){return e.isRoot()?{height:350,width:500}:{height:175,width:250}}const VZe={name:"scatter_chart",matches:(e,t,n)=>{const r=t.has("scatter_chart"),i=n===Gt.RepeatedRecord;if(r&&!i)throw new Error("Malloy Scatter Chart: field is a scatter chart, but is not a repeated record");return r&&i},create:e=>{let t={},n;return{name:"scatter_chart",field:e,renderMode:"dom",sizingStrategy:"fixed",beforeRender:(r,i)=>{var s;t=((s=i.getVegaConfigOverride)==null?void 0:s.call(i,"scatter_chart"))??{},n=i.renderFieldMetadata.logCollector},renderToDOM:(r,i)=>{if(!i.dataColumn.isRepeatedRecord())throw new Error("Malloy Scatter Chart: data column is not a repeated record");const s=i.dataColumn,a=s.field.fields,o=a[0],l=a[1],u=a[2],c=a[3],f=a[4],d=d2(o),h=d2(l),m=u?d2(u):void 0,p=c?d2(c):void 0,g=f?d2(f):void 0,y=e.root().queryTimezone,b=u!==void 0?{field:u.name,type:m,axis:{title:u.name},scale:ir(m,!1)}:{value:"#4285F4"},v=c?{field:c.name,type:p,axis:{title:c.name}}:void 0,x=f?{field:f.name,type:g,axis:{title:f.name}}:void 0,$=d==="nominal"?null:void 0,S=h==="nominal"?null:void 0,w={...Gl,...jZe(e),data:{values:qZe(s.rows,y)},mark:"point",encoding:{x:{field:o.name,type:d,sort:$,axis:{title:o.name},scale:{zero:!1}},y:{field:l.name,type:h,sort:S,axis:{title:l.name},scale:{zero:!1}},size:v,color:b,shape:x},background:"transparent"};w.config=md(w.config??{},t);const k=$4(w).spec,_=new w1(F1(k),{renderer:"none"});_.logger().level(-1),_.toSVG().then(E=>{r.innerHTML=E}).catch(E=>{n==null||n.error(`Scatter chart render error: ${E}`)})},getMetadata:()=>({type:"scatter_chart",field:e}),getDeclaredTagPaths:()=>[["scatter_chart"]]}}};function WZe(e,t){if(e.isBasic()){if(e.isTime())return"nominal";if(e.isString())return e===t?"quantitative":"nominal";if(e.isNumber())return"quantitative"}throw new Error("Invalid field type for shape map.")}function HZe(e,t){if(e.isNumber())return e.value;if(e.isString()){if(e.field===t){const n=Tre[e.value];return n===void 0?void 0:n}return e.value}if(!e.isNull())throw new Error("Invalid field type for shape map.")}function GZe(e,t){return e.map(n=>{const r={};for(const i of n.field.fields)r[i.name]=HZe(n.column(i.name),t);return r})}function YZe(e){return e.isRoot()?{height:350,width:500}:{height:175,width:250}}const XZe={axis:{labelFont:"var(--malloy-font-family, 'Inter')",titleFont:"var(--malloy-font-family, 'Inter')",titleFontWeight:500,titleColor:"var(--malloy-title-color, #505050)",labelColor:"var(--malloy-label-color, #000000)",titleFontSize:12},legend:{labelFont:"var(--malloy-font-family, 'Inter')",titleFont:"var(--malloy-font-family, 'Inter')",titleFontWeight:500,titleColor:"var(--malloy-title-color, #505050)",labelColor:"var(--malloy-label-color, #000000)",titleFontSize:12},header:{labelFont:"var(--malloy-font-family, 'Inter')",titleFont:"var(--malloy-font-family, 'Inter')",titleFontWeight:500},mark:{font:"var(--malloy-font-family, 'Inter')"},title:{font:"var(--malloy-font-family, 'Inter')",subtitleFont:"var(--malloy-font-family, 'Inter')",fontWeight:500}},ZZe={name:"shape_map",matches:(e,t,n)=>{const r=t.has("shape_map"),i=n===Gt.RepeatedRecord;if(r&&!i)throw new Error("Malloy Shape Map: field is a shape map, but is not a repeated record");return r&&i},create:e=>{let t={},n;return{name:"shape_map",field:e,renderMode:"dom",sizingStrategy:"fixed",beforeRender:(r,i)=>{var s;t=((s=i.getVegaConfigOverride)==null?void 0:s.call(i,"shape_map"))??{},n=i.renderFieldMetadata.logCollector},renderToDOM:(r,i)=>{if(!i.dataColumn.isRepeatedRecord())throw new Error("Malloy Shape Map: data column is not a repeated record");const s=i.dataColumn,a=s.field.fields[0],o=s.field.fields[1],l=o?WZe(o,a):void 0,u=o!==void 0?{field:o.name,type:l,axis:{title:o.name},scale:ir(l,!1)}:void 0,c=GZe(s.rows,a).filter(m=>m[a.name]!==void 0),f={...YZe(e),data:{values:c},projection:{type:"albersUsa"},layer:[{data:{values:Ac,format:{type:"topojson",feature:"states"}},mark:{type:"geoshape",fill:"#efefef",stroke:"white"}},{transform:[{lookup:a.name,from:{data:{values:Ac,format:{type:"topojson",feature:"states"}},key:"id"},as:"geo"}],mark:"geoshape",encoding:{shape:{field:"geo",type:"geojson"},color:u}}],background:"transparent",config:XZe};f.config=md(f.config??{},t);const d=$4(f).spec,h=new w1(F1(d),{renderer:"none"});h.logger().level(-1),h.toSVG().then(m=>{r.innerHTML=m}).catch(m=>{n==null||n.error(`Shape map render error: ${m}`)})},getMetadata:()=>({type:"shape_map",field:e}),getDeclaredTagPaths:()=>[["shape_map"]]}}};function QZe(e){if(e.isString())return"nominal";if(e.isNumber())return"quantitative";throw new Error("Invalid field type for segment map.")}function KZe(e){if(e.isNull())return null;if(e.isNumber()||e.isString())return e.value;throw new Error("Invalid field type for segment map.")}function JZe(e){return e.map(t=>{const n={};for(const r of t.field.fields)n[r.name]=KZe(t.column(r.name));return n})}function eQe(e){return e.isRoot()?{height:350,width:500}:{height:175,width:250}}const tQe={axis:{labelFont:"var(--malloy-font-family, 'Inter')",titleFont:"var(--malloy-font-family, 'Inter')",titleFontWeight:500,titleColor:"var(--malloy-title-color, #505050)",labelColor:"var(--malloy-label-color, #000000)",titleFontSize:12},legend:{labelFont:"var(--malloy-font-family, 'Inter')",titleFont:"var(--malloy-font-family, 'Inter')",titleFontWeight:500,titleColor:"var(--malloy-title-color, #505050)",labelColor:"var(--malloy-label-color, #000000)",titleFontSize:12},header:{labelFont:"var(--malloy-font-family, 'Inter')",titleFont:"var(--malloy-font-family, 'Inter')",titleFontWeight:500},mark:{font:"var(--malloy-font-family, 'Inter')"},title:{font:"var(--malloy-font-family, 'Inter')",subtitleFont:"var(--malloy-font-family, 'Inter')",fontWeight:500}},nQe={name:"segment_map",matches:(e,t,n)=>{const r=t.has("segment_map"),i=n===Gt.RepeatedRecord;if(r&&!i)throw new Error("Malloy Segment Map: field is a segment map, but is not a repeated record");return r&&i},create:e=>{let t={},n;return{name:"segment_map",field:e,renderMode:"dom",sizingStrategy:"fixed",beforeRender:(r,i)=>{var s;t=((s=i.getVegaConfigOverride)==null?void 0:s.call(i,"segment_map"))??{},n=i.renderFieldMetadata.logCollector},renderToDOM:(r,i)=>{if(!i.dataColumn.isRepeatedRecord())throw new Error("Malloy Segment Map: data column is not a repeated record");const s=i.dataColumn,a=s.field.fields,o=a[0],l=a[1],u=a[2],c=a[3],f=a[4],d=f?QZe(f):void 0,h=f!==void 0?{field:f.name,type:d,axis:{title:f.name},scale:ir(d,!1)}:void 0,m={...eQe(e),data:{values:JZe(s.rows)},projection:{type:"albersUsa"},layer:[{data:{values:Ac,format:{type:"topojson",feature:"states"}},mark:{type:"geoshape",fill:"lightgray",stroke:"white"}},{mark:"line",encoding:{latitude:{field:o.name,type:"quantitative"},longitude:{field:l.name,type:"quantitative"},latitude2:{field:u.name},longitude2:{field:c.name},color:h}}],background:"transparent",config:tQe};m.config=md(m.config??{},t);const p=$4(m).spec,g=new w1(F1(p),{renderer:"none"});g.logger().level(-1),g.toSVG().then(y=>{r.innerHTML=y}).catch(y=>{n==null||n.error(`Segment map render error: ${y}`)})},getMetadata:()=>({type:"segment_map",field:e}),getDeclaredTagPaths:()=>[["segment_map"]]}}};class Gie{constructor(t={}){this.globalOptions=t,this.pluginRegistry=[fZe,Vie,Hie,VZe,ZZe,nQe,...t.plugins||[]]}createViz(t={}){const n={...this.globalOptions,...t};return new Pa(n,this.pluginRegistry)}updateOptions(t){this.globalOptions={...this.globalOptions,...t}}getOptions(){return{...this.globalOptions}}getRegisteredPlugins(){return[...this.pluginRegistry]}}class rQe{constructor(t){this.document=t,this.lastRenderedElement=null,this.lastViz=null}async render(t,n){if(M7(t.model_annotations,"## ").has("renderer_legacy")||n.useLegacy===!0)console.warn("Tried to use the new Malloy renderer, but the malloy-render component was not found. Falling back to the legacy renderer.");else{const o=new Gie,l=n.nextRendererOptions??{},u=o.createViz(l);u.setResult(t);const c=this.document.createElement("div");return u.render(c),this.lastRenderedElement=c,this.lastViz=u,c}const s=vR(t),a=Xie(s.field,this.document,n,{size:"large"},s.field.queryTimezone,s.field.tag);try{const o=await a.render(s);return this.lastRenderedElement=o,this.lastViz=null,o}catch(o){if(o instanceof Error){const l=as(this.document,o);return this.lastRenderedElement=l,this.lastViz=null,l}else{const l=as(this.document,"Internal error - Exception not an Error object.");return this.lastRenderedElement=l,this.lastViz=null,l}}}async getHTML(){if(!this.lastRenderedElement)throw new Error("No element has been rendered yet");return this.lastViz?this.lastViz.getHTML():this.lastRenderedElement.innerHTML}}class iQe{constructor(t){this.document=t}async render(t){const n=new wT(this.document);try{return await n.render(t)}catch(r){return r instanceof Error?as(this.document,r):as(this.document,"Internal error - Exception not an Error object.")}}}const Yie={shape_map:"shape_map",point_map:"point_map",bar_chart:"bar_chart",image:"image",json:"json",segment_map:"segment_map",dashboard:"dashboard",line_chart:"line_chart",scatter_chart:"scatter_chart",url:"url",list:"list",list_detail:"list_detail",sparkline:"sparkline",sparkline_area:"sparkline",sparkline_column:"sparkline",sparkline_bar:"sparkline"};function sQe(e,t){const n=t[e.name],{name:r}=e;for(const i in Yie)if(r.endsWith(`_${i}`)){const s=r.slice(0,r.length-i.length-1);return aQe(i,s,Yie,n)}return n}function aQe(e,t,n,r){var i;return r?(r.renderer??(r.renderer=n[e]),r.data??(r.data={}),(i=r.data).label??(i.label=t)):r={renderer:n[e],data:{label:t}},r}function zx(e){if(e.isRecordOrRepeatedRecord())return e;throw new Error(`${e.name} does not contain fields and cannot be rendered this way`)}function Xie(e,t,n,r,i,s){const a=sQe(e,n.dataStyles);n.dataStyles[e.name]=a;const o=new JF().create(a,s,t,r,n,e,i);if(o)return o;if((a==null?void 0:a.renderer)==="dashboard"||s.has("dashboard"))return Px(eT,t,zx(e),n,s);if((a==null?void 0:a.renderer)==="list"||s.has("list"))return Px(Bre,t,zx(e),n,s);if((a==null?void 0:a.renderer)==="list_detail"||s.has("list_detail"))return Px(JHe,t,zx(e),n,s);if((a==null?void 0:a.renderer)==="table"||s.has("table")||e.isRecordOrRepeatedRecord())return Px(m0,t,zx(e),n,s);throw new Error(`Could not find a proper renderer for field ${e.name}`)}function Px(e,t,n,r,i){const s=h2.make(e,t,n,r,i),a={};return n.fields.forEach(o=>{a[o.name]=Xie(o,t,r,s.defaultStylesForChildren,o.getEffectiveQueryTimezone(),o.tag)}),s.childRenderers=a,s}function oQe(e){return"getSchema"in e&&"getSettings"in e&&"getDefaultSettings"in e&&"settingsToTag"in e&&typeof e.getSchema=="function"&&typeof e.getSettings=="function"&&typeof e.getDefaultSettings=="function"&&typeof e.settingsToTag=="function"}mn.BarChartPluginFactory=Vie,mn.BigValuePluginFactory=Hie,mn.Currency=Rd,mn.DataVolumeUnit=au,mn.DurationUnit=lt,mn.ErrorPlugin=Mie,mn.HTMLView=rQe,mn.JSONView=iQe,mn.MalloyRenderer=Gie,mn.barChartSettingsSchema=jie,mn.bigValueSettingsSchema=Wie,mn.defaultBarChartSettings=gr,mn.defaultBigValueSettings=bd,mn.defaultLineChartSettings=Ql,mn.isCoreVizPluginInstance=oQe,mn.isDurationUnit=a7,mn.lineChartSettingsSchema=Nie,Object.defineProperty(mn,Symbol.toStringTag,{value:"Module"})});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@malloydata/render",
3
- "version": "0.0.357",
3
+ "version": "0.0.359",
4
4
  "license": "MIT",
5
5
  "main": "dist/module/index.umd.js",
6
6
  "types": "dist/module/index.d.ts",
@@ -29,8 +29,8 @@
29
29
  "generate-flow": "ts-node ../../scripts/gen-flow.ts"
30
30
  },
31
31
  "dependencies": {
32
- "@malloydata/malloy-interfaces": "0.0.357",
33
- "@malloydata/malloy-tag": "0.0.357",
32
+ "@malloydata/malloy-interfaces": "0.0.359",
33
+ "@malloydata/malloy-tag": "0.0.359",
34
34
  "@tanstack/solid-virtual": "^3.10.4",
35
35
  "lodash": "^4.17.20",
36
36
  "luxon": "^3.5.0",
@@ -42,8 +42,8 @@
42
42
  "vega-lite": "^5.2.0"
43
43
  },
44
44
  "devDependencies": {
45
- "@malloydata/db-duckdb": "0.0.357",
46
- "@malloydata/malloy": "0.0.357",
45
+ "@malloydata/db-duckdb": "0.0.359",
46
+ "@malloydata/malloy": "0.0.359",
47
47
  "@storybook/addon-essentials": "^8.6.15",
48
48
  "@storybook/addon-interactions": "^8.6.15",
49
49
  "@storybook/addon-links": "^8.6.15",