@svgrid/enterprise 2.5.1 → 2.5.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cdn/svgrid-enterprise.svelte-external.js +5 -3
- package/dist/designer/assets/{index-OwdzSsmo.js → index-CM5xvaOy.js} +3 -3
- package/dist/designer/assets/{src-LRVqg7Sf.js → src-D-ET9Mmo.js} +2 -2
- package/dist/designer/index.html +2 -2
- package/dist/node/studio.js +1 -1
- package/package.json +1 -1
- package/src/license-expiry.test.ts +36 -0
- package/src/license.ts +15 -10
- package/src/version.ts +1 -1
|
@@ -30,7 +30,7 @@ Contact sales@jqwidgets.com for details or visit the license page: https://svgri
|
|
|
30
30
|
<p style="margin:10px 0 0;font-size:11px;color:#64748b;">
|
|
31
31
|
Already licensed? Call <code style="color:#94a3b8;">setLicenseKey()</code> at startup to hide this.
|
|
32
32
|
</p>
|
|
33
|
-
`,n.querySelector(`[data-act="x"]`)?.addEventListener(`click`,()=>Pp(n)),n.querySelector(`[data-act="trial"]`)?.addEventListener(`click`,()=>Pp(n)),n.querySelector(`[data-act="pricing"]`)?.addEventListener(`click`,()=>Pp(n)),n}function Ip(e){return e.replace(/&/g,`&`).replace(/</g,`<`).replace(/>/g,`>`).replace(/"/g,`"`)}var Lp=null,Rp=!1;function zp(){return Lp!=null}function Bp(e){let t=fp(Lp);t.valid&&!t.expired||
|
|
33
|
+
`,n.querySelector(`[data-act="x"]`)?.addEventListener(`click`,()=>Pp(n)),n.querySelector(`[data-act="trial"]`)?.addEventListener(`click`,()=>Pp(n)),n.querySelector(`[data-act="pricing"]`)?.addEventListener(`click`,()=>Pp(n)),n}function Ip(e){return e.replace(/&/g,`&`).replace(/</g,`<`).replace(/>/g,`>`).replace(/"/g,`"`)}var Lp=null,Rp=!1;function zp(){return Lp!=null}function Bp(e){let t=fp(Lp);if(t.valid&&!t.expired)return;let n=t.valid&&t.expired===!0;n||xp(),Np(e,{expired:n})}function Vp(e){let t=fp(Lp);switch(t.status){case`unset`:xp(),Np(e);return;case`invalid`:throw Error(`@svgrid/enterprise: invalid license key format (expected "${up}..." prefix).`);case`revoked`:throw Error(`@svgrid/enterprise: this license key has been revoked. Contact sales@jqwidgets.com for a replacement.`);case`dev`:case`eval`:if(t.expired){Np(e,{expired:!0});return}Rp||=(console.info(`@svgrid/enterprise: using a development / evaluation license. Not for production use.`),!0);return;case`licensed`:return}}var Hp=!1;function Up(){if(Hp)return;if(typeof window>`u`)throw Error(`@svgrid/enterprise: installSmartShim() requires a browser environment`);let e=window.Smart??{Utilities:{}};e.Utilities=e.Utilities??{},typeof e.Utilities.Assign!=`function`&&(e.Utilities.Assign=(t,n)=>{e.Utilities[t]=n}),(!e.Utilities.Core||typeof e.Utilities.Core.toDash!=`function`)&&(e.Utilities.Core={toDash:e=>e.replace(/[A-Z]/g,e=>`-`+e.toLowerCase())}),window.Smart=e,Hp=!0}var Wp=/[\x00-\x08\x0B\x0C\x0E-\x1F]/g;function Gp(e){return e.replace(Wp,``).replace(/&/g,`&`).replace(/</g,`<`).replace(/>/g,`>`).replace(/"/g,`"`)}function Kp(e){let t=(e,t=2)=>String(e).padStart(t,`0`);return`${e.getFullYear()}-${t(e.getMonth()+1)}-${t(e.getDate())}T${t(e.getHours())}:${t(e.getMinutes())}:${t(e.getSeconds())}.000`}async function qp(e,t,n,r={}){let i=Math.max(1,r.chunkRows??5e3),a=n.length,o=r.rawValues===!0,s=r.cellVisual,c=r.precisionSafe===!0,l=new Map,u=[`<Style ss:ID="sHeader"><Font ss:Bold="1"/><Interior ss:Color="#F2F2F2" ss:Pattern="Solid"/></Style>`],d=e=>e===`right`?`Right`:e===`center`?`Center`:`Left`,f=e=>{let t=e.align&&e.align!==`left`;if(!e.numFmt&&!e.fill&&!e.color&&!e.bold&&!t)return;let n=`${e.numFmt??``}|${e.fill??``}|${e.color??``}|${e.bold?`b`:``}|${e.align??``}`,r=l.get(n);if(r)return r;let i=`s${l.size+1}`,a=[];return t&&a.push(`<Alignment ss:Horizontal="${d(e.align)}"/>`),(e.color||e.bold)&&a.push(`<Font${e.color?` ss:Color="${e.color}"`:``}${e.bold?` ss:Bold="1"`:``}/>`),e.fill&&a.push(`<Interior ss:Color="${e.fill}" ss:Pattern="Solid"/>`),e.numFmt&&a.push(`<NumberFormat ss:Format="${Gp(e.numFmt)}"/>`),u.push(`<Style ss:ID="${i}">${a.join(``)}</Style>`),l.set(n,i),i};function p(e,t,n,r){let i=e.link?.(t)||void 0,a=s?.(n,r),l=t=>f({numFmt:t,fill:a?.fill,color:a?.color,bold:a?.bold,align:e.align});if(e.exportValue){let n=e.exportValue(t),r=n==null?``:String(n);return{type:`String`,value:a?.icon?`${a.icon} ${r}`:r,styleId:l(),href:i}}let u=t[e.field];if(a?.icon){let t=o?String(u??``):me(u,e.format);return{type:`String`,value:`${a.icon} ${t}`,styleId:l(),href:i}}let d=e=>c&&Math.abs(e)>=0x38d7ea4c68000;if(o){let e=u==null?``:String(u);return typeof u==`number`&&Number.isFinite(u)&&!d(u)?{type:`Number`,value:e,styleId:l(),href:i}:{type:`String`,value:e,styleId:l(),href:i}}let p=pe(u,e.format);if(p.ok){let t=Se(e.format);return p.value instanceof Date?{type:`DateTime`,value:Kp(p.value),styleId:l(t),href:i}:d(p.value)?{type:`String`,value:String(p.value),styleId:l(),href:i}:{type:`Number`,value:String(p.value),styleId:l(t),href:i}}return{type:`String`,value:me(u,e.format),styleId:l(),href:i}}let m=e=>`<Cell${e.styleId?` ss:StyleID="${e.styleId}"`:``}${e.href?` ss:HRef="${Gp(e.href)}"`:``}><Data ss:Type="${e.type}">${Gp(e.value)}</Data></Cell>`,h=r.widths?r.widths.map(e=>`<Column ss:Width="${Math.round(e*.75)}"/>`).join(``):``,g=Math.max(0,Math.floor(r.freezeColumns??0)),_=r.freezeHeader||g>0?`<WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel"><FreezePanes/><FrozenNoSplit/>`+(r.freezeHeader?`<SplitHorizontal>1</SplitHorizontal><TopRowBottomPane>1</TopRowBottomPane>`:``)+(g>0?`<SplitVertical>${g}</SplitVertical><LeftColumnRightPane>${g}</LeftColumnRightPane>`:``)+`<ActivePane>2</ActivePane></WorksheetOptions>`:``,v=[`<Row>${t.map(e=>`<Cell ss:StyleID="sHeader"><Data ss:Type="String">${Gp(e.header??e.field)}</Data></Cell>`).join(``)}</Row>`];for(let e=0;e<a;e++){if(r.signal?.aborted)throw new DOMException(`Export aborted`,`AbortError`);let o=n[e],s=t.map((t,n)=>m(p(t,o,e,n))).join(``);v.push(`<Row>${s}</Row>`),e>0&&e%i===0&&(r.onProgress?.({phase:`serialize`,ratio:e/a,row:e,total:a}),await new Promise(e=>setTimeout(e,0)))}return r.onProgress?.({phase:`serialize`,ratio:1,row:a,total:a}),`<?xml version="1.0"?>
|
|
34
34
|
<?mso-application progid="Excel.Sheet"?>
|
|
35
35
|
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:html="http://www.w3.org/TR/REC-html40"><Styles>${u.join(``)}</Styles><Worksheet ss:Name="${Gp(e.slice(0,31)||`Sheet1`)}"><Table>${h}${v.join(``)}</Table>`+_+`</Worksheet></Workbook>`}var Jp={"&":`&`,"<":`<`,">":`>`,'"':`"`,"'":`'`},Yp=/[\x00-\x08\x0B\x0C\x0E-\x1F]/g;function Xp(e){return e.replace(Yp,``).replace(/[&<>"']/g,e=>Jp[e])}function Zp(e){let t=e,n=``;do n=String.fromCharCode(65+t%26)+n,t=Math.floor(t/26)-1;while(t>=0);return n}function Qp(e){if(!e)return null;let t=/^#?([0-9a-f]{6})$/i.exec(e.trim());return t?`FF`+t[1].toUpperCase():null}function $p(e){let t=Date.UTC(1899,11,30);return(e.getTime()-t)/864e5}var em=`<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
|
36
36
|
<Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types"><Default Extension="rels" ContentType="application/vnd.openxmlformats-package.relationships+xml"/><Default Extension="xml" ContentType="application/xml"/><Override PartName="/xl/workbook.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml"/><Override PartName="/xl/worksheets/sheet1.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"/><Override PartName="/xl/styles.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml"/></Types>`,tm=`<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
|
@@ -475,7 +475,7 @@ ${M}
|
|
|
475
475
|
.st-home a { color: var(--sg-accent, #6366f1); font-weight: 600; }
|
|
476
476
|
@keyframes st-home-spin { to { transform: rotate(360deg); } }
|
|
477
477
|
</style>
|
|
478
|
-
`}}function BT(e){for(let t of e)fv(t);let t=new Map(e.map(e=>[e.name,e])),n=e.map(e=>{let n=fT(e,t);return{schema:pT(e,n),infos:n}});return{entries:n,seed:mT(n)}}function VT(e,t={}){let{entries:n,seed:r}=BT(e),{file:i,needs:a}=IT(n,r,t.sources,t.supabaseConn),o=[_T(n),i];(a.supabase||t.supabaseAuth)&&!a.supabaseUrl&&(t.supabaseConn?.url||t.supabaseConn?.key)&&(a.supabaseUrl=t.supabaseConn.url,a.supabaseKey=t.supabaseConn.key),(a.supabase||t.supabaseAuth)&&o.push(LT(a));for(let e of a.sqlRoutes)o.push(OT(e.schema,e.table,e.dialect,{access:t.accessEnabled,audit:t.auditEnabled,screenIds:t.screensByEntity?.get(e.schema.name)??[],triggers:t.triggers?.[e.schema.name],dbSchema:e.dbSchema,tenantField:t.tenantField&&t.tenantScoped?.(e.schema.name)!==!1?t.tenantField:void 0}));return{files:o,prepared:n.map(e=>e.schema)}}var HT={light:{danger:`#dc2626`,success:`#16a34a`,warning:`#d97706`,info:`#0891b2`},dark:{danger:`#f87171`,success:`#4ade80`,warning:`#fbbf24`,info:`#22d3ee`}},UT=[{id:`ember`,name:`Ember`,radius:6,font:`ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, sans-serif`,headerType:{weight:`500`},light:{bg:`#ffffff`,fg:`#1c1917`,muted:`#78716c`,border:`#e7e5e4`,headerBg:`#fafaf9`,headerFg:`#78716c`,accent:`#ff3e00`,rowAlt:`#ffffff`,rowHover:`#f5f5f4`,selectionBg:`#ffece3`,bgSubtle:`#fafaf9`,pinnedBg:`#fafaf9`,pinnedHeaderBg:`#f5f5f4`,pinnedDivider:`#e7e5e4`,pinnedBorder:`#e7e5e4`,pinnedShadow:`rgba(28, 25, 23, 0.10)`},dark:{bg:`#0c0a09`,fg:`#fafaf9`,muted:`#a8a29e`,border:`#292524`,headerBg:`#1c1917`,headerFg:`#a8a29e`,accent:`#ff5a1f`,rowAlt:`#0c0a09`,rowHover:`#1c1917`,selectionBg:`#3a2318`,bgSubtle:`#1c1917`,pinnedBg:`#151312`,pinnedHeaderBg:`#1c1917`,pinnedDivider:`#292524`,pinnedBorder:`#292524`,pinnedShadow:`rgba(0, 0, 0, 0.50)`}},{id:`shadcn`,name:`shadcn/ui`,radius:6,font:`ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, sans-serif`,light:{bg:`#ffffff`,fg:`#09090b`,muted:`#71717a`,border:`#e4e4e7`,headerBg:`#fafafa`,headerFg:`#71717a`,accent:`#18181b`,rowAlt:`#ffffff`,rowHover:`#f4f4f5`,selectionBg:`#f4f4f5`},dark:{bg:`#0a0a0a`,fg:`#fafafa`,muted:`#a1a1aa`,border:`#27272a`,headerBg:`#18181b`,headerFg:`#a1a1aa`,accent:`#fafafa`,rowAlt:`#0a0a0a`,rowHover:`#18181b`,selectionBg:`#27272a`}},{id:`tailwind`,name:`Tailwind`,radius:6,font:`Inter, ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif`,light:{bg:`#ffffff`,fg:`#0f172a`,muted:`#64748b`,border:`#e2e8f0`,headerBg:`#f8fafc`,headerFg:`#0f172a`,accent:`#4f46e5`,rowAlt:`#ffffff`,rowHover:`#f1f5f9`,selectionBg:`#e0e7ff`},dark:{bg:`#0f172a`,fg:`#f8fafc`,muted:`#94a3b8`,border:`#334155`,headerBg:`#1e293b`,headerFg:`#f8fafc`,accent:`#818cf8`,rowAlt:`#0f172a`,rowHover:`#1e293b`,selectionBg:`#312e81`}},{id:`material`,name:`Material 3`,radius:8,font:`"Roboto Flex", Roboto, "Segoe UI", system-ui, sans-serif`,light:{bg:`#fef7ff`,fg:`#1d1b20`,muted:`#49454f`,border:`#cac4d0`,headerBg:`#f3edf7`,headerFg:`#1d1b20`,accent:`#6750a4`,rowAlt:`#fffbfe`,rowHover:`#ece6f0`,selectionBg:`#e8def8`},dark:{bg:`#141218`,fg:`#e6e0e9`,muted:`#cac4d0`,border:`#49454f`,headerBg:`#211f26`,headerFg:`#e6e0e9`,accent:`#d0bcff`,rowAlt:`#141218`,rowHover:`#2b2930`,selectionBg:`#4a4458`}},{id:`excel`,name:`Excel`,radius:0,font:`"Aptos", "Segoe UI", Calibri, Arial, sans-serif`,light:{bg:`#ffffff`,fg:`#323130`,muted:`#605e5c`,border:`#d2d0ce`,headerBg:`#f3f2f1`,headerFg:`#444444`,accent:`#107c41`,rowAlt:`#ffffff`,rowHover:`#edebe9`,selectionBg:`rgba(16, 124, 65, 0.10)`},dark:{bg:`#1b1a19`,fg:`#f3f2f1`,muted:`#c8c6c4`,border:`#3b3a39`,headerBg:`#252423`,headerFg:`#c8c6c4`,accent:`#58c188`,rowAlt:`#1b1a19`,rowHover:`#323130`,selectionBg:`rgba(88, 193, 136, 0.16)`}},{id:`fluent`,name:`Fluent 2`,radius:4,font:`"Segoe UI Variable", "Segoe UI", system-ui, sans-serif`,light:{bg:`#ffffff`,fg:`#242424`,muted:`#616161`,border:`#e0e0e0`,headerBg:`#f5f5f5`,headerFg:`#242424`,accent:`#0f6cbd`,rowAlt:`#fafafa`,rowHover:`#f0f0f0`,selectionBg:`#ebebeb`},dark:{bg:`#1f1f1f`,fg:`#ffffff`,muted:`#d6d6d6`,border:`#666666`,headerBg:`#141414`,headerFg:`#ffffff`,accent:`#479ef5`,rowAlt:`#1a1a1a`,rowHover:`#3d3d3d`,selectionBg:`#383838`}},{id:`carbon`,name:`Carbon`,radius:0,font:`"IBM Plex Sans", "Helvetica Neue", Arial, sans-serif`,light:{bg:`#ffffff`,fg:`#161616`,muted:`#525252`,border:`#e0e0e0`,headerBg:`#e0e0e0`,headerFg:`#161616`,accent:`#0f62fe`,rowAlt:`#f4f4f4`,rowHover:`#e8e8e8`,selectionBg:`#d0e2ff`},dark:{bg:`#161616`,fg:`#f4f4f4`,muted:`#c6c6c6`,border:`#393939`,headerBg:`#393939`,headerFg:`#f4f4f4`,accent:`#78a9ff`,rowAlt:`#262626`,rowHover:`#333333`,selectionBg:`#393939`}},{id:`sap`,name:`SAP Fiori`,radius:6,font:`"72", "72full", "Arial", sans-serif`,light:{bg:`#f5f6f7`,fg:`#131e29`,muted:`#556b82`,border:`#e5e5e5`,headerBg:`#ffffff`,headerFg:`#131e29`,accent:`#0070f2`,rowAlt:`#f5f6f7`,rowHover:`#eaecee`,selectionBg:`#ebf8ff`},dark:{bg:`#12171c`,fg:`#f5f6f7`,muted:`#8396a8`,border:`#2e3742`,headerBg:`#1d232a`,headerFg:`#f5f6f7`,accent:`#4db1ff`,rowAlt:`#12171c`,rowHover:`#222b35`,selectionBg:`#1d2d3e`}},{id:`salesforce`,name:`Salesforce`,radius:4,font:`"Salesforce Sans", "SF Pro", Helvetica, Arial, sans-serif`,light:{bg:`#ffffff`,fg:`#181818`,muted:`#757575`,border:`#c9c9c9`,headerBg:`#f3f3f3`,headerFg:`#181818`,accent:`#0176d3`,rowAlt:`#ffffff`,rowHover:`#f3f3f3`,selectionBg:`#ecebea`},dark:{bg:`#181818`,fg:`#ffffff`,muted:`#c9c9c9`,border:`#3e3e3c`,headerBg:`#2e2e2e`,headerFg:`#ffffff`,accent:`#1b96ff`,rowAlt:`#181818`,rowHover:`#2e2e2e`,selectionBg:`#1e4d8e`}},{id:`atlassian`,name:`Atlassian`,radius:3,font:`"Charlie Display", "Atlassian Sans", -apple-system, "Segoe UI", sans-serif`,light:{bg:`#ffffff`,fg:`#172b4d`,muted:`#44546f`,border:`#dcdfe4`,headerBg:`#fafbfc`,headerFg:`#44546f`,accent:`#0c66e4`,rowAlt:`#ffffff`,rowHover:`#f1f2f4`,selectionBg:`#e9f2ff`},dark:{bg:`#1d2125`,fg:`#b6c2cf`,muted:`#8590a2`,border:`#38414a`,headerBg:`#22272b`,headerFg:`#8590a2`,accent:`#579dff`,rowAlt:`#1d2125`,rowHover:`#2c333a`,selectionBg:`#09326c`}},{id:`github`,name:`GitHub`,radius:6,font:`-apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", Helvetica, Arial, sans-serif`,light:{bg:`#ffffff`,fg:`#1f2328`,muted:`#59636e`,border:`#d1d9e0`,headerBg:`#f6f8fa`,headerFg:`#59636e`,accent:`#0969da`,rowAlt:`#ffffff`,rowHover:`#f6f8fa`,selectionBg:`#ddf4ff`},dark:{bg:`#0d1117`,fg:`#f0f6fc`,muted:`#9198a1`,border:`#3d444d`,headerBg:`#151b23`,headerFg:`#9198a1`,accent:`#4493f8`,rowAlt:`#0d1117`,rowHover:`#151b23`,selectionBg:`rgba(56, 139, 253, 0.10)`}},{id:`antd`,name:`Ant Design`,radius:6,font:`-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "PingFang SC", sans-serif`,light:{bg:`#ffffff`,fg:`rgba(0, 0, 0, 0.88)`,muted:`rgba(0, 0, 0, 0.65)`,border:`#d9d9d9`,headerBg:`#fafafa`,headerFg:`rgba(0, 0, 0, 0.88)`,accent:`#066dff`,rowAlt:`#ffffff`,rowHover:`#f5f5f5`,selectionBg:`#e6f4ff`},dark:{bg:`#141414`,fg:`rgba(255, 255, 255, 0.85)`,muted:`rgba(255, 255, 255, 0.65)`,border:`#424242`,headerBg:`#1f1f1f`,headerFg:`rgba(255, 255, 255, 0.85)`,accent:`#1678d3`,rowAlt:`#141414`,rowHover:`#262626`,selectionBg:`#111a2c`}},{id:`ag-alpine`,name:`Alpine`,radius:3,font:`-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif`,light:{bg:`#ffffff`,fg:`#181d1f`,muted:`rgba(24, 29, 31, 0.5)`,border:`#babfc7`,headerBg:`#f8f8f8`,headerFg:`#181d1f`,accent:`#2196f3`,rowAlt:`#fcfcfc`,rowHover:`rgba(33, 150, 243, 0.1)`,selectionBg:`rgba(33, 150, 243, 0.3)`},dark:{bg:`#181d1f`,fg:`#ffffff`,muted:`rgba(255, 255, 255, 0.5)`,border:`#68686e`,headerBg:`#222628`,headerFg:`#ffffff`,accent:`#2196f3`,rowAlt:`#222628`,rowHover:`rgba(33, 150, 243, 0.1)`,selectionBg:`rgba(33, 150, 243, 0.3)`}},{id:`bootstrap`,name:`Bootstrap 5`,radius:6,font:`system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif`,light:{bg:`#ffffff`,fg:`#212529`,muted:`#6c757d`,border:`#dee2e6`,headerBg:`#f8f9fa`,headerFg:`#212529`,accent:`#0d6efd`,rowAlt:`#fcfcfd`,rowHover:`#f2f2f2`,selectionBg:`#cfe2ff`},dark:{bg:`#212529`,fg:`#dee2e6`,muted:`#adb5bd`,border:`#495057`,headerBg:`#2b3035`,headerFg:`#dee2e6`,accent:`#0d6efd`,rowAlt:`#25292e`,rowHover:`#2c3034`,selectionBg:`#031633`}},{id:`vercel`,name:`Vercel`,radius:6,font:`"Geist", "Geist Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif`,light:{bg:`#ffffff`,fg:`#000000`,muted:`#666666`,border:`#eaeaea`,headerBg:`#fafafa`,headerFg:`#666666`,accent:`#0070f3`,rowAlt:`#fafafa`,rowHover:`#f5f5f5`,selectionBg:`#e8f0fe`},dark:{bg:`#000000`,fg:`#ffffff`,muted:`#888888`,border:`#333333`,headerBg:`#111111`,headerFg:`#888888`,accent:`#3291ff`,rowAlt:`#0a0a0a`,rowHover:`#1a1a1a`,selectionBg:`#0d2847`}},{id:`linear`,name:`Linear`,radius:6,font:`"Inter Variable", "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif`,light:{bg:`#ffffff`,fg:`#282a30`,muted:`#6b6f76`,border:`#e9e9eb`,headerBg:`#f7f8f8`,headerFg:`#6b6f76`,accent:`#5e6ad2`,rowAlt:`#fbfbfc`,rowHover:`#f4f4f5`,selectionBg:`#e8eafd`},dark:{bg:`#08090a`,fg:`#f7f8f8`,muted:`#8a8f98`,border:`#23252a`,headerBg:`#0f1011`,headerFg:`#8a8f98`,accent:`#5e6ad2`,rowAlt:`#0f1011`,rowHover:`#1a1b1e`,selectionBg:`#2a2d4a`}},{id:`notion`,name:`Notion`,radius:4,font:`ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif`,light:{bg:`#ffffff`,fg:`#37352f`,muted:`#787774`,border:`#e9e9e7`,headerBg:`#f7f6f3`,headerFg:`#787774`,accent:`#2383e2`,rowAlt:`#fbfbfa`,rowHover:`#f1f1ef`,selectionBg:`#d9eaf7`},dark:{bg:`#191919`,fg:`#d4d4d4`,muted:`#9b9b9b`,border:`#2f2f2f`,headerBg:`#202020`,headerFg:`#9b9b9b`,accent:`#529cca`,rowAlt:`#1c1c1c`,rowHover:`#252525`,selectionBg:`#20415c`}},{id:`nord`,name:`Nord`,radius:4,font:`"Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif`,light:{bg:`#eceff4`,fg:`#2e3440`,muted:`#4c566a`,border:`#d8dee9`,headerBg:`#e5e9f0`,headerFg:`#2e3440`,accent:`#5579a5`,rowAlt:`#e5e9f0`,rowHover:`#dde3ec`,selectionBg:`#d8dee9`},dark:{bg:`#2e3440`,fg:`#d8dee9`,muted:`#4c566a`,border:`#434c5e`,headerBg:`#3b4252`,headerFg:`#e5e9f0`,accent:`#88c0d0`,rowAlt:`#333b48`,rowHover:`#3b4252`,selectionBg:`#434c5e`}},{id:`dracula`,name:`Dracula`,radius:6,font:`-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif`,light:{bg:`#fffbeb`,fg:`#1f1f1f`,muted:`#6c664b`,border:`#dedccf`,headerBg:`#ece9df`,headerFg:`#1f1f1f`,accent:`#644ac9`,rowAlt:`#fffdf5`,rowHover:`#f2efe3`,selectionBg:`#cfcfde`},dark:{bg:`#282a36`,fg:`#f8f8f2`,muted:`#6272a4`,border:`#44475a`,headerBg:`#21222c`,headerFg:`#f8f8f2`,accent:`#bd93f9`,rowAlt:`#2d2f3b`,rowHover:`#343746`,selectionBg:`#44475a`}},{id:`catppuccin`,name:`Catppuccin`,radius:8,font:`"Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif`,light:{bg:`#eff1f5`,fg:`#4c4f69`,muted:`#6c6f85`,border:`#ccd0da`,headerBg:`#e6e9ef`,headerFg:`#4c4f69`,accent:`#8839ef`,rowAlt:`#e6e9ef`,rowHover:`#dce0e8`,selectionBg:`#dce0e8`},dark:{bg:`#1e1e2e`,fg:`#cdd6f4`,muted:`#a6adc8`,border:`#313244`,headerBg:`#181825`,headerFg:`#cdd6f4`,accent:`#cba6f7`,rowAlt:`#1a1a28`,rowHover:`#313244`,selectionBg:`#45475a`}}],WT=UT.find(e=>e.id===`tailwind`)??UT[0],GT=e=>e?UT.find(t=>t.id===e):void 0;function KT(e){let t=parseInt(e,16),n=e=>{let t=e/255;return t<=.03928?t/12.92:((t+.055)/1.055)**2.4};return .2126*n(t>>16&255)+.7152*n(t>>8&255)+.0722*n(t&255)}function qT(e,t){let[n,r]=[KT(e),KT(t)];return(Math.max(n,r)+.05)/(Math.min(n,r)+.05)}function JT(e){let t=/^#?([0-9a-f]{6})$/i.exec(e.trim());if(!t)return`#ffffff`;let n=t[1];return qT(`18181b`,n)>=qT(`ffffff`,n)?`#18181b`:`#ffffff`}function YT(e,t,n){let r=e??WT,i=r[t],a=n||i.accent,o=HT[t];return{"--sg-bg":i.bg,"--sg-fg":i.fg,"--sg-muted":i.muted,"--sg-border":i.border,"--sg-header-bg":i.headerBg,"--sg-header-fg":i.headerFg,...i.headerBorder?{"--sg-header-border":i.headerBorder}:{},...i.headerLabel?{"--sg-header-label-color":i.headerLabel}:{},...r.headerType?.weight?{"--sg-header-weight":r.headerType.weight}:{},...r.headerType?.size?{"--sg-header-size":r.headerType.size}:{},...r.headerType?.transform?{"--sg-header-transform":r.headerType.transform}:{},...r.headerType?.tracking?{"--sg-header-tracking":r.headerType.tracking}:{},"--sg-bg-subtle":i.bgSubtle??i.headerBg,"--sg-row-alt-bg":i.rowAlt,"--sg-row-hover-bg":i.rowHover,"--sg-selection-bg":i.selectionBg,...i.pinnedBg?{"--sg-pinned-bg":i.pinnedBg}:{},...i.pinnedHeaderBg?{"--sg-pinned-header-bg":i.pinnedHeaderBg}:{},...i.pinnedDivider?{"--sg-pinned-divider":i.pinnedDivider}:{},...i.pinnedBorder?{"--sg-pinned-border":i.pinnedBorder}:{},...i.pinnedShadow?{"--sg-pinned-shadow-color":i.pinnedShadow}:{},"--sg-input-bg":i.bg,"--sg-input-border":i.border,"--sg-accent":a,"--sg-on-accent":JT(a),"--sg-radius":`${r.radius}px`,"--sg-font":r.font,"--sg-danger":i.danger??o.danger,"--sg-success":i.success??o.success,"--sg-warning":i.warning??o.warning,"--sg-info":i.info??o.info,"--sg-focus-ring":i.focusRing??a,"--sg-muted-bg":i.rowHover,"--sg-skeleton-bg":i.rowHover,"--sg-radius-lg":`${r.radius*2}px`,"--sg-rating-on":i.warning??o.warning,"--sg-rating-empty":i.border,"--sg-invalid-fg":i.danger??o.danger,"--sg-scrollbar-bg":i.bgSubtle??i.headerBg,"--sg-scrollbar-border":i.border,"--sg-scrollbar-thumb":i.muted,"--sg-scrollbar-thumb-hover":i.fg,"--sg-scrollbar-thumb-active":i.fg,"--sg-scrollbar-arrow":i.muted,"--sg-scrollbar-arrow-hover":i.fg,"--sg-scrollbar-arrow-hover-bg":i.rowHover,"--sg-scrollbar-arrow-active":i.fg,"--sg-scrollbar-arrow-active-bg":i.selectionBg,"--sg-scrollbar-arrow-disabled":i.border}}var XT=UT,ZT=WT,QT=e=>GT(e),$T=e=>e?.mode===`dark`;function eE(e){return YT(QT(e?.preset)??ZT,e?.mode===`dark`?`dark`:`light`,e?.accent)}function tE(e,t){return YT(QT(e?.preset)??ZT,t,e?.accent)}function nE(e){let t=eE(e);return`${Object.entries(t).map(([e,t])=>`${e}: ${t}`).join(`; `)}; color-scheme: ${$T(e)?`dark`:`light`}; font-family: ${t[`--sg-font`]}`}var rE=`2.5.1`,iE=(e,t)=>e.some(e=>e.config.kind===t),aE=e=>`activeTab_${e.replace(/[^a-zA-Z0-9_$]/g,`_`)}`,oE=(e,t)=>`${e}-${t}`,sE=e=>`accOpen_${e.replace(/[^a-zA-Z0-9_$]/g,`_`)}`,cE=(e,t)=>`${e}-s${t}`,lE=e=>`md_${e.replace(/[^a-zA-Z0-9]/g,`_`)}_rows`;function uE(e){switch(e.type){case`number`:{let t=e.decimals;return t==null?`{ type: 'number' }`:`{ type: 'number', options: { minimumFractionDigits: ${t}, maximumFractionDigits: ${t} } }`}case`currency`:return`{ type: 'currency', currency: ${CE(e.currency||`USD`)} }`;case`percent`:{let t=[`type: 'percent'`];return e.valueIsPercentPoints&&t.push(`valueIsPercentPoints: true`),e.decimals!=null&&t.push(`options: { minimumFractionDigits: ${e.decimals}, maximumFractionDigits: ${e.decimals} }`),`{ ${t.join(`, `)} }`}case`date`:case`datetime`:return e.pattern?`{ type: '${e.type}', pattern: ${CE(e.pattern)} }`:`{ type: '${e.type}' }`}}function dE(e,t,n){if(t.config.kind!==`grid`)return`schemaToColumns(${e})`;let r=t.config,i=t.id.replace(/-/g,`_`),a=r.columns.filter(e=>e.show),o=r.editing===`inline`?``:`, editable: false`;if(a.length===0)return o?`schemaToColumns(${e}).map((c) => ({ ...c${o} }))`:`schemaToColumns(${e})`;let s=a.map(e=>`'${e.field}'`),c=a.map(e=>{let t=[];return e.header&&t.push(`header: ${JSON.stringify(e.header)}`),e.width!=null&&t.push(`width: ${e.width}`),e.align&&t.push(`align: '${e.align}'`),e.aggregate&&t.push(`aggregate: '${e.aggregate}'`),r.treeData&&e.field===r.treeData.labelField&&n?t.push(`cell: (ctx: CellContext<${n}>) => renderSnippet(treeCell_${i}, { value: ctx.getValue(), row: ctx.row.original })`):e.cellType&&n?t.push(`cell: (ctx: CellContext<${n}>) => renderSnippet(${IE(i,e.field)}, { value: ctx.getValue() })`):e.format&&t.push(`format: ${uE(e.format)}`),t.length?`'${e.field}': { ${t.join(`, `)} }`:null}).filter(e=>!!e),l=c.length?` const ov: Record<string, Partial<(typeof all)[number]>> = { ${c.join(`, `)} };`:``,u=c.length?`, ...(ov[String(c.field)] ?? {})`:``,d=`[${s.join(`, `)}].map((f) => all.find((c) => c.field === f)).filter((c): c is (typeof all)[number] => !!c)`;return`(() => { const all = schemaToColumns(${e});${l} return ${o||u?`${d}.map((c) => ({ ...c${o}${u} }))`:d} })()`}function fE(e,t){let n=[`grid-column: span ${mS(e)}`,`min-width: 0`];t&&n.push(t);let r=gS(e.style);return r&&n.push(r),`style="${n.join(`; `)}"`}var pE=e=>e&&e.replace(/[^#a-zA-Z0-9(),.%\s_-]/g,``).slice(0,40)||`var(--sg-accent)`;function mE(e,t){let n=[t,pS(e)].filter(Boolean).join(` `);return n?` class="${n}"`:``}function hE(e){let t=fS(e.className);return t?` ${t}`:``}function gE(e){let t=rw(e);if(t===`grid`){let t=GS(e),n=t.maxWidth?` max-width: ${t.maxWidth}px; margin-inline: auto;`:``;return` .st-screen { grid-template-columns: repeat(12, 1fr); gap: ${t.rowGap}px ${t.colGap}px; align-items: ${t.align};${n} }\n @media (max-width: ${t.mobileBreakpoint}px) { .st-screen { grid-template-columns: 1fr; gap: 12px; } }\n`}if(t===`stack`){let t=KS(e),n=t.maxWidth?` max-width: ${t.maxWidth}px;${t.align===`center`?` margin-inline: auto;`:``}`:``,r=t.minHeight?`\n .st-stack > * { min-height: ${t.minHeight}px; }`:``,i=t.dividers?`\n .st-stack > * + * { border-top: 1px solid var(--sg-border, #e2e8f0); padding-top: ${t.gap}px; }`:``;return` .st-stack { gap: ${t.gap}px;${n} }${r}${i}\n`}if(t===`canvas`){let t=YS(e),n=t.showGrid?`\n .st-canvas { background-image: linear-gradient(var(--sg-border, #e6e8ec) 1px, transparent 1px), linear-gradient(90deg, var(--sg-border, #e6e8ec) 1px, transparent 1px); background-size: calc((100% - ${t.cols-1} * ${t.gap}px) / ${t.cols} + ${t.gap}px) calc(${t.rowHeight}px + ${t.gap}px); }`:``;return` .st-canvas { grid-template-columns: repeat(${t.cols}, 1fr); grid-auto-rows: ${t.rowHeight}px; gap: ${t.gap}px; }${n}\n`}return``}function _E(e,t,n,r,i,a={hasRecord:!1}){let o=(e,t)=>a.i18n?`{$t('block.${t}', ${JSON.stringify(e)})}`:e,s=a.pane?`style="height: 100%; min-width: 0; min-height: 0; display: flex; flex-direction: column;"`:fE(r),c=mE(r),l=r.config,u=a.handleNames?.get(r.id),d=u?`${u}.rows`:`allRows`;switch(l.kind){case`grid`:{let t=r.id.replace(/-/g,`_`),o=`columns_${t}`,u=`No ${(e.label??e.name).toLowerCase()} yet.`;if(l.scheduler){let t=dT(a.rawEntity??e,i);return` <div ${s}${c}>
|
|
478
|
+
`}}function BT(e){for(let t of e)fv(t);let t=new Map(e.map(e=>[e.name,e])),n=e.map(e=>{let n=fT(e,t);return{schema:pT(e,n),infos:n}});return{entries:n,seed:mT(n)}}function VT(e,t={}){let{entries:n,seed:r}=BT(e),{file:i,needs:a}=IT(n,r,t.sources,t.supabaseConn),o=[_T(n),i];(a.supabase||t.supabaseAuth)&&!a.supabaseUrl&&(t.supabaseConn?.url||t.supabaseConn?.key)&&(a.supabaseUrl=t.supabaseConn.url,a.supabaseKey=t.supabaseConn.key),(a.supabase||t.supabaseAuth)&&o.push(LT(a));for(let e of a.sqlRoutes)o.push(OT(e.schema,e.table,e.dialect,{access:t.accessEnabled,audit:t.auditEnabled,screenIds:t.screensByEntity?.get(e.schema.name)??[],triggers:t.triggers?.[e.schema.name],dbSchema:e.dbSchema,tenantField:t.tenantField&&t.tenantScoped?.(e.schema.name)!==!1?t.tenantField:void 0}));return{files:o,prepared:n.map(e=>e.schema)}}var HT={light:{danger:`#dc2626`,success:`#16a34a`,warning:`#d97706`,info:`#0891b2`},dark:{danger:`#f87171`,success:`#4ade80`,warning:`#fbbf24`,info:`#22d3ee`}},UT=[{id:`ember`,name:`Ember`,radius:6,font:`ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, sans-serif`,headerType:{weight:`500`},light:{bg:`#ffffff`,fg:`#1c1917`,muted:`#78716c`,border:`#e7e5e4`,headerBg:`#fafaf9`,headerFg:`#78716c`,accent:`#ff3e00`,rowAlt:`#ffffff`,rowHover:`#f5f5f4`,selectionBg:`#ffece3`,bgSubtle:`#fafaf9`,pinnedBg:`#fafaf9`,pinnedHeaderBg:`#f5f5f4`,pinnedDivider:`#e7e5e4`,pinnedBorder:`#e7e5e4`,pinnedShadow:`rgba(28, 25, 23, 0.10)`},dark:{bg:`#0c0a09`,fg:`#fafaf9`,muted:`#a8a29e`,border:`#292524`,headerBg:`#1c1917`,headerFg:`#a8a29e`,accent:`#ff5a1f`,rowAlt:`#0c0a09`,rowHover:`#1c1917`,selectionBg:`#3a2318`,bgSubtle:`#1c1917`,pinnedBg:`#151312`,pinnedHeaderBg:`#1c1917`,pinnedDivider:`#292524`,pinnedBorder:`#292524`,pinnedShadow:`rgba(0, 0, 0, 0.50)`}},{id:`shadcn`,name:`shadcn/ui`,radius:6,font:`ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, sans-serif`,light:{bg:`#ffffff`,fg:`#09090b`,muted:`#71717a`,border:`#e4e4e7`,headerBg:`#fafafa`,headerFg:`#71717a`,accent:`#18181b`,rowAlt:`#ffffff`,rowHover:`#f4f4f5`,selectionBg:`#f4f4f5`},dark:{bg:`#0a0a0a`,fg:`#fafafa`,muted:`#a1a1aa`,border:`#27272a`,headerBg:`#18181b`,headerFg:`#a1a1aa`,accent:`#fafafa`,rowAlt:`#0a0a0a`,rowHover:`#18181b`,selectionBg:`#27272a`}},{id:`tailwind`,name:`Tailwind`,radius:6,font:`Inter, ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif`,light:{bg:`#ffffff`,fg:`#0f172a`,muted:`#64748b`,border:`#e2e8f0`,headerBg:`#f8fafc`,headerFg:`#0f172a`,accent:`#4f46e5`,rowAlt:`#ffffff`,rowHover:`#f1f5f9`,selectionBg:`#e0e7ff`},dark:{bg:`#0f172a`,fg:`#f8fafc`,muted:`#94a3b8`,border:`#334155`,headerBg:`#1e293b`,headerFg:`#f8fafc`,accent:`#818cf8`,rowAlt:`#0f172a`,rowHover:`#1e293b`,selectionBg:`#312e81`}},{id:`material`,name:`Material 3`,radius:8,font:`"Roboto Flex", Roboto, "Segoe UI", system-ui, sans-serif`,light:{bg:`#fef7ff`,fg:`#1d1b20`,muted:`#49454f`,border:`#cac4d0`,headerBg:`#f3edf7`,headerFg:`#1d1b20`,accent:`#6750a4`,rowAlt:`#fffbfe`,rowHover:`#ece6f0`,selectionBg:`#e8def8`},dark:{bg:`#141218`,fg:`#e6e0e9`,muted:`#cac4d0`,border:`#49454f`,headerBg:`#211f26`,headerFg:`#e6e0e9`,accent:`#d0bcff`,rowAlt:`#141218`,rowHover:`#2b2930`,selectionBg:`#4a4458`}},{id:`excel`,name:`Excel`,radius:0,font:`"Aptos", "Segoe UI", Calibri, Arial, sans-serif`,light:{bg:`#ffffff`,fg:`#323130`,muted:`#605e5c`,border:`#d2d0ce`,headerBg:`#f3f2f1`,headerFg:`#444444`,accent:`#107c41`,rowAlt:`#ffffff`,rowHover:`#edebe9`,selectionBg:`rgba(16, 124, 65, 0.10)`},dark:{bg:`#1b1a19`,fg:`#f3f2f1`,muted:`#c8c6c4`,border:`#3b3a39`,headerBg:`#252423`,headerFg:`#c8c6c4`,accent:`#58c188`,rowAlt:`#1b1a19`,rowHover:`#323130`,selectionBg:`rgba(88, 193, 136, 0.16)`}},{id:`fluent`,name:`Fluent 2`,radius:4,font:`"Segoe UI Variable", "Segoe UI", system-ui, sans-serif`,light:{bg:`#ffffff`,fg:`#242424`,muted:`#616161`,border:`#e0e0e0`,headerBg:`#f5f5f5`,headerFg:`#242424`,accent:`#0f6cbd`,rowAlt:`#fafafa`,rowHover:`#f0f0f0`,selectionBg:`#ebebeb`},dark:{bg:`#1f1f1f`,fg:`#ffffff`,muted:`#d6d6d6`,border:`#666666`,headerBg:`#141414`,headerFg:`#ffffff`,accent:`#479ef5`,rowAlt:`#1a1a1a`,rowHover:`#3d3d3d`,selectionBg:`#383838`}},{id:`carbon`,name:`Carbon`,radius:0,font:`"IBM Plex Sans", "Helvetica Neue", Arial, sans-serif`,light:{bg:`#ffffff`,fg:`#161616`,muted:`#525252`,border:`#e0e0e0`,headerBg:`#e0e0e0`,headerFg:`#161616`,accent:`#0f62fe`,rowAlt:`#f4f4f4`,rowHover:`#e8e8e8`,selectionBg:`#d0e2ff`},dark:{bg:`#161616`,fg:`#f4f4f4`,muted:`#c6c6c6`,border:`#393939`,headerBg:`#393939`,headerFg:`#f4f4f4`,accent:`#78a9ff`,rowAlt:`#262626`,rowHover:`#333333`,selectionBg:`#393939`}},{id:`sap`,name:`SAP Fiori`,radius:6,font:`"72", "72full", "Arial", sans-serif`,light:{bg:`#f5f6f7`,fg:`#131e29`,muted:`#556b82`,border:`#e5e5e5`,headerBg:`#ffffff`,headerFg:`#131e29`,accent:`#0070f2`,rowAlt:`#f5f6f7`,rowHover:`#eaecee`,selectionBg:`#ebf8ff`},dark:{bg:`#12171c`,fg:`#f5f6f7`,muted:`#8396a8`,border:`#2e3742`,headerBg:`#1d232a`,headerFg:`#f5f6f7`,accent:`#4db1ff`,rowAlt:`#12171c`,rowHover:`#222b35`,selectionBg:`#1d2d3e`}},{id:`salesforce`,name:`Salesforce`,radius:4,font:`"Salesforce Sans", "SF Pro", Helvetica, Arial, sans-serif`,light:{bg:`#ffffff`,fg:`#181818`,muted:`#757575`,border:`#c9c9c9`,headerBg:`#f3f3f3`,headerFg:`#181818`,accent:`#0176d3`,rowAlt:`#ffffff`,rowHover:`#f3f3f3`,selectionBg:`#ecebea`},dark:{bg:`#181818`,fg:`#ffffff`,muted:`#c9c9c9`,border:`#3e3e3c`,headerBg:`#2e2e2e`,headerFg:`#ffffff`,accent:`#1b96ff`,rowAlt:`#181818`,rowHover:`#2e2e2e`,selectionBg:`#1e4d8e`}},{id:`atlassian`,name:`Atlassian`,radius:3,font:`"Charlie Display", "Atlassian Sans", -apple-system, "Segoe UI", sans-serif`,light:{bg:`#ffffff`,fg:`#172b4d`,muted:`#44546f`,border:`#dcdfe4`,headerBg:`#fafbfc`,headerFg:`#44546f`,accent:`#0c66e4`,rowAlt:`#ffffff`,rowHover:`#f1f2f4`,selectionBg:`#e9f2ff`},dark:{bg:`#1d2125`,fg:`#b6c2cf`,muted:`#8590a2`,border:`#38414a`,headerBg:`#22272b`,headerFg:`#8590a2`,accent:`#579dff`,rowAlt:`#1d2125`,rowHover:`#2c333a`,selectionBg:`#09326c`}},{id:`github`,name:`GitHub`,radius:6,font:`-apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", Helvetica, Arial, sans-serif`,light:{bg:`#ffffff`,fg:`#1f2328`,muted:`#59636e`,border:`#d1d9e0`,headerBg:`#f6f8fa`,headerFg:`#59636e`,accent:`#0969da`,rowAlt:`#ffffff`,rowHover:`#f6f8fa`,selectionBg:`#ddf4ff`},dark:{bg:`#0d1117`,fg:`#f0f6fc`,muted:`#9198a1`,border:`#3d444d`,headerBg:`#151b23`,headerFg:`#9198a1`,accent:`#4493f8`,rowAlt:`#0d1117`,rowHover:`#151b23`,selectionBg:`rgba(56, 139, 253, 0.10)`}},{id:`antd`,name:`Ant Design`,radius:6,font:`-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "PingFang SC", sans-serif`,light:{bg:`#ffffff`,fg:`rgba(0, 0, 0, 0.88)`,muted:`rgba(0, 0, 0, 0.65)`,border:`#d9d9d9`,headerBg:`#fafafa`,headerFg:`rgba(0, 0, 0, 0.88)`,accent:`#066dff`,rowAlt:`#ffffff`,rowHover:`#f5f5f5`,selectionBg:`#e6f4ff`},dark:{bg:`#141414`,fg:`rgba(255, 255, 255, 0.85)`,muted:`rgba(255, 255, 255, 0.65)`,border:`#424242`,headerBg:`#1f1f1f`,headerFg:`rgba(255, 255, 255, 0.85)`,accent:`#1678d3`,rowAlt:`#141414`,rowHover:`#262626`,selectionBg:`#111a2c`}},{id:`ag-alpine`,name:`Alpine`,radius:3,font:`-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif`,light:{bg:`#ffffff`,fg:`#181d1f`,muted:`rgba(24, 29, 31, 0.5)`,border:`#babfc7`,headerBg:`#f8f8f8`,headerFg:`#181d1f`,accent:`#2196f3`,rowAlt:`#fcfcfc`,rowHover:`rgba(33, 150, 243, 0.1)`,selectionBg:`rgba(33, 150, 243, 0.3)`},dark:{bg:`#181d1f`,fg:`#ffffff`,muted:`rgba(255, 255, 255, 0.5)`,border:`#68686e`,headerBg:`#222628`,headerFg:`#ffffff`,accent:`#2196f3`,rowAlt:`#222628`,rowHover:`rgba(33, 150, 243, 0.1)`,selectionBg:`rgba(33, 150, 243, 0.3)`}},{id:`bootstrap`,name:`Bootstrap 5`,radius:6,font:`system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif`,light:{bg:`#ffffff`,fg:`#212529`,muted:`#6c757d`,border:`#dee2e6`,headerBg:`#f8f9fa`,headerFg:`#212529`,accent:`#0d6efd`,rowAlt:`#fcfcfd`,rowHover:`#f2f2f2`,selectionBg:`#cfe2ff`},dark:{bg:`#212529`,fg:`#dee2e6`,muted:`#adb5bd`,border:`#495057`,headerBg:`#2b3035`,headerFg:`#dee2e6`,accent:`#0d6efd`,rowAlt:`#25292e`,rowHover:`#2c3034`,selectionBg:`#031633`}},{id:`vercel`,name:`Vercel`,radius:6,font:`"Geist", "Geist Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif`,light:{bg:`#ffffff`,fg:`#000000`,muted:`#666666`,border:`#eaeaea`,headerBg:`#fafafa`,headerFg:`#666666`,accent:`#0070f3`,rowAlt:`#fafafa`,rowHover:`#f5f5f5`,selectionBg:`#e8f0fe`},dark:{bg:`#000000`,fg:`#ffffff`,muted:`#888888`,border:`#333333`,headerBg:`#111111`,headerFg:`#888888`,accent:`#3291ff`,rowAlt:`#0a0a0a`,rowHover:`#1a1a1a`,selectionBg:`#0d2847`}},{id:`linear`,name:`Linear`,radius:6,font:`"Inter Variable", "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif`,light:{bg:`#ffffff`,fg:`#282a30`,muted:`#6b6f76`,border:`#e9e9eb`,headerBg:`#f7f8f8`,headerFg:`#6b6f76`,accent:`#5e6ad2`,rowAlt:`#fbfbfc`,rowHover:`#f4f4f5`,selectionBg:`#e8eafd`},dark:{bg:`#08090a`,fg:`#f7f8f8`,muted:`#8a8f98`,border:`#23252a`,headerBg:`#0f1011`,headerFg:`#8a8f98`,accent:`#5e6ad2`,rowAlt:`#0f1011`,rowHover:`#1a1b1e`,selectionBg:`#2a2d4a`}},{id:`notion`,name:`Notion`,radius:4,font:`ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif`,light:{bg:`#ffffff`,fg:`#37352f`,muted:`#787774`,border:`#e9e9e7`,headerBg:`#f7f6f3`,headerFg:`#787774`,accent:`#2383e2`,rowAlt:`#fbfbfa`,rowHover:`#f1f1ef`,selectionBg:`#d9eaf7`},dark:{bg:`#191919`,fg:`#d4d4d4`,muted:`#9b9b9b`,border:`#2f2f2f`,headerBg:`#202020`,headerFg:`#9b9b9b`,accent:`#529cca`,rowAlt:`#1c1c1c`,rowHover:`#252525`,selectionBg:`#20415c`}},{id:`nord`,name:`Nord`,radius:4,font:`"Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif`,light:{bg:`#eceff4`,fg:`#2e3440`,muted:`#4c566a`,border:`#d8dee9`,headerBg:`#e5e9f0`,headerFg:`#2e3440`,accent:`#5579a5`,rowAlt:`#e5e9f0`,rowHover:`#dde3ec`,selectionBg:`#d8dee9`},dark:{bg:`#2e3440`,fg:`#d8dee9`,muted:`#4c566a`,border:`#434c5e`,headerBg:`#3b4252`,headerFg:`#e5e9f0`,accent:`#88c0d0`,rowAlt:`#333b48`,rowHover:`#3b4252`,selectionBg:`#434c5e`}},{id:`dracula`,name:`Dracula`,radius:6,font:`-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif`,light:{bg:`#fffbeb`,fg:`#1f1f1f`,muted:`#6c664b`,border:`#dedccf`,headerBg:`#ece9df`,headerFg:`#1f1f1f`,accent:`#644ac9`,rowAlt:`#fffdf5`,rowHover:`#f2efe3`,selectionBg:`#cfcfde`},dark:{bg:`#282a36`,fg:`#f8f8f2`,muted:`#6272a4`,border:`#44475a`,headerBg:`#21222c`,headerFg:`#f8f8f2`,accent:`#bd93f9`,rowAlt:`#2d2f3b`,rowHover:`#343746`,selectionBg:`#44475a`}},{id:`catppuccin`,name:`Catppuccin`,radius:8,font:`"Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif`,light:{bg:`#eff1f5`,fg:`#4c4f69`,muted:`#6c6f85`,border:`#ccd0da`,headerBg:`#e6e9ef`,headerFg:`#4c4f69`,accent:`#8839ef`,rowAlt:`#e6e9ef`,rowHover:`#dce0e8`,selectionBg:`#dce0e8`},dark:{bg:`#1e1e2e`,fg:`#cdd6f4`,muted:`#a6adc8`,border:`#313244`,headerBg:`#181825`,headerFg:`#cdd6f4`,accent:`#cba6f7`,rowAlt:`#1a1a28`,rowHover:`#313244`,selectionBg:`#45475a`}}],WT=UT.find(e=>e.id===`tailwind`)??UT[0],GT=e=>e?UT.find(t=>t.id===e):void 0;function KT(e){let t=parseInt(e,16),n=e=>{let t=e/255;return t<=.03928?t/12.92:((t+.055)/1.055)**2.4};return .2126*n(t>>16&255)+.7152*n(t>>8&255)+.0722*n(t&255)}function qT(e,t){let[n,r]=[KT(e),KT(t)];return(Math.max(n,r)+.05)/(Math.min(n,r)+.05)}function JT(e){let t=/^#?([0-9a-f]{6})$/i.exec(e.trim());if(!t)return`#ffffff`;let n=t[1];return qT(`18181b`,n)>=qT(`ffffff`,n)?`#18181b`:`#ffffff`}function YT(e,t,n){let r=e??WT,i=r[t],a=n||i.accent,o=HT[t];return{"--sg-bg":i.bg,"--sg-fg":i.fg,"--sg-muted":i.muted,"--sg-border":i.border,"--sg-header-bg":i.headerBg,"--sg-header-fg":i.headerFg,...i.headerBorder?{"--sg-header-border":i.headerBorder}:{},...i.headerLabel?{"--sg-header-label-color":i.headerLabel}:{},...r.headerType?.weight?{"--sg-header-weight":r.headerType.weight}:{},...r.headerType?.size?{"--sg-header-size":r.headerType.size}:{},...r.headerType?.transform?{"--sg-header-transform":r.headerType.transform}:{},...r.headerType?.tracking?{"--sg-header-tracking":r.headerType.tracking}:{},"--sg-bg-subtle":i.bgSubtle??i.headerBg,"--sg-row-alt-bg":i.rowAlt,"--sg-row-hover-bg":i.rowHover,"--sg-selection-bg":i.selectionBg,...i.pinnedBg?{"--sg-pinned-bg":i.pinnedBg}:{},...i.pinnedHeaderBg?{"--sg-pinned-header-bg":i.pinnedHeaderBg}:{},...i.pinnedDivider?{"--sg-pinned-divider":i.pinnedDivider}:{},...i.pinnedBorder?{"--sg-pinned-border":i.pinnedBorder}:{},...i.pinnedShadow?{"--sg-pinned-shadow-color":i.pinnedShadow}:{},"--sg-input-bg":i.bg,"--sg-input-border":i.border,"--sg-accent":a,"--sg-on-accent":JT(a),"--sg-radius":`${r.radius}px`,"--sg-font":r.font,"--sg-danger":i.danger??o.danger,"--sg-success":i.success??o.success,"--sg-warning":i.warning??o.warning,"--sg-info":i.info??o.info,"--sg-focus-ring":i.focusRing??a,"--sg-muted-bg":i.rowHover,"--sg-skeleton-bg":i.rowHover,"--sg-radius-lg":`${r.radius*2}px`,"--sg-rating-on":i.warning??o.warning,"--sg-rating-empty":i.border,"--sg-invalid-fg":i.danger??o.danger,"--sg-scrollbar-bg":i.bgSubtle??i.headerBg,"--sg-scrollbar-border":i.border,"--sg-scrollbar-thumb":i.muted,"--sg-scrollbar-thumb-hover":i.fg,"--sg-scrollbar-thumb-active":i.fg,"--sg-scrollbar-arrow":i.muted,"--sg-scrollbar-arrow-hover":i.fg,"--sg-scrollbar-arrow-hover-bg":i.rowHover,"--sg-scrollbar-arrow-active":i.fg,"--sg-scrollbar-arrow-active-bg":i.selectionBg,"--sg-scrollbar-arrow-disabled":i.border}}var XT=UT,ZT=WT,QT=e=>GT(e),$T=e=>e?.mode===`dark`;function eE(e){return YT(QT(e?.preset)??ZT,e?.mode===`dark`?`dark`:`light`,e?.accent)}function tE(e,t){return YT(QT(e?.preset)??ZT,t,e?.accent)}function nE(e){let t=eE(e);return`${Object.entries(t).map(([e,t])=>`${e}: ${t}`).join(`; `)}; color-scheme: ${$T(e)?`dark`:`light`}; font-family: ${t[`--sg-font`]}`}var rE=`2.5.2`,iE=(e,t)=>e.some(e=>e.config.kind===t),aE=e=>`activeTab_${e.replace(/[^a-zA-Z0-9_$]/g,`_`)}`,oE=(e,t)=>`${e}-${t}`,sE=e=>`accOpen_${e.replace(/[^a-zA-Z0-9_$]/g,`_`)}`,cE=(e,t)=>`${e}-s${t}`,lE=e=>`md_${e.replace(/[^a-zA-Z0-9]/g,`_`)}_rows`;function uE(e){switch(e.type){case`number`:{let t=e.decimals;return t==null?`{ type: 'number' }`:`{ type: 'number', options: { minimumFractionDigits: ${t}, maximumFractionDigits: ${t} } }`}case`currency`:return`{ type: 'currency', currency: ${CE(e.currency||`USD`)} }`;case`percent`:{let t=[`type: 'percent'`];return e.valueIsPercentPoints&&t.push(`valueIsPercentPoints: true`),e.decimals!=null&&t.push(`options: { minimumFractionDigits: ${e.decimals}, maximumFractionDigits: ${e.decimals} }`),`{ ${t.join(`, `)} }`}case`date`:case`datetime`:return e.pattern?`{ type: '${e.type}', pattern: ${CE(e.pattern)} }`:`{ type: '${e.type}' }`}}function dE(e,t,n){if(t.config.kind!==`grid`)return`schemaToColumns(${e})`;let r=t.config,i=t.id.replace(/-/g,`_`),a=r.columns.filter(e=>e.show),o=r.editing===`inline`?``:`, editable: false`;if(a.length===0)return o?`schemaToColumns(${e}).map((c) => ({ ...c${o} }))`:`schemaToColumns(${e})`;let s=a.map(e=>`'${e.field}'`),c=a.map(e=>{let t=[];return e.header&&t.push(`header: ${JSON.stringify(e.header)}`),e.width!=null&&t.push(`width: ${e.width}`),e.align&&t.push(`align: '${e.align}'`),e.aggregate&&t.push(`aggregate: '${e.aggregate}'`),r.treeData&&e.field===r.treeData.labelField&&n?t.push(`cell: (ctx: CellContext<${n}>) => renderSnippet(treeCell_${i}, { value: ctx.getValue(), row: ctx.row.original })`):e.cellType&&n?t.push(`cell: (ctx: CellContext<${n}>) => renderSnippet(${IE(i,e.field)}, { value: ctx.getValue() })`):e.format&&t.push(`format: ${uE(e.format)}`),t.length?`'${e.field}': { ${t.join(`, `)} }`:null}).filter(e=>!!e),l=c.length?` const ov: Record<string, Partial<(typeof all)[number]>> = { ${c.join(`, `)} };`:``,u=c.length?`, ...(ov[String(c.field)] ?? {})`:``,d=`[${s.join(`, `)}].map((f) => all.find((c) => c.field === f)).filter((c): c is (typeof all)[number] => !!c)`;return`(() => { const all = schemaToColumns(${e});${l} return ${o||u?`${d}.map((c) => ({ ...c${o}${u} }))`:d} })()`}function fE(e,t){let n=[`grid-column: span ${mS(e)}`,`min-width: 0`];t&&n.push(t);let r=gS(e.style);return r&&n.push(r),`style="${n.join(`; `)}"`}var pE=e=>e&&e.replace(/[^#a-zA-Z0-9(),.%\s_-]/g,``).slice(0,40)||`var(--sg-accent)`;function mE(e,t){let n=[t,pS(e)].filter(Boolean).join(` `);return n?` class="${n}"`:``}function hE(e){let t=fS(e.className);return t?` ${t}`:``}function gE(e){let t=rw(e);if(t===`grid`){let t=GS(e),n=t.maxWidth?` max-width: ${t.maxWidth}px; margin-inline: auto;`:``;return` .st-screen { grid-template-columns: repeat(12, 1fr); gap: ${t.rowGap}px ${t.colGap}px; align-items: ${t.align};${n} }\n @media (max-width: ${t.mobileBreakpoint}px) { .st-screen { grid-template-columns: 1fr; gap: 12px; } }\n`}if(t===`stack`){let t=KS(e),n=t.maxWidth?` max-width: ${t.maxWidth}px;${t.align===`center`?` margin-inline: auto;`:``}`:``,r=t.minHeight?`\n .st-stack > * { min-height: ${t.minHeight}px; }`:``,i=t.dividers?`\n .st-stack > * + * { border-top: 1px solid var(--sg-border, #e2e8f0); padding-top: ${t.gap}px; }`:``;return` .st-stack { gap: ${t.gap}px;${n} }${r}${i}\n`}if(t===`canvas`){let t=YS(e),n=t.showGrid?`\n .st-canvas { background-image: linear-gradient(var(--sg-border, #e6e8ec) 1px, transparent 1px), linear-gradient(90deg, var(--sg-border, #e6e8ec) 1px, transparent 1px); background-size: calc((100% - ${t.cols-1} * ${t.gap}px) / ${t.cols} + ${t.gap}px) calc(${t.rowHeight}px + ${t.gap}px); }`:``;return` .st-canvas { grid-template-columns: repeat(${t.cols}, 1fr); grid-auto-rows: ${t.rowHeight}px; gap: ${t.gap}px; }${n}\n`}return``}function _E(e,t,n,r,i,a={hasRecord:!1}){let o=(e,t)=>a.i18n?`{$t('block.${t}', ${JSON.stringify(e)})}`:e,s=a.pane?`style="height: 100%; min-width: 0; min-height: 0; display: flex; flex-direction: column;"`:fE(r),c=mE(r),l=r.config,u=a.handleNames?.get(r.id),d=u?`${u}.rows`:`allRows`;switch(l.kind){case`grid`:{let t=r.id.replace(/-/g,`_`),o=`columns_${t}`,u=`No ${(e.label??e.name).toLowerCase()} yet.`;if(l.scheduler){let t=dT(a.rawEntity??e,i);return` <div ${s}${c}>
|
|
479
479
|
<SvGrid
|
|
480
480
|
data={allRows}
|
|
481
481
|
columns={${o}}
|
package/dist/designer/index.html
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
<meta charset="UTF-8" />
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
6
|
<title>SvGrid Studio - Designer</title>
|
|
7
|
-
<script type="module" crossorigin src="./assets/index-
|
|
7
|
+
<script type="module" crossorigin src="./assets/index-CM5xvaOy.js"></script>
|
|
8
8
|
<link rel="modulepreload" crossorigin href="./assets/rolldown-runtime-Dd_uD5pT.js">
|
|
9
9
|
<link rel="modulepreload" crossorigin href="./assets/disclose-version-CIm4S9xS.js">
|
|
10
10
|
<link rel="modulepreload" crossorigin href="./assets/export-format-DwjuTfrQ.js">
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
<link rel="modulepreload" crossorigin href="./assets/easing-zaypKrr0.js">
|
|
17
17
|
<link rel="modulepreload" crossorigin href="./assets/chart-DHEgt4lN.js">
|
|
18
18
|
<link rel="modulepreload" crossorigin href="./assets/SvGridChart-BEDNTdc5.js">
|
|
19
|
-
<link rel="modulepreload" crossorigin href="./assets/src-
|
|
19
|
+
<link rel="modulepreload" crossorigin href="./assets/src-D-ET9Mmo.js">
|
|
20
20
|
<link rel="modulepreload" crossorigin href="./assets/SvListBox-BVzVfCG3.js">
|
|
21
21
|
<link rel="stylesheet" crossorigin href="./assets/dismissable-BF-9TJSd.css">
|
|
22
22
|
<link rel="stylesheet" crossorigin href="./assets/SvDateTimePicker-Cygij-dr.css">
|
package/dist/node/studio.js
CHANGED
|
@@ -15130,7 +15130,7 @@ function hasFieldConditions(schema) {
|
|
|
15130
15130
|
*
|
|
15131
15131
|
* `version.test.ts` asserts this matches `package.json`, so the two cannot drift.
|
|
15132
15132
|
*/
|
|
15133
|
-
var SVGRID_VERSION = "2.5.
|
|
15133
|
+
var SVGRID_VERSION = "2.5.2";
|
|
15134
15134
|
//#endregion
|
|
15135
15135
|
//#region src/studio/emit-project.ts
|
|
15136
15136
|
var has = (blocks, kind) => blocks.some((b) => b.config.kind === kind);
|
package/package.json
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"type": "commercial",
|
|
5
5
|
"url": "https://svgrid.com/pricing"
|
|
6
6
|
},
|
|
7
|
-
"version": "2.5.
|
|
7
|
+
"version": "2.5.2",
|
|
8
8
|
"description": "Enterprise feature pack for SvGrid: Excel (xlsx), PDF, CSV, TSV and HTML export, Excel/CSV/JSON import, pivot tables with a drag-and-drop designer, paginated print, Kanban board and scheduler views. Requires a paid license key.",
|
|
9
9
|
"license": "SEE LICENSE IN LICENSE",
|
|
10
10
|
"author": "jQWidgets <sales@jqwidgets.com>",
|
|
@@ -9,10 +9,25 @@ import {
|
|
|
9
9
|
setLicenseKey,
|
|
10
10
|
} from './license'
|
|
11
11
|
import { dismissUpgradePrompt } from './upgrade-prompt'
|
|
12
|
+
import { emitUnlicensedNudge } from './watermark'
|
|
13
|
+
|
|
14
|
+
// Keep everything else in the module real; only the watermark emitter is spied.
|
|
15
|
+
vi.mock('./watermark', async (importOriginal) => ({
|
|
16
|
+
...(await importOriginal()),
|
|
17
|
+
emitUnlicensedNudge: vi.fn(),
|
|
18
|
+
}))
|
|
12
19
|
|
|
13
20
|
const KEY = 'SVENTERPRISE-EVAL-GUNEI-5-20260904-RGY2TN'
|
|
14
21
|
const CARD = '[data-svgrid-enterprise-upgrade]'
|
|
15
22
|
|
|
23
|
+
/** Calls to emitUnlicensedNudge() since the last reset.
|
|
24
|
+
*
|
|
25
|
+
* Spied rather than counted in the DOM: the real function attaches its badge
|
|
26
|
+
* to grid elements on a microtask, so in a document with no grid it renders
|
|
27
|
+
* nothing and a node count would read 0 for every case - passing even if the
|
|
28
|
+
* watermark were wired up wrongly. The call is the contract under test. */
|
|
29
|
+
const watermarkCalls = () => vi.mocked(emitUnlicensedNudge).mock.calls.length
|
|
30
|
+
|
|
16
31
|
describe('trial key expiry parsing', () => {
|
|
17
32
|
it('unlocks Enterprise today', () => {
|
|
18
33
|
const info = checkLicenseKey(KEY, new Date('2026-08-21T12:00:00Z'))
|
|
@@ -51,6 +66,7 @@ describe('what happens after the trial ends', () => {
|
|
|
51
66
|
vi.useRealTimers()
|
|
52
67
|
clearLicenseKey()
|
|
53
68
|
dismissUpgradePrompt()
|
|
69
|
+
vi.mocked(emitUnlicensedNudge).mockClear()
|
|
54
70
|
document.body.innerHTML = ''
|
|
55
71
|
})
|
|
56
72
|
|
|
@@ -81,6 +97,26 @@ describe('what happens after the trial ends', () => {
|
|
|
81
97
|
expect(getLicenseExpiry()?.toISOString()).toBe('2026-09-04T23:59:59.999Z')
|
|
82
98
|
})
|
|
83
99
|
|
|
100
|
+
it('a lapsed trial gets the card but NOT the watermark', () => {
|
|
101
|
+
vi.useFakeTimers({ now: new Date('2026-09-20T10:00:00Z') })
|
|
102
|
+
setLicenseKey(KEY)
|
|
103
|
+
assertEnterpriseLicensed('Export')
|
|
104
|
+
|
|
105
|
+
expect(document.querySelector(CARD)).not.toBeNull()
|
|
106
|
+
// Someone who evaluated and let the clock run out is a prospect mid-
|
|
107
|
+
// conversation; stamping their UI is the wrong pressure. An app with no
|
|
108
|
+
// key at all still gets both surfaces - covered below.
|
|
109
|
+
expect(watermarkCalls()).toBe(0)
|
|
110
|
+
})
|
|
111
|
+
|
|
112
|
+
it('an app with no key at all still gets the watermark', () => {
|
|
113
|
+
clearLicenseKey()
|
|
114
|
+
assertEnterpriseLicensed('Export')
|
|
115
|
+
|
|
116
|
+
expect(document.querySelector(CARD)).not.toBeNull()
|
|
117
|
+
expect(watermarkCalls()).toBeGreaterThan(0)
|
|
118
|
+
})
|
|
119
|
+
|
|
84
120
|
it('a paid key never shows the card', () => {
|
|
85
121
|
vi.useFakeTimers({ now: new Date('2026-09-20T10:00:00Z') })
|
|
86
122
|
setLicenseKey('SVENTERPRISE-ACME-5-202705-ABC123')
|
package/src/license.ts
CHANGED
|
@@ -12,10 +12,11 @@
|
|
|
12
12
|
// in REVOKED_KEYS -> throws (revoked / leaked / expired)
|
|
13
13
|
// starts with "SVENTERPRISE-DEV" or
|
|
14
14
|
// "SVENTERPRISE-EVAL" -> works; one-time console.info notice
|
|
15
|
-
// an EXPIRED dev/eval key -> still works, but
|
|
16
|
-
//
|
|
17
|
-
//
|
|
18
|
-
// app
|
|
15
|
+
// an EXPIRED dev/eval key -> still works, but shows the upgrade
|
|
16
|
+
// card each session. No watermark: a
|
|
17
|
+
// lapsed trial is a prospect, not an
|
|
18
|
+
// unlicensed app. Stays a soft gate so a
|
|
19
|
+
// trial ending cannot break a build.
|
|
19
20
|
// any other "SVENTERPRISE-..." -> works silently (paid production)
|
|
20
21
|
|
|
21
22
|
import { checkLicenseKey, VALID_PREFIX, type LicenseInfo } from './license-core'
|
|
@@ -84,8 +85,13 @@ export function nudgeEnterprise(feature?: EnterpriseFeatureLabel): void {
|
|
|
84
85
|
// `valid` stays true past a trial's expiry (the feature keeps running), so
|
|
85
86
|
// checking it alone would let a lapsed trial through silently forever.
|
|
86
87
|
if (info.valid && !info.expired) return
|
|
87
|
-
|
|
88
|
-
|
|
88
|
+
const lapsedTrial = info.valid && info.expired === true
|
|
89
|
+
// A lapsed trial gets the card but NOT the watermark. Someone who evaluated
|
|
90
|
+
// and let the clock run out is a prospect mid-conversation, not an app that
|
|
91
|
+
// never had a licence - stamping their UI is the wrong pressure. An app with
|
|
92
|
+
// no key at all still gets both.
|
|
93
|
+
if (!lapsedTrial) emitUnlicensedNudge()
|
|
94
|
+
showUpgradePrompt(feature, { expired: lapsedTrial })
|
|
89
95
|
}
|
|
90
96
|
|
|
91
97
|
export function assertEnterpriseLicensed(feature?: EnterpriseFeatureLabel): void {
|
|
@@ -111,10 +117,9 @@ export function assertEnterpriseLicensed(feature?: EnterpriseFeatureLabel): void
|
|
|
111
117
|
case 'dev':
|
|
112
118
|
case 'eval':
|
|
113
119
|
if (info.expired) {
|
|
114
|
-
// The trial is over. Deliberately NOT a throw: the app keeps working
|
|
115
|
-
//
|
|
116
|
-
//
|
|
117
|
-
emitUnlicensedNudge()
|
|
120
|
+
// The trial is over. Deliberately NOT a throw: the app keeps working,
|
|
121
|
+
// so the developer sees the nudge without their users hitting a broken
|
|
122
|
+
// build. Card only - no watermark; see nudgeEnterprise() for why.
|
|
118
123
|
showUpgradePrompt(feature, { expired: true })
|
|
119
124
|
return
|
|
120
125
|
}
|
package/src/version.ts
CHANGED