@tempots/beatui 0.83.0 → 0.83.4
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/lexical/index.es.js
CHANGED
|
@@ -19344,7 +19344,9 @@ const i0 = (n) => {
|
|
|
19344
19344
|
), y.dragon && w.push(ed(x)), y.table && w.push(Qu(x)), (await Promise.all(w)).forEach((v) => {
|
|
19345
19345
|
v && b.push(v);
|
|
19346
19346
|
}), b.push(Yu(x)), e != null) {
|
|
19347
|
-
const v = _e.get(
|
|
19347
|
+
const v = _e.get(
|
|
19348
|
+
e
|
|
19349
|
+
);
|
|
19348
19350
|
if (v != null && (v !== "" || C === "json" && typeof v == "object")) {
|
|
19349
19351
|
if (C === "markdown" && typeof v == "string")
|
|
19350
19352
|
await Er(x, v);
|
|
@@ -20279,7 +20281,9 @@ const V0 = (n) => {
|
|
|
20279
20281
|
}
|
|
20280
20282
|
)
|
|
20281
20283
|
), e != null) {
|
|
20282
|
-
const M = _e.get(
|
|
20284
|
+
const M = _e.get(
|
|
20285
|
+
e
|
|
20286
|
+
);
|
|
20283
20287
|
if (M != null && (M !== "" || O === "json" && typeof M == "object")) {
|
|
20284
20288
|
if (O === "markdown" && typeof M == "string")
|
|
20285
20289
|
await Er(k, M);
|
|
@@ -21141,7 +21145,9 @@ const Z0 = (n) => {
|
|
|
21141
21145
|
}
|
|
21142
21146
|
)
|
|
21143
21147
|
), e != null) {
|
|
21144
|
-
const M = _e.get(
|
|
21148
|
+
const M = _e.get(
|
|
21149
|
+
e
|
|
21150
|
+
);
|
|
21145
21151
|
if (M != null && (M !== "" || O === "json" && typeof M == "object")) {
|
|
21146
21152
|
if (O === "markdown" && typeof M == "string")
|
|
21147
21153
|
await Er(k, M);
|
|
@@ -21295,7 +21301,9 @@ const Z0 = (n) => {
|
|
|
21295
21301
|
s(E);
|
|
21296
21302
|
} : void 0,
|
|
21297
21303
|
onChange: i ? (E, v) => {
|
|
21298
|
-
i(
|
|
21304
|
+
i(
|
|
21305
|
+
E
|
|
21306
|
+
);
|
|
21299
21307
|
} : void 0,
|
|
21300
21308
|
onBlur: o ? (E) => {
|
|
21301
21309
|
o();
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const
|
|
2
|
-
`),assets:Array.from(o.values())}}async function Z({request:e,cssUrl:s,cacheRoot:t,logger:r}){const a=u.join(t,q(e,s));try{const n=await fetch(s,{headers:{"User-Agent":W}});if(!n.ok)throw new Error(`Failed to download Google Font CSS: ${n.status} ${n.statusText}`);const o=await n.text();return await I.writeFile(a,o),o}catch(n){if(
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const S=require("node:fs"),u=require("node:path"),P=require("../index-DH37GTQj.cjs"),I=require("node:fs/promises"),Q=require("node:crypto");var A=typeof document<"u"?document.currentScript:null;const X="https://fonts.googleapis.com/css2",M="normal",K=400,W="Mozilla/5.0 (compatible; BeatUI Tailwind Plugin; +https://tempots.com)";async function Y(e){const{projectRoot:s,requests:t,logger:r}=e;if(!t||t.length===0)return null;const a=e.cacheDir?u.resolve(e.cacheDir):u.join(s,"node_modules",".beatui","google-fonts"),n=[],o=new Map;await I.mkdir(a,{recursive:!0}).catch(m=>{r?.(`Unable to create BeatUI Google Fonts cache directory: ${m}`)});for(const m of t)try{const l=z(m),f=await Z({request:m,cssUrl:l,cacheRoot:a,logger:r});if(!f)continue;const p=await re({cssText:f,cacheRoot:a,assetMap:o,logger:r});n.push(p)}catch(l){r?.(`Unexpected error while downloading Google Font "${m.family}": ${String(l)}`)}return n.length===0||o.size===0?null:{cssText:n.join(`
|
|
2
|
+
`),assets:Array.from(o.values())}}async function Z({request:e,cssUrl:s,cacheRoot:t,logger:r}){const a=u.join(t,q(e,s));try{const n=await fetch(s,{headers:{"User-Agent":W}});if(!n.ok)throw new Error(`Failed to download Google Font CSS: ${n.status} ${n.statusText}`);const o=await n.text();return await I.writeFile(a,o),o}catch(n){if(S.existsSync(a))try{const o=await I.readFile(a,"utf8");return r?.(`Using cached Google Font CSS for ${e.family} because download failed.`),o}catch(o){r?.(`Failed to read cached Google Font CSS for ${e.family}: ${o}`)}return r?.(`Unable to download Google Font CSS for ${e.family}: ${n}`),null}}function q(e,s){const t=Q.createHash("sha1").update(s).digest("hex").slice(0,10);return`${e.family.trim().toLowerCase().replace(/[^a-z0-9]+/g,"-")||"font"}-${t}.css`}function z(e){const{family:s}=e,t=s.trim().replace(/\s+/g," "),r=ee(e.weights),a=te(e.styles),n=new URLSearchParams;return n.append("family",se(t,r,a)),e.display&&n.append("display",e.display),e.subsets&&e.subsets.length>0&&n.append("subset",e.subsets.join(",")),e.text&&n.append("text",e.text),`${X}?${n.toString()}`}function ee(e){return!e||e.length===0?[]:Array.from(new Set(e)).sort((s,t)=>s-t)}function te(e){if(!e||e.length===0)return[M];const s=Array.from(new Set(e)),t=s.includes("italic"),r=s.includes("normal");return!t&&!r&&s.push(M),s.sort((a,n)=>a===n?0:a==="normal"?-1:1)}function se(e,s,t){if(s.length===0&&t.every(l=>l==="normal"))return e;const r=t.includes("italic"),a=t.includes("normal"),n=s.length>0?s:[K];if(!r)return`${e}:wght@${n.join(";")}`;const o=new Set;a&&n.forEach(l=>{o.add(`0,${l}`)}),n.forEach(l=>{o.add(`1,${l}`)});const m=Array.from(o).sort((l,f)=>{const[p,C]=l.split(",").map(Number),[T,v]=f.split(",").map(Number);return p-T||C-v});return`${e}:ital,wght@${m.join(";")}`}const ne=/url\(([^)]+)\)/g;async function re({cssText:e,cacheRoot:s,assetMap:t,logger:r}){let a=e;const n=new Set;let o;for(;(o=ne.exec(e))!==null;){const l=o[1].trim().replace(/^['"]|['"]$/g,"");l.startsWith("http")&&n.add(l)}for(const m of n){const l=await ae(m,s,t,r);if(!l)continue;const f=m.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&"),p=new RegExp(`url\\((['"])${f}\\1\\)`,"g"),C=new RegExp(`url\\(${f}\\)`,"g");a=a.replace(p,`url(${l.placeholder})`),a=a.replace(C,`url(${l.placeholder})`)}return a}async function ae(e,s,t,r){const a=t.get(e);if(a)return a;let n;try{const f=new URL(e);n=u.basename(f.pathname)}catch(f){return r?.(`Invalid Google Font URL skipped: ${e} (${f})`),null}if(!n)return r?.(`Unable to derive file name for Google Font URL: ${e}`),null;const o=u.join(s,n),m=`__BEATUI_GOOGLE_FONT_${t.size}__`;if(!S.existsSync(o))try{const f=await fetch(e,{headers:{"User-Agent":W}});if(!f.ok)return r?.(`Failed to download Google Font asset ${n}: ${f.status} ${f.statusText}`),null;const p=Buffer.from(await f.arrayBuffer());await I.writeFile(o,p)}catch(f){return r?.(`Unexpected error while downloading Google Font asset ${n}: ${String(f)}`),null}const l={url:e,fileName:n,localPath:o,placeholder:m};return t.set(e,l),l}function V(e){const s=typeof e=="string"?new URL(e):e;if(s.protocol!=="file:")throw new TypeError(`Expected file URL, received: ${s.href}`);const t=s.hostname,r=t===""||t==="localhost",a=decodeURIComponent(s.pathname);if(process.platform==="win32"){let n=a.replace(/\//g,"\\");return!r&&t?`\\\\${t}${n}`:(n.startsWith("\\")&&(n=n.slice(1)),n)}return!r&&t?`//${t}${a}`:a}const B="@tempots/beatui/tailwind.css",y="beatui.tailwind.css",b=u.dirname(V(typeof document>"u"?require("url").pathToFileURL(__filename).href:A&&A.tagName.toUpperCase()==="SCRIPT"&&A.src||new URL("tailwind/vite-plugin.cjs.js",document.baseURI).href)),G=oe(b)??b;function N(e){if(Object.keys(e).length===0)return"";let s=`:root {
|
|
3
3
|
`;for(const[t,r]of Object.entries(e))s+=` ${t}: ${r};
|
|
4
4
|
`;return s+=`}
|
|
5
|
-
`,s}function oe(e){let s=e;const t=u.parse(s).root;for(;s&&s!==t;){const r=u.join(s,"package.json");if(
|
|
6
|
-
`)};return{name:"beatui-tailwind",enforce:"pre",async configResolved(h){if(s=h.root,k=h.command==="build",o=h.base&&h.base!=="/"?h.base.endsWith("/")?h.base:`${h.base}/`:"/",t){const
|
|
7
|
-
${D}`),
|
|
8
|
-
${
|
|
5
|
+
`,s}function oe(e){let s=e;const t=u.parse(s).root;for(;s&&s!==t;){const r=u.join(s,"package.json");if(S.existsSync(r))try{if(JSON.parse(S.readFileSync(r,"utf8"))?.name==="@tempots/beatui")return s}catch{}s=u.dirname(s)}return null}function ie(e){if(e==null)return null;const s=typeof e=="string"?e:e.id;if(!s)return null;const[t]=s.split("?");return t.startsWith("virtual:")||t.startsWith("\0")?null:t.startsWith("/@fs/")?decodeURIComponent(t.slice(4)):t.startsWith("file://")?V(t):u.isAbsolute(t)?t:null}function le(e){const s=new Set([u.resolve(b,y),u.resolve(b,"../",y),u.resolve(b,"../../",y),u.resolve(b,"tailwind.css"),u.resolve(b,"../tailwind.css"),u.resolve(b,"../../tailwind.css"),u.resolve(b,"../styles/tailwind.css"),u.resolve(b,"../../styles/tailwind.css"),u.resolve(G,"dist",y),u.resolve(G,y),u.resolve(G,"tailwind.css"),u.resolve(G,"src/styles/tailwind.css"),u.resolve(e,"node_modules/@tempots/beatui/tailwind.css")]);for(const t of s)if(S.existsSync(t))return t;return null}function ce(e){return e?Array.isArray(e)?e:[e]:[]}function ue(e,s){let t=e;for(const[r,a]of s)t=t.split(r).join(a);return t}async function de(e,s){if(e==null||typeof e!="object")return null;const t=e.resolve;if(!t)return null;try{return await t.call(e,s,void 0,{skipSelf:!0})}catch{return null}}function H(e={}){let s=process.cwd();const t=e.injectCss!==!1,r=e.darkClass??"dark",a=e.rtlAttribute??"dir",n=e.rtlValue??"rtl";let o="/";const l=e.semanticColors!=null||e.semanticFonts!=null||e.semanticRadii!=null||e.semanticShadows!=null||e.semanticMotion!=null||e.semanticSpacing!=null||e.semanticTextShadows!=null?N(P.generateSemanticTokenVariables({colors:e.semanticColors,fonts:e.semanticFonts,radii:e.semanticRadii,shadows:e.semanticShadows,motion:e.semanticMotion,spacing:e.semanticSpacing,textShadows:e.semanticTextShadows})):"",f=e.fontFamilies?N(P.generateFontFamilyOverrideVariables(e.fontFamilies)):"",p={};e.baseSpacing&&(p[P.getSpacingVarName("base")]=e.baseSpacing),e.baseFontSize&&(p[P.getBaseFontSizeVarName()]=e.baseFontSize),e.baseMotionDuration&&(p[P.getMotionDurationVarName("base")]=e.baseMotionDuration);const C=N(p),T=ce(e.googleFonts);let v="",U=[];const L=new Map,_=new Map,O=new Map,J="/@beatui/google-fonts",E=[];let j=null,F=null,k=!1;const x=h=>{const d=[C,l,f];return v&&(h==="dev"?d.push(ue(v,L)):d.push(v)),d.filter(i=>i&&i.length>0).join(`
|
|
6
|
+
`)};return{name:"beatui-tailwind",enforce:"pre",async configResolved(h){if(s=h.root,k=h.command==="build",o=h.base&&h.base!=="/"?h.base.endsWith("/")?h.base:`${h.base}/`:"/",t){const i=await de(this,B);F=ie(i)??le(s)}const d=i=>{this&&typeof this.warn=="function"?this.warn(i):h.logger.warn(i)};if(T.length>0){const i=Array.from(new Set(T.map(z))),c=await Y({projectRoot:s,requests:T,logger:g=>d(`[BeatUI] ${g}`)});if(v=c?.cssText??"",U=c?.assets??[],L.clear(),_.clear(),O.clear(),E.length=0,U.length>0)for(const g of U){const w=`${J}/${g.fileName}`;L.set(g.placeholder,w),O.set(w,g.localPath)}else E.push(...i)}else E.length=0;t&&!F&&d("[BeatUI] Unable to resolve @tempots/beatui/tailwind.css. CSS will not be auto-injected.")},configureServer(h){!t||F==null||(h.middlewares.use((d,i,c)=>{const g=d.method??"GET";if(!["GET","HEAD"].includes(g)){c();return}const w=(d.url??"").split("?")[0];if(!new Set([`/${y}`,o==="/"?null:`${o}${y}`].filter($=>!!$)).has(w)){c();return}i.setHeader("Content-Type","text/css");try{let $=S.readFileSync(F,"utf8");const D=x("dev");D&&($+=`
|
|
7
|
+
${D}`),i.end($)}catch($){h.config.logger.error(`[BeatUI] Failed to stream ${B}: ${String($)}`),i.statusCode=500,i.end()}}),O.size>0&&h.middlewares.use((d,i,c)=>{const g=d.method??"GET";if(!["GET","HEAD"].includes(g)){c();return}const w=(d.url??"").split("?")[0],R=w?O.get(w):void 0;if(!R){c();return}i.setHeader("Content-Type","font/woff2"),S.createReadStream(R).on("error",()=>{i.statusCode=500,i.end()}).pipe(i)}))},buildStart(){if(!k||!t||F==null)return;_.clear(),j=null;const h=F;let d=S.readFileSync(h,"utf8");const i=x("raw");if(i&&(d+=`
|
|
8
|
+
${i}`),j=this.emitFile({type:"asset",fileName:y,source:d}),U.length>0)for(const c of U)try{const g=S.readFileSync(c.localPath),w=this.emitFile({type:"asset",name:`assets/${c.fileName}`,source:g});_.set(c.placeholder,w)}catch(g){this.warn(`[BeatUI] Failed to include Google Font asset ${c.fileName}: ${String(g)}`)}},generateBundle(h,d){if(!k||!j)return;const i=this.getFileName(j),c=d[i];if(!c||c.type!=="asset"||typeof c.source!="string")return;let g=c.source;for(const[w,R]of _){const $=this.getFileName(R);g=g.split(w).join($)}c.source=g},transformIndexHtml(h){const d=[];if(t&&F){const c=o==="/"?`/${y}`:`${o}${y}`;d.push({tag:"link",attrs:{rel:"stylesheet",href:c},injectTo:"head-prepend"})}E.length>0&&d.push({tag:"link",attrs:{rel:"preconnect",href:"https://fonts.googleapis.com"},injectTo:"head"},{tag:"link",attrs:{rel:"preconnect",href:"https://fonts.gstatic.com",crossorigin:""},injectTo:"head"},...E.map(c=>({tag:"link",attrs:{rel:"stylesheet",href:c,"data-beatui-google-font":""},injectTo:"head"})));const i=`
|
|
9
9
|
(() => {
|
|
10
10
|
const apply = () => {
|
|
11
11
|
const root = document.documentElement
|
|
@@ -30,4 +30,4 @@ ${d}`),G=this.emitFile({type:"asset",fileName:b,source:c}),U.length>0)for(const
|
|
|
30
30
|
attributeFilter: ['class', '${a.replace(/'/g,"\\'")}'],
|
|
31
31
|
})
|
|
32
32
|
})();
|
|
33
|
-
`;return
|
|
33
|
+
`;return d.push({tag:"script",attrs:{type:"module"},children:i,injectTo:"body"}),{html:h,tags:d}}}}exports.beatuiTailwindPlugin=H;exports.default=H;
|
|
@@ -1,37 +1,37 @@
|
|
|
1
|
-
import
|
|
1
|
+
import S from "node:fs";
|
|
2
2
|
import u from "node:path";
|
|
3
3
|
import { g as V, a as H, b as J, c as Q, d as X } from "../index-Di1_W_7Q.js";
|
|
4
4
|
import { mkdir as K, writeFile as D, readFile as Y } from "node:fs/promises";
|
|
5
5
|
import { createHash as Z } from "node:crypto";
|
|
6
6
|
const q = "https://fonts.googleapis.com/css2", N = "normal", ee = 400, M = "Mozilla/5.0 (compatible; BeatUI Tailwind Plugin; +https://tempots.com)";
|
|
7
7
|
async function te(e) {
|
|
8
|
-
const { projectRoot: s, requests: t, logger:
|
|
8
|
+
const { projectRoot: s, requests: t, logger: r } = e;
|
|
9
9
|
if (!t || t.length === 0)
|
|
10
10
|
return null;
|
|
11
|
-
const
|
|
12
|
-
await K(
|
|
13
|
-
|
|
11
|
+
const a = e.cacheDir ? u.resolve(e.cacheDir) : u.join(s, "node_modules", ".beatui", "google-fonts"), n = [], o = /* @__PURE__ */ new Map();
|
|
12
|
+
await K(a, { recursive: !0 }).catch((g) => {
|
|
13
|
+
r?.(`Unable to create BeatUI Google Fonts cache directory: ${g}`);
|
|
14
14
|
});
|
|
15
|
-
for (const
|
|
15
|
+
for (const g of t)
|
|
16
16
|
try {
|
|
17
|
-
const i = B(
|
|
18
|
-
request:
|
|
17
|
+
const i = B(g), f = await se({
|
|
18
|
+
request: g,
|
|
19
19
|
cssUrl: i,
|
|
20
|
-
cacheRoot:
|
|
21
|
-
logger:
|
|
20
|
+
cacheRoot: a,
|
|
21
|
+
logger: r
|
|
22
22
|
});
|
|
23
23
|
if (!f)
|
|
24
24
|
continue;
|
|
25
25
|
const p = await ie({
|
|
26
26
|
cssText: f,
|
|
27
|
-
cacheRoot:
|
|
27
|
+
cacheRoot: a,
|
|
28
28
|
assetMap: o,
|
|
29
|
-
logger:
|
|
29
|
+
logger: r
|
|
30
30
|
});
|
|
31
31
|
n.push(p);
|
|
32
32
|
} catch (i) {
|
|
33
|
-
|
|
34
|
-
`Unexpected error while downloading Google Font "${
|
|
33
|
+
r?.(
|
|
34
|
+
`Unexpected error while downloading Google Font "${g.family}": ${String(i)}`
|
|
35
35
|
);
|
|
36
36
|
}
|
|
37
37
|
return n.length === 0 || o.size === 0 ? null : {
|
|
@@ -44,9 +44,9 @@ async function se({
|
|
|
44
44
|
request: e,
|
|
45
45
|
cssUrl: s,
|
|
46
46
|
cacheRoot: t,
|
|
47
|
-
logger:
|
|
47
|
+
logger: r
|
|
48
48
|
}) {
|
|
49
|
-
const
|
|
49
|
+
const a = u.join(t, ne(e, s));
|
|
50
50
|
try {
|
|
51
51
|
const n = await fetch(s, {
|
|
52
52
|
headers: {
|
|
@@ -58,20 +58,20 @@ async function se({
|
|
|
58
58
|
`Failed to download Google Font CSS: ${n.status} ${n.statusText}`
|
|
59
59
|
);
|
|
60
60
|
const o = await n.text();
|
|
61
|
-
return await D(
|
|
61
|
+
return await D(a, o), o;
|
|
62
62
|
} catch (n) {
|
|
63
|
-
if (
|
|
63
|
+
if (S.existsSync(a))
|
|
64
64
|
try {
|
|
65
|
-
const o = await Y(
|
|
66
|
-
return
|
|
65
|
+
const o = await Y(a, "utf8");
|
|
66
|
+
return r?.(
|
|
67
67
|
`Using cached Google Font CSS for ${e.family} because download failed.`
|
|
68
68
|
), o;
|
|
69
69
|
} catch (o) {
|
|
70
|
-
|
|
70
|
+
r?.(
|
|
71
71
|
`Failed to read cached Google Font CSS for ${e.family}: ${o}`
|
|
72
72
|
);
|
|
73
73
|
}
|
|
74
|
-
return
|
|
74
|
+
return r?.(
|
|
75
75
|
`Unable to download Google Font CSS for ${e.family}: ${n}`
|
|
76
76
|
), null;
|
|
77
77
|
}
|
|
@@ -81,74 +81,74 @@ function ne(e, s) {
|
|
|
81
81
|
return `${e.family.trim().toLowerCase().replace(/[^a-z0-9]+/g, "-") || "font"}-${t}.css`;
|
|
82
82
|
}
|
|
83
83
|
function B(e) {
|
|
84
|
-
const { family: s } = e, t = s.trim().replace(/\s+/g, " "),
|
|
85
|
-
return n.append("family", oe(t,
|
|
84
|
+
const { family: s } = e, t = s.trim().replace(/\s+/g, " "), r = re(e.weights), a = ae(e.styles), n = new URLSearchParams();
|
|
85
|
+
return n.append("family", oe(t, r, a)), e.display && n.append("display", e.display), e.subsets && e.subsets.length > 0 && n.append("subset", e.subsets.join(",")), e.text && n.append("text", e.text), `${q}?${n.toString()}`;
|
|
86
86
|
}
|
|
87
|
-
function
|
|
87
|
+
function re(e) {
|
|
88
88
|
return !e || e.length === 0 ? [] : Array.from(new Set(e)).sort((s, t) => s - t);
|
|
89
89
|
}
|
|
90
|
-
function
|
|
90
|
+
function ae(e) {
|
|
91
91
|
if (!e || e.length === 0)
|
|
92
92
|
return [N];
|
|
93
|
-
const s = Array.from(new Set(e)), t = s.includes("italic"),
|
|
94
|
-
return !t && !
|
|
93
|
+
const s = Array.from(new Set(e)), t = s.includes("italic"), r = s.includes("normal");
|
|
94
|
+
return !t && !r && s.push(N), s.sort((a, n) => a === n ? 0 : a === "normal" ? -1 : 1);
|
|
95
95
|
}
|
|
96
96
|
function oe(e, s, t) {
|
|
97
97
|
if (s.length === 0 && t.every((i) => i === "normal"))
|
|
98
98
|
return e;
|
|
99
|
-
const
|
|
100
|
-
if (!
|
|
99
|
+
const r = t.includes("italic"), a = t.includes("normal"), n = s.length > 0 ? s : [ee];
|
|
100
|
+
if (!r)
|
|
101
101
|
return `${e}:wght@${n.join(";")}`;
|
|
102
102
|
const o = /* @__PURE__ */ new Set();
|
|
103
|
-
|
|
103
|
+
a && n.forEach((i) => {
|
|
104
104
|
o.add(`0,${i}`);
|
|
105
105
|
}), n.forEach((i) => {
|
|
106
106
|
o.add(`1,${i}`);
|
|
107
107
|
});
|
|
108
|
-
const
|
|
109
|
-
const [p,
|
|
110
|
-
return p - T ||
|
|
108
|
+
const g = Array.from(o).sort((i, f) => {
|
|
109
|
+
const [p, v] = i.split(",").map(Number), [T, C] = f.split(",").map(Number);
|
|
110
|
+
return p - T || v - C;
|
|
111
111
|
});
|
|
112
|
-
return `${e}:ital,wght@${
|
|
112
|
+
return `${e}:ital,wght@${g.join(";")}`;
|
|
113
113
|
}
|
|
114
114
|
const le = /url\(([^)]+)\)/g;
|
|
115
115
|
async function ie({
|
|
116
116
|
cssText: e,
|
|
117
117
|
cacheRoot: s,
|
|
118
118
|
assetMap: t,
|
|
119
|
-
logger:
|
|
119
|
+
logger: r
|
|
120
120
|
}) {
|
|
121
|
-
let
|
|
121
|
+
let a = e;
|
|
122
122
|
const n = /* @__PURE__ */ new Set();
|
|
123
123
|
let o;
|
|
124
124
|
for (; (o = le.exec(e)) !== null; ) {
|
|
125
125
|
const i = o[1].trim().replace(/^['"]|['"]$/g, "");
|
|
126
126
|
i.startsWith("http") && n.add(i);
|
|
127
127
|
}
|
|
128
|
-
for (const
|
|
129
|
-
const i = await ce(
|
|
128
|
+
for (const g of n) {
|
|
129
|
+
const i = await ce(g, s, t, r);
|
|
130
130
|
if (!i)
|
|
131
131
|
continue;
|
|
132
|
-
const f =
|
|
133
|
-
|
|
132
|
+
const f = g.replace(/[-/\\^$*+?.()|[\]{}]/g, "\\$&"), p = new RegExp(`url\\((['"])${f}\\1\\)`, "g"), v = new RegExp(`url\\(${f}\\)`, "g");
|
|
133
|
+
a = a.replace(p, `url(${i.placeholder})`), a = a.replace(v, `url(${i.placeholder})`);
|
|
134
134
|
}
|
|
135
|
-
return
|
|
135
|
+
return a;
|
|
136
136
|
}
|
|
137
|
-
async function ce(e, s, t,
|
|
138
|
-
const
|
|
139
|
-
if (
|
|
140
|
-
return
|
|
137
|
+
async function ce(e, s, t, r) {
|
|
138
|
+
const a = t.get(e);
|
|
139
|
+
if (a)
|
|
140
|
+
return a;
|
|
141
141
|
let n;
|
|
142
142
|
try {
|
|
143
143
|
const f = new URL(e);
|
|
144
144
|
n = u.basename(f.pathname);
|
|
145
145
|
} catch (f) {
|
|
146
|
-
return
|
|
146
|
+
return r?.(`Invalid Google Font URL skipped: ${e} (${f})`), null;
|
|
147
147
|
}
|
|
148
148
|
if (!n)
|
|
149
|
-
return
|
|
150
|
-
const o = u.join(s, n),
|
|
151
|
-
if (!
|
|
149
|
+
return r?.(`Unable to derive file name for Google Font URL: ${e}`), null;
|
|
150
|
+
const o = u.join(s, n), g = `__BEATUI_GOOGLE_FONT_${t.size}__`;
|
|
151
|
+
if (!S.existsSync(o))
|
|
152
152
|
try {
|
|
153
153
|
const f = await fetch(e, {
|
|
154
154
|
headers: {
|
|
@@ -156,13 +156,13 @@ async function ce(e, s, t, a) {
|
|
|
156
156
|
}
|
|
157
157
|
});
|
|
158
158
|
if (!f.ok)
|
|
159
|
-
return
|
|
159
|
+
return r?.(
|
|
160
160
|
`Failed to download Google Font asset ${n}: ${f.status} ${f.statusText}`
|
|
161
161
|
), null;
|
|
162
162
|
const p = Buffer.from(await f.arrayBuffer());
|
|
163
163
|
await D(o, p);
|
|
164
164
|
} catch (f) {
|
|
165
|
-
return
|
|
165
|
+
return r?.(
|
|
166
166
|
`Unexpected error while downloading Google Font asset ${n}: ${String(f)}`
|
|
167
167
|
), null;
|
|
168
168
|
}
|
|
@@ -170,7 +170,7 @@ async function ce(e, s, t, a) {
|
|
|
170
170
|
url: e,
|
|
171
171
|
fileName: n,
|
|
172
172
|
localPath: o,
|
|
173
|
-
placeholder:
|
|
173
|
+
placeholder: g
|
|
174
174
|
};
|
|
175
175
|
return t.set(e, i), i;
|
|
176
176
|
}
|
|
@@ -178,21 +178,21 @@ function W(e) {
|
|
|
178
178
|
const s = typeof e == "string" ? new URL(e) : e;
|
|
179
179
|
if (s.protocol !== "file:")
|
|
180
180
|
throw new TypeError(`Expected file URL, received: ${s.href}`);
|
|
181
|
-
const t = s.hostname,
|
|
181
|
+
const t = s.hostname, r = t === "" || t === "localhost", a = decodeURIComponent(s.pathname);
|
|
182
182
|
if (process.platform === "win32") {
|
|
183
|
-
let n =
|
|
184
|
-
return !
|
|
183
|
+
let n = a.replace(/\//g, "\\");
|
|
184
|
+
return !r && t ? `\\\\${t}${n}` : (n.startsWith("\\") && (n = n.slice(1)), n);
|
|
185
185
|
}
|
|
186
|
-
return !
|
|
186
|
+
return !r && t ? `//${t}${a}` : a;
|
|
187
187
|
}
|
|
188
|
-
const
|
|
189
|
-
function
|
|
188
|
+
const x = "@tempots/beatui/tailwind.css", y = "beatui.tailwind.css", b = u.dirname(W(import.meta.url)), k = ue(b) ?? b;
|
|
189
|
+
function j(e) {
|
|
190
190
|
if (Object.keys(e).length === 0)
|
|
191
191
|
return "";
|
|
192
192
|
let s = `:root {
|
|
193
193
|
`;
|
|
194
|
-
for (const [t,
|
|
195
|
-
s += ` ${t}: ${
|
|
194
|
+
for (const [t, r] of Object.entries(e))
|
|
195
|
+
s += ` ${t}: ${r};
|
|
196
196
|
`;
|
|
197
197
|
return s += `}
|
|
198
198
|
`, s;
|
|
@@ -201,10 +201,10 @@ function ue(e) {
|
|
|
201
201
|
let s = e;
|
|
202
202
|
const t = u.parse(s).root;
|
|
203
203
|
for (; s && s !== t; ) {
|
|
204
|
-
const
|
|
205
|
-
if (
|
|
204
|
+
const r = u.join(s, "package.json");
|
|
205
|
+
if (S.existsSync(r))
|
|
206
206
|
try {
|
|
207
|
-
if (JSON.parse(
|
|
207
|
+
if (JSON.parse(S.readFileSync(r, "utf8"))?.name === "@tempots/beatui")
|
|
208
208
|
return s;
|
|
209
209
|
} catch {
|
|
210
210
|
}
|
|
@@ -223,22 +223,22 @@ function de(e) {
|
|
|
223
223
|
}
|
|
224
224
|
function fe(e) {
|
|
225
225
|
const s = /* @__PURE__ */ new Set([
|
|
226
|
-
u.resolve(
|
|
227
|
-
u.resolve(
|
|
228
|
-
u.resolve(
|
|
229
|
-
u.resolve(
|
|
230
|
-
u.resolve(
|
|
231
|
-
u.resolve(
|
|
232
|
-
u.resolve(
|
|
233
|
-
u.resolve(
|
|
234
|
-
u.resolve(k, "dist",
|
|
235
|
-
u.resolve(k,
|
|
226
|
+
u.resolve(b, y),
|
|
227
|
+
u.resolve(b, "../", y),
|
|
228
|
+
u.resolve(b, "../../", y),
|
|
229
|
+
u.resolve(b, "tailwind.css"),
|
|
230
|
+
u.resolve(b, "../tailwind.css"),
|
|
231
|
+
u.resolve(b, "../../tailwind.css"),
|
|
232
|
+
u.resolve(b, "../styles/tailwind.css"),
|
|
233
|
+
u.resolve(b, "../../styles/tailwind.css"),
|
|
234
|
+
u.resolve(k, "dist", y),
|
|
235
|
+
u.resolve(k, y),
|
|
236
236
|
u.resolve(k, "tailwind.css"),
|
|
237
237
|
u.resolve(k, "src/styles/tailwind.css"),
|
|
238
238
|
u.resolve(e, "node_modules/@tempots/beatui/tailwind.css")
|
|
239
239
|
]);
|
|
240
240
|
for (const t of s)
|
|
241
|
-
if (
|
|
241
|
+
if (S.existsSync(t))
|
|
242
242
|
return t;
|
|
243
243
|
return null;
|
|
244
244
|
}
|
|
@@ -247,11 +247,13 @@ function he(e) {
|
|
|
247
247
|
}
|
|
248
248
|
function me(e, s) {
|
|
249
249
|
let t = e;
|
|
250
|
-
for (const [
|
|
251
|
-
t = t.split(
|
|
250
|
+
for (const [r, a] of s)
|
|
251
|
+
t = t.split(r).join(a);
|
|
252
252
|
return t;
|
|
253
253
|
}
|
|
254
254
|
async function ge(e, s) {
|
|
255
|
+
if (e == null || typeof e != "object")
|
|
256
|
+
return null;
|
|
255
257
|
const t = e.resolve;
|
|
256
258
|
if (!t)
|
|
257
259
|
return null;
|
|
@@ -263,9 +265,9 @@ async function ge(e, s) {
|
|
|
263
265
|
}
|
|
264
266
|
function $e(e = {}) {
|
|
265
267
|
let s = process.cwd();
|
|
266
|
-
const t = e.injectCss !== !1,
|
|
268
|
+
const t = e.injectCss !== !1, r = e.darkClass ?? "dark", a = e.rtlAttribute ?? "dir", n = e.rtlValue ?? "rtl";
|
|
267
269
|
let o = "/";
|
|
268
|
-
const i = e.semanticColors != null || e.semanticFonts != null || e.semanticRadii != null || e.semanticShadows != null || e.semanticMotion != null || e.semanticSpacing != null || e.semanticTextShadows != null ?
|
|
270
|
+
const i = e.semanticColors != null || e.semanticFonts != null || e.semanticRadii != null || e.semanticShadows != null || e.semanticMotion != null || e.semanticSpacing != null || e.semanticTextShadows != null ? j(
|
|
269
271
|
V({
|
|
270
272
|
colors: e.semanticColors,
|
|
271
273
|
fonts: e.semanticFonts,
|
|
@@ -275,157 +277,160 @@ function $e(e = {}) {
|
|
|
275
277
|
spacing: e.semanticSpacing,
|
|
276
278
|
textShadows: e.semanticTextShadows
|
|
277
279
|
})
|
|
278
|
-
) : "", f = e.fontFamilies ?
|
|
280
|
+
) : "", f = e.fontFamilies ? j(
|
|
279
281
|
H(e.fontFamilies)
|
|
280
282
|
) : "", p = {};
|
|
281
283
|
e.baseSpacing && (p[J("base")] = e.baseSpacing), e.baseFontSize && (p[Q()] = e.baseFontSize), e.baseMotionDuration && (p[X("base")] = e.baseMotionDuration);
|
|
282
|
-
const
|
|
283
|
-
let
|
|
284
|
-
const
|
|
285
|
-
let O = null, F = null,
|
|
284
|
+
const v = j(p), T = he(e.googleFonts);
|
|
285
|
+
let C = "", E = [];
|
|
286
|
+
const A = /* @__PURE__ */ new Map(), P = /* @__PURE__ */ new Map(), G = /* @__PURE__ */ new Map(), z = "/@beatui/google-fonts", U = [];
|
|
287
|
+
let O = null, F = null, _ = !1;
|
|
286
288
|
const I = (h) => {
|
|
287
|
-
const
|
|
288
|
-
|
|
289
|
+
const d = [
|
|
290
|
+
v,
|
|
289
291
|
i,
|
|
290
292
|
f
|
|
291
293
|
];
|
|
292
|
-
return
|
|
293
|
-
me(
|
|
294
|
-
) :
|
|
294
|
+
return C && (h === "dev" ? d.push(
|
|
295
|
+
me(C, A)
|
|
296
|
+
) : d.push(C)), d.filter((l) => l && l.length > 0).join(`
|
|
295
297
|
`);
|
|
296
298
|
};
|
|
297
299
|
return {
|
|
298
300
|
name: "beatui-tailwind",
|
|
299
301
|
enforce: "pre",
|
|
300
302
|
async configResolved(h) {
|
|
301
|
-
if (s = h.root,
|
|
302
|
-
const
|
|
303
|
+
if (s = h.root, _ = h.command === "build", o = h.base && h.base !== "/" ? h.base.endsWith("/") ? h.base : `${h.base}/` : "/", t) {
|
|
304
|
+
const l = await ge(
|
|
303
305
|
this,
|
|
304
|
-
|
|
306
|
+
x
|
|
305
307
|
);
|
|
306
|
-
F = de(
|
|
308
|
+
F = de(l) ?? fe(s);
|
|
307
309
|
}
|
|
310
|
+
const d = (l) => {
|
|
311
|
+
this && typeof this.warn == "function" ? this.warn(l) : h.logger.warn(l);
|
|
312
|
+
};
|
|
308
313
|
if (T.length > 0) {
|
|
309
|
-
const
|
|
314
|
+
const l = Array.from(
|
|
310
315
|
// eslint-disable-next-line tempots/require-async-signal-disposal -- This is an array, not a Signal
|
|
311
316
|
new Set(T.map(B))
|
|
312
|
-
),
|
|
317
|
+
), c = await te({
|
|
313
318
|
projectRoot: s,
|
|
314
319
|
requests: T,
|
|
315
|
-
logger: (
|
|
320
|
+
logger: (m) => d(`[BeatUI] ${m}`)
|
|
316
321
|
});
|
|
317
|
-
if (
|
|
318
|
-
for (const
|
|
319
|
-
const
|
|
320
|
-
|
|
322
|
+
if (C = c?.cssText ?? "", E = c?.assets ?? [], A.clear(), P.clear(), G.clear(), U.length = 0, E.length > 0)
|
|
323
|
+
for (const m of E) {
|
|
324
|
+
const w = `${z}/${m.fileName}`;
|
|
325
|
+
A.set(m.placeholder, w), G.set(w, m.localPath);
|
|
321
326
|
}
|
|
322
327
|
else
|
|
323
|
-
U.push(...
|
|
328
|
+
U.push(...l);
|
|
324
329
|
} else
|
|
325
330
|
U.length = 0;
|
|
326
|
-
t && !F &&
|
|
331
|
+
t && !F && d(
|
|
327
332
|
"[BeatUI] Unable to resolve @tempots/beatui/tailwind.css. CSS will not be auto-injected."
|
|
328
333
|
);
|
|
329
334
|
},
|
|
330
335
|
configureServer(h) {
|
|
331
|
-
!t || F == null || (h.middlewares.use((
|
|
332
|
-
const
|
|
333
|
-
if (!["GET", "HEAD"].includes(
|
|
334
|
-
|
|
336
|
+
!t || F == null || (h.middlewares.use((d, l, c) => {
|
|
337
|
+
const m = d.method ?? "GET";
|
|
338
|
+
if (!["GET", "HEAD"].includes(m)) {
|
|
339
|
+
c();
|
|
335
340
|
return;
|
|
336
341
|
}
|
|
337
|
-
const
|
|
342
|
+
const w = (d.url ?? "").split("?")[0];
|
|
338
343
|
if (!new Set(
|
|
339
344
|
[
|
|
340
|
-
`/${
|
|
341
|
-
o === "/" ? null : `${o}${
|
|
345
|
+
`/${y}`,
|
|
346
|
+
o === "/" ? null : `${o}${y}`
|
|
342
347
|
].filter(($) => !!$)
|
|
343
|
-
).has(
|
|
344
|
-
|
|
348
|
+
).has(w)) {
|
|
349
|
+
c();
|
|
345
350
|
return;
|
|
346
351
|
}
|
|
347
|
-
|
|
352
|
+
l.setHeader("Content-Type", "text/css");
|
|
348
353
|
try {
|
|
349
|
-
let $ =
|
|
354
|
+
let $ = S.readFileSync(F, "utf8");
|
|
350
355
|
const L = I("dev");
|
|
351
356
|
L && ($ += `
|
|
352
|
-
${L}`),
|
|
357
|
+
${L}`), l.end($);
|
|
353
358
|
} catch ($) {
|
|
354
359
|
h.config.logger.error(
|
|
355
|
-
`[BeatUI] Failed to stream ${
|
|
356
|
-
),
|
|
360
|
+
`[BeatUI] Failed to stream ${x}: ${String($)}`
|
|
361
|
+
), l.statusCode = 500, l.end();
|
|
357
362
|
}
|
|
358
|
-
}), G.size > 0 && h.middlewares.use((
|
|
359
|
-
const
|
|
360
|
-
if (!["GET", "HEAD"].includes(
|
|
361
|
-
|
|
363
|
+
}), G.size > 0 && h.middlewares.use((d, l, c) => {
|
|
364
|
+
const m = d.method ?? "GET";
|
|
365
|
+
if (!["GET", "HEAD"].includes(m)) {
|
|
366
|
+
c();
|
|
362
367
|
return;
|
|
363
368
|
}
|
|
364
|
-
const
|
|
369
|
+
const w = (d.url ?? "").split("?")[0], R = w ? G.get(w) : void 0;
|
|
365
370
|
if (!R) {
|
|
366
|
-
|
|
371
|
+
c();
|
|
367
372
|
return;
|
|
368
373
|
}
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
}).pipe(
|
|
374
|
+
l.setHeader("Content-Type", "font/woff2"), S.createReadStream(R).on("error", () => {
|
|
375
|
+
l.statusCode = 500, l.end();
|
|
376
|
+
}).pipe(l);
|
|
372
377
|
}));
|
|
373
378
|
},
|
|
374
379
|
buildStart() {
|
|
375
|
-
if (!
|
|
380
|
+
if (!_ || !t || F == null) return;
|
|
376
381
|
P.clear(), O = null;
|
|
377
382
|
const h = F;
|
|
378
|
-
let
|
|
379
|
-
const
|
|
380
|
-
if (
|
|
381
|
-
${
|
|
383
|
+
let d = S.readFileSync(h, "utf8");
|
|
384
|
+
const l = I("raw");
|
|
385
|
+
if (l && (d += `
|
|
386
|
+
${l}`), O = this.emitFile({
|
|
382
387
|
type: "asset",
|
|
383
|
-
fileName:
|
|
384
|
-
source:
|
|
388
|
+
fileName: y,
|
|
389
|
+
source: d
|
|
385
390
|
}), E.length > 0)
|
|
386
|
-
for (const
|
|
391
|
+
for (const c of E)
|
|
387
392
|
try {
|
|
388
|
-
const
|
|
393
|
+
const m = S.readFileSync(c.localPath), w = this.emitFile({
|
|
389
394
|
type: "asset",
|
|
390
|
-
name: `assets/${
|
|
391
|
-
source:
|
|
395
|
+
name: `assets/${c.fileName}`,
|
|
396
|
+
source: m
|
|
392
397
|
});
|
|
393
|
-
P.set(
|
|
394
|
-
} catch (
|
|
398
|
+
P.set(c.placeholder, w);
|
|
399
|
+
} catch (m) {
|
|
395
400
|
this.warn(
|
|
396
|
-
`[BeatUI] Failed to include Google Font asset ${
|
|
397
|
-
|
|
401
|
+
`[BeatUI] Failed to include Google Font asset ${c.fileName}: ${String(
|
|
402
|
+
m
|
|
398
403
|
)}`
|
|
399
404
|
);
|
|
400
405
|
}
|
|
401
406
|
},
|
|
402
|
-
generateBundle(h,
|
|
403
|
-
if (!
|
|
407
|
+
generateBundle(h, d) {
|
|
408
|
+
if (!_ || !O)
|
|
404
409
|
return;
|
|
405
|
-
const
|
|
406
|
-
if (!
|
|
410
|
+
const l = this.getFileName(O), c = d[l];
|
|
411
|
+
if (!c || c.type !== "asset" || typeof c.source != "string")
|
|
407
412
|
return;
|
|
408
|
-
let
|
|
409
|
-
for (const [
|
|
413
|
+
let m = c.source;
|
|
414
|
+
for (const [w, R] of P) {
|
|
410
415
|
const $ = this.getFileName(R);
|
|
411
|
-
|
|
416
|
+
m = m.split(w).join($);
|
|
412
417
|
}
|
|
413
|
-
|
|
418
|
+
c.source = m;
|
|
414
419
|
},
|
|
415
420
|
transformIndexHtml(h) {
|
|
416
|
-
const
|
|
421
|
+
const d = [];
|
|
417
422
|
if (t && F) {
|
|
418
|
-
const
|
|
419
|
-
|
|
423
|
+
const c = o === "/" ? `/${y}` : `${o}${y}`;
|
|
424
|
+
d.push({
|
|
420
425
|
tag: "link",
|
|
421
426
|
attrs: {
|
|
422
427
|
rel: "stylesheet",
|
|
423
|
-
href:
|
|
428
|
+
href: c
|
|
424
429
|
},
|
|
425
430
|
injectTo: "head-prepend"
|
|
426
431
|
});
|
|
427
432
|
}
|
|
428
|
-
U.length > 0 &&
|
|
433
|
+
U.length > 0 && d.push(
|
|
429
434
|
{
|
|
430
435
|
tag: "link",
|
|
431
436
|
attrs: {
|
|
@@ -443,26 +448,26 @@ ${d}`), O = this.emitFile({
|
|
|
443
448
|
},
|
|
444
449
|
injectTo: "head"
|
|
445
450
|
},
|
|
446
|
-
...U.map((
|
|
451
|
+
...U.map((c) => ({
|
|
447
452
|
tag: "link",
|
|
448
453
|
attrs: {
|
|
449
454
|
rel: "stylesheet",
|
|
450
|
-
href:
|
|
455
|
+
href: c,
|
|
451
456
|
"data-beatui-google-font": ""
|
|
452
457
|
},
|
|
453
458
|
injectTo: "head"
|
|
454
459
|
}))
|
|
455
460
|
);
|
|
456
|
-
const
|
|
461
|
+
const l = `
|
|
457
462
|
(() => {
|
|
458
463
|
const apply = () => {
|
|
459
464
|
const root = document.documentElement
|
|
460
465
|
const target = document.body
|
|
461
466
|
if (!target) return
|
|
462
|
-
const hasDark = root.classList.contains('${
|
|
467
|
+
const hasDark = root.classList.contains('${r.replace(/'/g, "\\'")}')
|
|
463
468
|
target.classList.toggle('b-dark', hasDark)
|
|
464
469
|
target.classList.toggle('b-light', !hasDark)
|
|
465
|
-
const dirValue = root.getAttribute('${
|
|
470
|
+
const dirValue = root.getAttribute('${a.replace(/'/g, "\\'")}')
|
|
466
471
|
const isRtl = dirValue === '${n.replace(/'/g, "\\'")}'
|
|
467
472
|
target.classList.toggle('b-rtl', isRtl)
|
|
468
473
|
target.classList.toggle('b-ltr', !isRtl)
|
|
@@ -475,16 +480,16 @@ ${d}`), O = this.emitFile({
|
|
|
475
480
|
const observer = new MutationObserver(apply)
|
|
476
481
|
observer.observe(document.documentElement, {
|
|
477
482
|
attributes: true,
|
|
478
|
-
attributeFilter: ['class', '${
|
|
483
|
+
attributeFilter: ['class', '${a.replace(/'/g, "\\'")}'],
|
|
479
484
|
})
|
|
480
485
|
})();
|
|
481
486
|
`;
|
|
482
|
-
return
|
|
487
|
+
return d.push({
|
|
483
488
|
tag: "script",
|
|
484
489
|
attrs: { type: "module" },
|
|
485
|
-
children:
|
|
490
|
+
children: l,
|
|
486
491
|
injectTo: "body"
|
|
487
|
-
}), { html: h, tags:
|
|
492
|
+
}), { html: h, tags: d };
|
|
488
493
|
}
|
|
489
494
|
};
|
|
490
495
|
}
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* pre-configured presets (Bare, Docked, Contextual), full plugin coverage,
|
|
7
7
|
* multi-format I/O, form integration, and theme/i18n support.
|
|
8
8
|
*/
|
|
9
|
-
export type { ContentFormatType,
|
|
9
|
+
export type { ContentFormatType, JsonContent, LexicalPluginDefinition, PluginConfig, HistoryPluginOptions, TablePluginOptions, AutoLinkPluginOptions, AutoLinkMatcher, CodePluginOptions, HashtagPluginOptions, OverflowPluginOptions, SlashCommandPluginOptions, SlashCommandDefinition, ToolbarGroupId, ToolbarConfig, MarkMetadata, MarkPluginCallbacks, CollaborationConfig, CollaborationUser, LexicalEditorBaseOptions, BareEditorOptions, DockedEditorOptions, ContextualEditorOptions, LexicalStringInputOptions, LexicalJsonInputOptions, LexicalInputOptions, HeadlessEditorOptions, CharacterCountInfo, SelectionInfo, EditorPresetType, EditorHeightMode, } from './types';
|
|
10
10
|
export { getNodesForPlugins, createDefaultPluginConfig } from './nodes';
|
|
11
11
|
export { HorizontalRuleNode, $createHorizontalRuleNode, $isHorizontalRuleNode, } from './horizontal-rule-node';
|
|
12
12
|
export type { SerializedHorizontalRuleNode } from './horizontal-rule-node';
|
|
@@ -6,18 +6,10 @@ import type { InputOptions } from '../components/form/input/input-options';
|
|
|
6
6
|
* Content format types supported by the editor
|
|
7
7
|
*/
|
|
8
8
|
export type ContentFormatType = 'markdown' | 'json' | 'html';
|
|
9
|
-
/**
|
|
10
|
-
* String-based content (markdown or html)
|
|
11
|
-
*/
|
|
12
|
-
export type StringContent = string;
|
|
13
9
|
/**
|
|
14
10
|
* JSON-based content (Lexical's serialized state)
|
|
15
11
|
*/
|
|
16
12
|
export type JsonContent = Record<string, unknown>;
|
|
17
|
-
/**
|
|
18
|
-
* Union of all supported content types
|
|
19
|
-
*/
|
|
20
|
-
export type EditorContent = StringContent | JsonContent;
|
|
21
13
|
/**
|
|
22
14
|
* Plugin definition for Lexical editor
|
|
23
15
|
*/
|
|
@@ -454,22 +446,11 @@ export interface CollaborationUser {
|
|
|
454
446
|
* - 'auto': Grows with content; no built-in scrollbar. Default for BareEditor and ContextualEditor.
|
|
455
447
|
*/
|
|
456
448
|
export type EditorHeightMode = 'fixed' | 'auto';
|
|
457
|
-
|
|
458
|
-
* Base options for all Lexical editor variants
|
|
459
|
-
*/
|
|
460
|
-
export interface LexicalEditorBaseOptions {
|
|
449
|
+
interface UntypedLexicalEditorOptions {
|
|
461
450
|
/**
|
|
462
451
|
* Editor namespace (for multiple editors on the same page)
|
|
463
452
|
*/
|
|
464
453
|
namespace?: string;
|
|
465
|
-
/**
|
|
466
|
-
* Initial content value
|
|
467
|
-
*/
|
|
468
|
-
value?: Value<EditorContent>;
|
|
469
|
-
/**
|
|
470
|
-
* Content format type
|
|
471
|
-
*/
|
|
472
|
-
format?: Value<ContentFormatType>;
|
|
473
454
|
/**
|
|
474
455
|
* Plugin configuration
|
|
475
456
|
*/
|
|
@@ -492,18 +473,6 @@ export interface LexicalEditorBaseOptions {
|
|
|
492
473
|
* @param editor - The editor instance
|
|
493
474
|
*/
|
|
494
475
|
onError?: (error: Error, editor: LexicalEditor) => void;
|
|
495
|
-
/**
|
|
496
|
-
* Input event handler (fires on every change)
|
|
497
|
-
* @param content - The current content
|
|
498
|
-
* @param editor - The editor instance
|
|
499
|
-
*/
|
|
500
|
-
onInput?: (content: EditorContent, editor: LexicalEditor) => void;
|
|
501
|
-
/**
|
|
502
|
-
* Change event handler (fires after debounced changes)
|
|
503
|
-
* @param content - The current content
|
|
504
|
-
* @param editor - The editor instance
|
|
505
|
-
*/
|
|
506
|
-
onChange?: (content: EditorContent, editor: LexicalEditor) => void;
|
|
507
476
|
/**
|
|
508
477
|
* Blur event handler
|
|
509
478
|
* @param editor - The editor instance
|
|
@@ -525,6 +494,19 @@ export interface LexicalEditorBaseOptions {
|
|
|
525
494
|
*/
|
|
526
495
|
heightMode?: EditorHeightMode;
|
|
527
496
|
}
|
|
497
|
+
interface StringLexicalEditorOptions extends UntypedLexicalEditorOptions {
|
|
498
|
+
value?: Value<string>;
|
|
499
|
+
format?: 'markdown' | 'json';
|
|
500
|
+
onChange?: (content: string, editor: LexicalEditor) => void;
|
|
501
|
+
onInput?: (content: string, editor: LexicalEditor) => void;
|
|
502
|
+
}
|
|
503
|
+
interface JsonLexicalEditorOptions extends UntypedLexicalEditorOptions {
|
|
504
|
+
value?: Value<JsonContent>;
|
|
505
|
+
format?: 'json';
|
|
506
|
+
onChange?: (content: JsonContent, editor: LexicalEditor) => void;
|
|
507
|
+
onInput?: (content: JsonContent, editor: LexicalEditor) => void;
|
|
508
|
+
}
|
|
509
|
+
export type LexicalEditorBaseOptions = StringLexicalEditorOptions | JsonLexicalEditorOptions;
|
|
528
510
|
/**
|
|
529
511
|
* Options for bare editor (minimal features)
|
|
530
512
|
*/
|
|
@@ -532,16 +514,16 @@ export type BareEditorOptions = LexicalEditorBaseOptions;
|
|
|
532
514
|
/**
|
|
533
515
|
* Options for docked editor (with fixed toolbar)
|
|
534
516
|
*/
|
|
535
|
-
export
|
|
517
|
+
export type DockedEditorOptions = LexicalEditorBaseOptions & {
|
|
536
518
|
/**
|
|
537
519
|
* Toolbar configuration
|
|
538
520
|
*/
|
|
539
521
|
toolbar?: ToolbarConfig;
|
|
540
|
-
}
|
|
522
|
+
};
|
|
541
523
|
/**
|
|
542
524
|
* Options for contextual editor (with floating toolbar and block handle)
|
|
543
525
|
*/
|
|
544
|
-
export
|
|
526
|
+
export type ContextualEditorOptions = LexicalEditorBaseOptions & {
|
|
545
527
|
/**
|
|
546
528
|
* @deprecated Slash commands are no longer used. Use the block handle instead.
|
|
547
529
|
*/
|
|
@@ -550,7 +532,7 @@ export interface ContextualEditorOptions extends LexicalEditorBaseOptions {
|
|
|
550
532
|
* Floating toolbar groups to show
|
|
551
533
|
*/
|
|
552
534
|
floatingToolbarGroups?: ToolbarGroupId[];
|
|
553
|
-
}
|
|
535
|
+
};
|
|
554
536
|
/**
|
|
555
537
|
* Options for Lexical string input (markdown or HTML)
|
|
556
538
|
*/
|
|
@@ -632,3 +614,4 @@ export interface SelectionInfo {
|
|
|
632
614
|
* Editor preset type for createDefaultPluginConfig
|
|
633
615
|
*/
|
|
634
616
|
export type EditorPresetType = 'bare' | 'docked' | 'contextual';
|
|
617
|
+
export {};
|