@peak-ai/canvas 1.4.47 → 1.4.48-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@peak-ai/canvas",
3
3
  "author": "squad-builder-experience",
4
4
  "license": "UNLICENSED",
5
- "version": "1.4.47",
5
+ "version": "1.4.48-rc.1",
6
6
  "description": "",
7
7
  "dependencies": {
8
8
  "@emotion/react": "^11.11.4",
@@ -1,5 +1,5 @@
1
1
  import _extends from"@babel/runtime/helpers/extends";/* eslint-disable import/no-named-as-default-member *//* eslint-disable func-names *//* eslint-disable @typescript-eslint/no-explicit-any */import ReactDOM from"react-dom";import{getRenderers}from"./helpers/render-components";import{QueryCacheProvider}from"./helpers/query-cache-context";import{jsx as _jsx}from"react/jsx-runtime";export function createGrapesjsShadcnGenericPlugin(mode,performInteraction,renderedComponents,setHasChanged,isTemplateView,isStreaming){if(renderedComponents===void 0){renderedComponents={}}if(isTemplateView===void 0){isTemplateView=false}if(isStreaming===void 0){isStreaming=false}return function grapesjsShadcnGenericPlugin(editor){editor.DomComponents.addType("shadcn-generic",{model:{defaults:{tagName:"div",droppable:false,componentName:"Card",componentProps:{},traits:[]}},view:{events:{"input [data-slot]":"handleSlotInput"},handleSlotInput:function handleSlotInput(e){var target=e.target;var slot=target.dataset.slot;var text=target.innerText;var props=this.model.get("componentProps")||{};if(!slot){return}if(slot.startsWith("table-header-")){var _props$data;var idx=parseInt(slot.split("-")[2],10);var dataKeys=Object.keys(((_props$data=props.data)==null?void 0:_props$data[0])||{});if(!props.headerMapper){props.headerMapper={}}var key=dataKeys[idx];if(key){props.headerMapper[key]=text}}else{props[slot]=text}this.model.set("componentProps",_extends({},props));if(!["search-input"].includes(slot)){setHasChanged(true)}},render:function render(){var _this=this;var compName=this.model.get("componentName");var compProps=this.model.get("componentProps");if(typeof compProps==="string"){try{compProps=JSON.parse(compProps)}catch(err){// eslint-disable-next-line no-console
2
- console.error("Invalid JSON in componentProps",err);compProps={}}}compProps.performInteraction=performInteraction;compProps.isTemplateView=isTemplateView;compProps.isEditable=mode==="editor"&&!isStreaming;compProps.onChange=function(data){_this.model.set("componentProps",_extends({},_this.model.get("componentProps"),data))};var renderers=getRenderers();var Renderer=renderers[compName];if(Renderer){if(compName==="Tabs"){ReactDOM.render(/*#__PURE__*/_jsx(QueryCacheProvider,{maxCacheSize:100,maxCacheAge:5*60*1000,children:/*#__PURE__*/_jsx(Renderer,_extends({},compProps,{gjsModel:this.model}))}),this.el);var children=this.model.components();var tabsContent=this.el.querySelectorAll(".tabs-content");var tabAttributes=this.model.get("attributes")||{};var hasTabsError=tabAttributes.error||compProps.error;var hasTabsMissing=tabAttributes.isMissing||compProps.isMissing;var isFallback=Array.from(tabsContent).some(function(el){return el.dataset.fallback==="true"});if(!isFallback&&tabsContent.length>0){// Helper function to sync child attributes
2
+ console.error("Invalid JSON in componentProps",err);compProps={}}}console.log({mode:mode,isStreaming:isStreaming});compProps.performInteraction=performInteraction;compProps.isTemplateView=isTemplateView;compProps.isEditable=mode==="editor"&&!isStreaming;compProps.onChange=function(data){_this.model.set("componentProps",_extends({},_this.model.get("componentProps"),data))};var renderers=getRenderers();var Renderer=renderers[compName];if(Renderer){if(compName==="Tabs"){ReactDOM.render(/*#__PURE__*/_jsx(QueryCacheProvider,{maxCacheSize:100,maxCacheAge:5*60*1000,children:/*#__PURE__*/_jsx(Renderer,_extends({},compProps,{gjsModel:this.model}))}),this.el);var children=this.model.components();var tabsContent=this.el.querySelectorAll(".tabs-content");var tabAttributes=this.model.get("attributes")||{};var hasTabsError=tabAttributes.error||compProps.error;var hasTabsMissing=tabAttributes.isMissing||compProps.isMissing;var isFallback=Array.from(tabsContent).some(function(el){return el.dataset.fallback==="true"});if(!isFallback&&tabsContent.length>0){// Helper function to sync child attributes
3
3
  // eslint-disable-next-line no-inner-declarations
4
4
  var syncChildAttributes=function syncChildAttributes(childModel){var childAttributes=childModel.get("attributes")||{};var childProps=childModel.get("componentProps")||{};var hasError=hasTabsError||childAttributes.error||childProps.error;var hasMissing=hasTabsMissing||childAttributes.isMissing||childProps.isMissing;if(hasError||hasMissing){var newAttributes=_extends({},childAttributes,{loading:false,error:hasError,isMissing:hasMissing,inheritedFromParent:!!(hasTabsError||hasTabsMissing)});childModel.set("attributes",newAttributes,{silent:false})}};children.each(function(childModel,i){var childView=_this.createView(childModel);if(childView&&tabsContent[i]){childView.render();tabsContent[i].appendChild(childView.el);setTimeout(function(){syncChildAttributes(childModel)},100);childModel.on("change:attributes",function(){syncChildAttributes(childModel)})}})}}else{ReactDOM.render(/*#__PURE__*/_jsx(QueryCacheProvider,{maxCacheSize:100,maxCacheAge:5*60*1000,children:/*#__PURE__*/_jsx(Renderer,_extends({},compProps,{gjsModel:this.model}))}),this.el)}}else{this.el.innerHTML="<div>Unsupported component: "+compName+"</div>"}renderedComponents[this.model.get("id")]=this.model;return this},createView:function createView(model){var _this$em$get$getType;var ComponentView=(_this$em$get$getType=this.em.get("DomComponents").getType(model.get("type")))==null?void 0:_this$em$get$getType.view;if(!ComponentView){// eslint-disable-next-line no-console
5
5
  console.warn("No view found for component type:",model.get("type"));return null}var view=new ComponentView({model:model,config:this.config,componentTypes:this.componentTypes});return view},remove:function remove(){// eslint-disable-next-line import/no-named-as-default-member
@@ -1 +1 @@
1
- {"version":3,"file":"grapejs-plugin.js","names":["ReactDOM","getRenderers","QueryCacheProvider","jsx","_jsx","createGrapesjsShadcnGenericPlugin","mode","performInteraction","renderedComponents","setHasChanged","isTemplateView","isStreaming","grapesjsShadcnGenericPlugin","editor","DomComponents","addType","model","defaults","tagName","droppable","componentName","componentProps","traits","view","events","handleSlotInput","e","target","slot","dataset","text","innerText","props","get","startsWith","_props$data","idx","parseInt","split","dataKeys","Object","keys","data","headerMapper","key","set","_extends","includes","render","_this","compName","compProps","JSON","parse","err","console","error","isEditable","onChange","renderers","Renderer","maxCacheSize","maxCacheAge","children","gjsModel","el","components","tabsContent","querySelectorAll","tabAttributes","hasTabsError","hasTabsMissing","isMissing","isFallback","Array","from","some","fallback","length","syncChildAttributes","childModel","childAttributes","childProps","hasError","hasMissing","newAttributes","loading","inheritedFromParent","silent","each","i","childView","createView","appendChild","setTimeout","on","innerHTML","_this$em$get$getType","ComponentView","em","getType","warn","config","componentTypes","remove","unmountComponentAtNode"],"sources":["../../src/plugins/grapejs-plugin.tsx"],"sourcesContent":["/* eslint-disable import/no-named-as-default-member */\n/* eslint-disable func-names */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport ReactDOM from 'react-dom';\nimport { Editor, Component } from 'grapesjs';\nimport { getRenderers } from './helpers/render-components';\nimport { QueryCacheProvider } from './helpers/query-cache-context';\n\nexport function createGrapesjsShadcnGenericPlugin(\n mode: 'editor' | 'preview',\n performInteraction: (payload: Record<string, any>) => void,\n renderedComponents: Record<string, Component> = {},\n setHasChanged: (hasChanged: boolean) => void,\n isTemplateView = false,\n isStreaming = false,\n) {\n return function grapesjsShadcnGenericPlugin(editor: Editor): void {\n editor.DomComponents.addType('shadcn-generic', {\n model: {\n defaults: {\n tagName: 'div',\n droppable: false,\n componentName: 'Card',\n componentProps: {},\n traits: [],\n },\n },\n view: {\n events: {\n 'input [data-slot]': 'handleSlotInput',\n } as any,\n handleSlotInput(e: Event) {\n const target = e.target as HTMLElement;\n const slot = target.dataset.slot;\n const text = target.innerText;\n\n const props = this.model.get('componentProps') || {};\n\n if (!slot) {\n return;\n }\n\n if (slot.startsWith('table-header-')) {\n const idx = parseInt(slot.split('-')[2], 10);\n const dataKeys = Object.keys(props.data?.[0] || {});\n\n if (!props.headerMapper) {\n props.headerMapper = {};\n }\n\n const key = dataKeys[idx];\n\n if (key) {\n props.headerMapper[key] = text;\n }\n } else {\n props[slot] = text;\n }\n\n this.model.set('componentProps', {\n ...props,\n });\n\n if (!['search-input'].includes(slot)) {\n setHasChanged(true);\n }\n },\n render: function () {\n const compName: string = this.model.get('componentName');\n let compProps: any = this.model.get('componentProps');\n\n if (typeof compProps === 'string') {\n try {\n compProps = JSON.parse(compProps);\n } catch (err) {\n // eslint-disable-next-line no-console\n console.error('Invalid JSON in componentProps', err);\n compProps = {};\n }\n }\n\n compProps.performInteraction = performInteraction;\n compProps.isTemplateView = isTemplateView;\n compProps.isEditable = mode === 'editor' && !isStreaming;\n\n compProps.onChange = (data: Record<string, any>) => {\n this.model.set('componentProps', {\n ...this.model.get('componentProps'),\n ...data,\n });\n };\n\n const renderers = getRenderers();\n const Renderer = renderers[compName];\n\n if (Renderer) {\n if (compName === 'Tabs') {\n ReactDOM.render(\n <QueryCacheProvider maxCacheSize={100} maxCacheAge={5 * 60 * 1000}>\n <Renderer {...compProps} gjsModel={this.model} />\n </QueryCacheProvider>,\n this.el,\n );\n\n const children = this.model.components();\n const tabsContent = this.el.querySelectorAll('.tabs-content');\n\n const tabAttributes = this.model.get('attributes') || {};\n const hasTabsError = tabAttributes.error || compProps.error;\n const hasTabsMissing = tabAttributes.isMissing || compProps.isMissing;\n const isFallback = Array.from(tabsContent).some(\n (el: Element) => (el as HTMLElement).dataset.fallback === 'true',\n );\n\n if (!isFallback && tabsContent.length > 0) {\n // Helper function to sync child attributes\n // eslint-disable-next-line no-inner-declarations\n function syncChildAttributes(childModel: any) {\n const childAttributes = childModel.get('attributes') || {};\n const childProps = childModel.get('componentProps') || {};\n\n const hasError = hasTabsError || childAttributes.error || childProps.error;\n const hasMissing =\n hasTabsMissing || childAttributes.isMissing || childProps.isMissing;\n\n if (hasError || hasMissing) {\n const newAttributes = {\n ...childAttributes,\n loading: false,\n error: hasError,\n isMissing: hasMissing,\n inheritedFromParent: !!(hasTabsError || hasTabsMissing),\n };\n\n childModel.set('attributes', newAttributes, { silent: false });\n }\n }\n\n children.each((childModel, i) => {\n const childView = this.createView(childModel);\n\n if (childView && tabsContent[i]) {\n childView.render();\n tabsContent[i].appendChild(childView.el);\n\n setTimeout(() => {\n syncChildAttributes(childModel);\n }, 100);\n\n childModel.on('change:attributes', () => {\n syncChildAttributes(childModel);\n });\n }\n });\n }\n } else {\n ReactDOM.render(\n <QueryCacheProvider maxCacheSize={100} maxCacheAge={5 * 60 * 1000}>\n <Renderer {...compProps} gjsModel={this.model} />\n </QueryCacheProvider>,\n this.el,\n );\n }\n } else {\n this.el.innerHTML = `<div>Unsupported component: ${compName}</div>`;\n }\n\n renderedComponents[this.model.get('id')] = this.model;\n\n return this;\n },\n createView(model: any) {\n const ComponentView = this.em.get('DomComponents').getType(model.get('type'))?.view;\n\n if (!ComponentView) {\n // eslint-disable-next-line no-console\n console.warn('No view found for component type:', model.get('type'));\n\n return null;\n }\n\n const view = new ComponentView({\n model,\n config: this.config,\n componentTypes: this.componentTypes,\n });\n\n return view;\n },\n remove: function () {\n // eslint-disable-next-line import/no-named-as-default-member\n ReactDOM.unmountComponentAtNode(this.el);\n\n return this;\n },\n },\n });\n };\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"grapejs-plugin.js","names":["ReactDOM","getRenderers","QueryCacheProvider","jsx","_jsx","createGrapesjsShadcnGenericPlugin","mode","performInteraction","renderedComponents","setHasChanged","isTemplateView","isStreaming","grapesjsShadcnGenericPlugin","editor","DomComponents","addType","model","defaults","tagName","droppable","componentName","componentProps","traits","view","events","handleSlotInput","e","target","slot","dataset","text","innerText","props","get","startsWith","_props$data","idx","parseInt","split","dataKeys","Object","keys","data","headerMapper","key","set","_extends","includes","render","_this","compName","compProps","JSON","parse","err","console","error","log","isEditable","onChange","renderers","Renderer","maxCacheSize","maxCacheAge","children","gjsModel","el","components","tabsContent","querySelectorAll","tabAttributes","hasTabsError","hasTabsMissing","isMissing","isFallback","Array","from","some","fallback","length","syncChildAttributes","childModel","childAttributes","childProps","hasError","hasMissing","newAttributes","loading","inheritedFromParent","silent","each","i","childView","createView","appendChild","setTimeout","on","innerHTML","_this$em$get$getType","ComponentView","em","getType","warn","config","componentTypes","remove","unmountComponentAtNode"],"sources":["../../src/plugins/grapejs-plugin.tsx"],"sourcesContent":["/* eslint-disable import/no-named-as-default-member */\n/* eslint-disable func-names */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport ReactDOM from 'react-dom';\nimport { Editor, Component } from 'grapesjs';\nimport { getRenderers } from './helpers/render-components';\nimport { QueryCacheProvider } from './helpers/query-cache-context';\n\nexport function createGrapesjsShadcnGenericPlugin(\n mode: 'editor' | 'preview',\n performInteraction: (payload: Record<string, any>) => void,\n renderedComponents: Record<string, Component> = {},\n setHasChanged: (hasChanged: boolean) => void,\n isTemplateView = false,\n isStreaming = false,\n) {\n return function grapesjsShadcnGenericPlugin(editor: Editor): void {\n editor.DomComponents.addType('shadcn-generic', {\n model: {\n defaults: {\n tagName: 'div',\n droppable: false,\n componentName: 'Card',\n componentProps: {},\n traits: [],\n },\n },\n view: {\n events: {\n 'input [data-slot]': 'handleSlotInput',\n } as any,\n handleSlotInput(e: Event) {\n const target = e.target as HTMLElement;\n const slot = target.dataset.slot;\n const text = target.innerText;\n\n const props = this.model.get('componentProps') || {};\n\n if (!slot) {\n return;\n }\n\n if (slot.startsWith('table-header-')) {\n const idx = parseInt(slot.split('-')[2], 10);\n const dataKeys = Object.keys(props.data?.[0] || {});\n\n if (!props.headerMapper) {\n props.headerMapper = {};\n }\n\n const key = dataKeys[idx];\n\n if (key) {\n props.headerMapper[key] = text;\n }\n } else {\n props[slot] = text;\n }\n\n this.model.set('componentProps', {\n ...props,\n });\n\n if (!['search-input'].includes(slot)) {\n setHasChanged(true);\n }\n },\n render: function () {\n const compName: string = this.model.get('componentName');\n let compProps: any = this.model.get('componentProps');\n\n if (typeof compProps === 'string') {\n try {\n compProps = JSON.parse(compProps);\n } catch (err) {\n // eslint-disable-next-line no-console\n console.error('Invalid JSON in componentProps', err);\n compProps = {};\n }\n }\n\n console.log({ mode, isStreaming });\n\n compProps.performInteraction = performInteraction;\n compProps.isTemplateView = isTemplateView;\n compProps.isEditable = mode === 'editor' && !isStreaming;\n\n compProps.onChange = (data: Record<string, any>) => {\n this.model.set('componentProps', {\n ...this.model.get('componentProps'),\n ...data,\n });\n };\n\n const renderers = getRenderers();\n const Renderer = renderers[compName];\n\n if (Renderer) {\n if (compName === 'Tabs') {\n ReactDOM.render(\n <QueryCacheProvider maxCacheSize={100} maxCacheAge={5 * 60 * 1000}>\n <Renderer {...compProps} gjsModel={this.model} />\n </QueryCacheProvider>,\n this.el,\n );\n\n const children = this.model.components();\n const tabsContent = this.el.querySelectorAll('.tabs-content');\n\n const tabAttributes = this.model.get('attributes') || {};\n const hasTabsError = tabAttributes.error || compProps.error;\n const hasTabsMissing = tabAttributes.isMissing || compProps.isMissing;\n const isFallback = Array.from(tabsContent).some(\n (el: Element) => (el as HTMLElement).dataset.fallback === 'true',\n );\n\n if (!isFallback && tabsContent.length > 0) {\n // Helper function to sync child attributes\n // eslint-disable-next-line no-inner-declarations\n function syncChildAttributes(childModel: any) {\n const childAttributes = childModel.get('attributes') || {};\n const childProps = childModel.get('componentProps') || {};\n\n const hasError = hasTabsError || childAttributes.error || childProps.error;\n const hasMissing =\n hasTabsMissing || childAttributes.isMissing || childProps.isMissing;\n\n if (hasError || hasMissing) {\n const newAttributes = {\n ...childAttributes,\n loading: false,\n error: hasError,\n isMissing: hasMissing,\n inheritedFromParent: !!(hasTabsError || hasTabsMissing),\n };\n\n childModel.set('attributes', newAttributes, { silent: false });\n }\n }\n\n children.each((childModel, i) => {\n const childView = this.createView(childModel);\n\n if (childView && tabsContent[i]) {\n childView.render();\n tabsContent[i].appendChild(childView.el);\n\n setTimeout(() => {\n syncChildAttributes(childModel);\n }, 100);\n\n childModel.on('change:attributes', () => {\n syncChildAttributes(childModel);\n });\n }\n });\n }\n } else {\n ReactDOM.render(\n <QueryCacheProvider maxCacheSize={100} maxCacheAge={5 * 60 * 1000}>\n <Renderer {...compProps} gjsModel={this.model} />\n </QueryCacheProvider>,\n this.el,\n );\n }\n } else {\n this.el.innerHTML = `<div>Unsupported component: ${compName}</div>`;\n }\n\n renderedComponents[this.model.get('id')] = this.model;\n\n return this;\n },\n createView(model: any) {\n const ComponentView = this.em.get('DomComponents').getType(model.get('type'))?.view;\n\n if (!ComponentView) {\n // eslint-disable-next-line no-console\n console.warn('No view found for component type:', model.get('type'));\n\n return null;\n }\n\n const view = new ComponentView({\n model,\n config: this.config,\n componentTypes: this.componentTypes,\n });\n\n return view;\n },\n remove: function () {\n // eslint-disable-next-line import/no-named-as-default-member\n ReactDOM.unmountComponentAtNode(this.el);\n\n return this;\n },\n },\n });\n };\n}\n"],"mappings":"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","ignoreList":[]}