doc-render-sdk 0.0.14 → 0.0.15
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/index.d.mts +9 -7
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +74 -39
- package/dist/index.mjs.map +1 -1
- package/package.json +19 -11
package/dist/index.d.mts
CHANGED
|
@@ -640,14 +640,16 @@ declare const CodeBlock: ({
|
|
|
640
640
|
theme,
|
|
641
641
|
showLineNumbers,
|
|
642
642
|
highlightLines,
|
|
643
|
-
className
|
|
643
|
+
className,
|
|
644
|
+
onChange
|
|
644
645
|
}: {
|
|
645
|
-
code:
|
|
646
|
-
language?: string
|
|
647
|
-
theme
|
|
648
|
-
showLineNumbers?: boolean
|
|
649
|
-
highlightLines?:
|
|
650
|
-
className?: string
|
|
646
|
+
code: string;
|
|
647
|
+
language?: string;
|
|
648
|
+
theme?: any;
|
|
649
|
+
showLineNumbers?: boolean;
|
|
650
|
+
highlightLines?: number[];
|
|
651
|
+
className?: string;
|
|
652
|
+
onChange?: (code: string) => void;
|
|
651
653
|
}) => react_jsx_runtime0.JSX.Element;
|
|
652
654
|
//#endregion
|
|
653
655
|
//#region src/index.d.ts
|
package/dist/index.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/core/PluginManager.ts","../src/types/index.ts","../src/core/DocRenderer.ts","../src/core/ConfigManager.ts","../src/core/ThemeManager.ts","../src/components/Layout.tsx","../src/components/Navigation.tsx","../src/components/Demo.tsx","../src/components/ApiDoc.tsx","../src/components/CodeBlock.tsx","../src/index.ts"],"sourcesContent":[],"mappings":";;;;;;;;;cAKqB,aAAA;EAAA,aAAA,EAAA,GAAa;EAAA,OAAA,EAEvB,GAFuB,CAAA,GAAA,EAAA,GAAA,CAAA;EAAA,KAEvB,EACF,GADE,CAAA,GAAA,EAAA,GAAA,CAAA;EAAG,QACL,EAAA,GAAA;EAAG,WAkEmB,CAAA,aAAA,EAAA,GAAA;EAAA;AA+BF;;;;ECjGZ;;;;;EAM4B,QAA9B,CAAA,MAAA,EAAA,GAAA,CAAA,EAAA,OAAA;EAAM;;;;EAMU,UACnB,CAAA,YAAA,EAAA,GAAA,CAAA,EDqDmB,OCrDnB,CAAA,IAAA,CAAA;EAAM;AAKlB;;;;EAG8B,gBAClB,CAAA,IAAA,EAAA,GAAA,CAAA,ED2EiB,OC3EjB,CAAA,GAAA,CAAA;EAAY;;AAEH;AAGrB;EAmBiB,cAAA,CAAA,IAAe,EAAA,GAAA,CAAA,EAAA,IAAA;EAAA;;;;EAKX,gBAAA,CAAA,IAAA,EAAA,GAAA,CAAA,EAAA,IAAA;EAGJ;AAWjB;AAOA;;;EAEyB,mBACd,CAAA,MAAA,EAAA,GAAA,CAAA,EAAA;IAAY,MAAA,EAAA;MAGN,IAAA,EAAA,GAAa;MAMb,OAAY,EAAA,GAAA;MAAA,MAAA,EAAA,GAAA;IAId,CAAA;IACH,QAAA,EAAA,GAAA;IAAY,MAAA,EAAA,GAAA;IAIP,KAAA,EAAA,GAAA;IAAe,UAAA,EAAA,GAAA;IAGtB,MAAA,EAAA,GAAA;IACD,KAAA,EAAA;MAAS,GAAA,EAAA,CAAA,QAAA,EAAA,GAAA,EAAA,OAAA,EAAA,GAAA,EAAA,UAAA,EAAA,GAAA,EAAA,GAAA,IAAA;MAKD,MAAU,EAAA,CAAA,QAAA,EAAA,GAAA,EAAA,OAAA,EAAA,GAAA,EAAA,GAAA,IAAA;MAOV,IAAS,EAAA,CAAA,QAAA,EAAA,GAAA,EAAA,GAAA,IAAA,EAAA,GAAA,EAAA,EAAA,GAAA,GAAA,EAAA;IAOT,CAAA;IAWA,MAAA,EAAA;MAQA,EAAA,EAAA,GAAY;MASZ,GAAO,EAAA,GAAA;MAOP,IAAA,EAAU,GAAA;IAOV,CAAA;EAcA,CAAA;EAOA;AAMjB;;;;;EAGuB,OACd,CAAA,QAAA,EAAA,GAAA,EAAA,OAAA,EAAA,GAAA,EAAA,UAAA,EAAA,GAAA,CAAA,EAAA,IAAA;EAAY;AAIrB;;;;EAE0C,UAAA,CAAA,QAAA,EAAA,GAAA,EAAA,OAAA,EAAA,GAAA,CAAA,EAAA,IAAA;EAKzB;;;;EAEuB,iBAAA,CAAA,UAAA,EAAA,GAAA,CAAA,EAAA,IAAA;EAKvB;;;;;AAIW;EAIX,QAAA,CAAA,QAAY,EAAA,GAAA,EAAA,GAAA,IACT,EAAK,GAAA,EAAA,CAAA,EAAA,GAAA,EAAA;EAKR;;;;;EAGoD,cACf,CAAA,MAAA,EAAA,GAAA,CAAA,EAAA,OAAA;EAAO;AAI7D;AAOA;;;EAC8B,SACd,CAAA,IAAA,EAAA,GAAA,CAAA,EAAA,GAAA;EAAY;AACE;AAI9B;AAMA;EAMiB,UAAA,CAAA,CAAA,EAAU,GAAA,EAAA;EAI1B;;;;EAM2C,gBACrB,CAAA,CAAA,EAAA,GAAA,EAAA;EAAU;AAAA;;;;;;AD7QZ,UCGJ,SAAA,CDHiB;EAAA,KAAA,EAAA,MAAA;EAAA,WAEvB,CAAA,EAAA,MAAA;EAAG,OACL,CAAA,EAAA,MAAA;EAAG,KAkEmB,CAAA,EC9DrB,KD8DqB,GAAA,MAAA;EAAA,MA+BF,CAAA,EC5FlB,YD4FkB;EAAA,UAAA,CAAA,EC3Fd,MD2Fc,CAAA,MAAA,EC3FC,eD2FD,CAAA;;;aCxFhB;EATI,WAAA,CAAS,EAUV,UAVU,EAAA;EAAA,WAAA,CAAA,EAWV,WAXU;EAAA,aAIhB,CAAA,EAQQ,aARR;EAAK,OACJ,CAAA,EAQC,MARD,EAAA;EAAY,KACO,CAAA,EAAA,OAAA;;AAGjB,UASI,KAAA,CATJ;EAAO,IACJ,EAAA,MAAA;EAAU,MACV,CAAA,EASL,WATK;EAAW,UACT,CAAA,EASH,eATG;EAAa,OACnB,CAAA,EASA,YATA;EAAM,MAAA,CAAA,EAUP,WAVO;EAKD,UAAK,CAAA,EAMP,MANO,CAAA,MAAA,EAAA,MAAA,CAAA;;AAEX,UAOM,WAAA,CAPN;EAAW,OACP,CAAA,EAAA,MAAA;EAAe,OAClB,CAAA,EAAA,MAAA;EAAY,OACb,CAAA,EAAA,MAAA;EAAW,KACP,CAAA,EAAA,MAAA;EAAM,IAAA,CAAA,EAAA,MAAA;EAGJ,aAAA,CAAW,EAAA,MAAA;EAmBX,YAAA,CAAA,EAAA,MAAe;EAAA,UAAA,CAAA,EAAA,MAAA;EAAA,mBAGnB,CAAA,EAAA,MAAA;EAAM,kBACJ,CAAA,EAAA,MAAA;EAAM,MACN,CAAA,EAAA,MAAA;EAAM,eAAA,CAAA,EAAA,MAAA;EAGJ,IAAA,CAAA,EAAA;IAWA,UAAW,CAAA,EAAA,MAAA;IAOX,IAAA,CAAA,EAAA,MAAY;EAAA,CAAA;;AAGlB,UA7BM,eAAA,CA6BN;EAAY,UAAA,CAAA,EAAA,MAAA;EAGN,cAAA,CAAA,EAAa,MAAA;EAMb,QAAA,CAAA,EAnCJ,MAmCgB,CAAA,MAAA,EAAA,MAAA,CAAA;EAAA,UAAA,CAAA,EAlCd,MAkCc,CAAA,MAAA,EAAA,MAAA,GAAA,MAAA,CAAA;EAAA,UAId,CAAA,EArCA,MAqCA,CAAA,MAAA,EAAA,MAAA,GAAA,MAAA,CAAA;;AACS,UAnCP,YAAA,CAmCO;EAIP,EAAA,CAAA,EAAA,MAAA;EAAe,EAAA,CAAA,EAAA,MAAA;EAAA,EAAA,CAGtB,EAAA,MAAA;EAAU,EAAA,CACX,EAAA,MAAA;EAAS,EAAA,CAAA,EAAA,MAAA;EAKD,KAAA,CAAA,EAAA,MAAU;EAOV,KAAA,CAAA,EAAA,MAAS;EAOT,KAAA,CAAA,EAAA,MAAO;AAWxB;AAQiB,UAtEA,WAAA,CAsEY;EASZ,YAAO,CAAA,EAAA,MAAA;EAOP,SAAA,CAAA,EAAA,MAAU;EAOV,QAAA,CAAA,EAAA,MAAW;AAc5B;AAOiB,UA3GA,YAAA,CA8GI;EAGJ,IAAA,CAAA,EAAA,SAAa,GAAA,KAAA,GAAA,OAAA;EAAA,OAAA,CAAA,EA/GlB,aA+GkB;EAAA,MACrB,CAAA,EA/GE,YA+GF;;AAEC,UA9GO,aAAA,CA8GP;EAAa,KACd,CAAA,EAAA,MAAA;EAAY,WAAA,CAAA,EAAA,OAAA;EAIJ,SAAA,CAAA,EAAA,OAAW;;AACG,UA9Gd,YAAA,CA8Gc;EAAQ,MACL,CAAA,EAAA,MAAA;EAAQ,IAAA,CAAA,EAAA,MAAA;EAKzB,KAAA,CAAA,EAAA,MAAA;EAAY,UAAA,CAAA,EAhHd,cAgHc,EAAA;EAAA,OACE,CAAA,EAhHnB,YAgHmB,EAAA;;AACS,UA7GvB,eAAA,CA6GuB;EAKvB,KAAA,EAAA,MAAA;EAAa,WAAA,CAAA,EAAA,MAAA;EAAA,KAGH,CAAA,EAlHjB,UAkHiB,EAAA;EAAS,IAAjB,CAAA,EAjHV,SAiHU,EAAA;EAAO,KACP,CAAA,EAAA,MAAA;EAAS,KAAA,CAAA,EAAA,MAAA;AAI5B;AAMiB,UAvHA,UAAA,CAuHiB;EAAA,KAAA,EAAA,MAAA;EAAA,IACI,CAAA,EAAA,MAAA;EAAa,MAC1B,EAAA,MAAA;EAAa,IACkB,CAAA,EAAA,MAAA;;AACK,UApH5C,SAAA,CAoH4C;EAI5C,KAAA,EAAA,MAAA;EAOA,MAAA,EAAA,MAAA;EAAe,WAAA,CAAA,EAAA,MAAA;;AAEhB,UA1HC,OAAA,CA0HD;EAAY,KACX,EAAA,MAAA;EAAa,IAAA,EAAA,MAAA;EAIb,IAAA,EAAA,MAAA;EAMA,MAAA,CAAA,EAAA,MAAA;EAMA,OAAA,CAAA,EAAA,MAAU;EAI1B,QAAA,CAAA,EAAA,OAAA;EAAA,UAAA,CAAA,EAAA,OAAA;;AAM4B,UA1IZ,cAAA,CA0IY;EAAe,KACrB,EAAA,MAAA;EAAU,IAAA,CAAA,EAAA,MAAA;EAAA,QAAA,CAAA,EAxIpB,cAwIoB,EAAA;;;UAnIhB,YAAA;ECnII,IAAA,EAAA,MAAA,GAAW,QAAA;EAAA,KAAA,EAAA,MAAA;EAAA,GAUhB,CAAA,EAAA,MAAA;EAAa,OAAE,CAAA,EAAA,GAAA,GAAA,IAAA;EAAY,IAAE,CAAA,ED8HpC,SC9HoC;;AAqBxB,UD6GJ,OAAA,CC7GI;EAAA,IA8DK,EAAA,MAAA;EAAA,KAAA,EAAA,MAAA;;;UDsDT,UAAA;EEtJI,IAAA,EAAA,MAAA;EAAa,GAAA,EAAA,MAAA;EAAA,QAIA,CAAA,EAAA,OAAA;;AAenB,UF0IE,WAAA,CE1IF;EAAS,OAyBI,CAAA,EAAA;IAAR,KAAA,CAAA,EAAA,MAAA;IAUO,WAAA,CAAA,EAAA,MAAA;IAAR,OAAA,CAAA,EAAA,MAAA;EAAO,CAAA;EAUa,QA2BtB,CAAA,EFwEJ,OExEI,EAAA;EAAc,UAAA,CAAA,EAAA;;;;AC9FO;UH8KrB,aAAA;;UAEP;EI5KJ,SAwKL,CAAA,EAAA,MAAA;;AAxKe,UJiLC,MAAA,CIjLD;EAAA,IAAA,EAAA,MAAA;EAAA,OAAA,CAAA,EAAA,MAAA;EAAA,OAAA,EAAA,CAAA,OAAA,EJoLK,aIpLL,EAAA,GAAA,IAAA;;AAAA,UJuLC,aAAA,CIvLD;EAAA,KAOf,EJiLQ,WIjLR;EAiKA,MAAA,EJiBS,YIjBT;UJkBS;SACD;;AK/LH,ULmMW,WAAA,CKlDhB;EAAA,GAAA,EAAA,CAAA,IAAA,EAAA,MAAA,EAAA,OAAA,ELmD8B,QKnD9B,EAAA,GAAA,IAAA;EAAA,MAjJmB,EAAA,CAAA,IAAA,EAAA,MAAA,EAAA,OAAA,ELqMc,QKrMd,EAAA,GAAA,IAAA;EAAA,IAAA,EAAA,CAAA,IAAA,EAAA,MAAA,EAAA,GAAA,IAAA,EAAA,GAAA,EAAA,EAAA,GAAA,GAAA,EAAA;;AAAA,UL0MH,YAAA,CK1MG;EAAA,EAAA,EAAA,CAAA,KAAA,EAAA,MAAA,EAAA,OAAA,EL2MW,QK3MX,EAAA,GAAA,IAAA;EAAA,GAAA,EAAA,CAAA,KAAA,EAAA,MAAA,EAAA,OAAA,EL4MY,QK5MZ,EAAA,GAAA,IAAA;EAAA,IAOnB,EAAA,CAAA,KAAA,EAAA,MAAA,EAAA,IAAA,CAAA,EAAA,GAAA,EAAA,GAAA,IAAA;AA0IA;ULgEgB,eAAA;;;EMhNX,MAAA,EAwJL,CAAA,MAAA,EN2DkB,OM3DlB,CN2D0B,SM3D1B,CAAA,EAAA,GAAA,IAAA;EAAA,SAAA,EAAA,GAAA,GN4DkB,SM5DlB;;AAxJa,UNwNG,cAAA,CMxNH;EAAA,QAAA,EAAA,CAAA,KAAA,ENyNM,KMzNN,GAAA,MAAA,EAAA,GAAA,IAAA;EAAA,UAAA,EAAA,GAAA,GAAA,IAAA;;AAMb,UNwNgB,iBAAA,CMxNhB;EAkJA,QAAA,EAAA,CAAA,IAAA,EAAA,MAAA,EAAA,SAAA,ENuEqC,aMvErC,EAAA,GAAA,IAAA;yBNwEwB;wDAC+B;sDACF;AO9NrD;AAuKA,UP2DgB,aAAA,CO3DhB;EAAA,QA5Ke,EAAA,CAAA,IAAA,EAAA,MAAA,EAAA,GAAA,IAAA;EAAA,eAAA,EAAA,GAAA,GAAA,MAAA;EAAA,aAAA,EAAA,CAAA,OAAA,EAAA,CAAA,KAAA,EAAA,MAAA,EAAA,GAAA,IAAA,EAAA,GAAA,IAAA;;AAKf,UPyOgB,eAAA,COzOhB;EAuKA,aAAA,EPmEgB,eOnEhB;gBPoEe;iBACC;;AQjPX,URqPW,WAAA,CQtKhB;EAAA,CAAA,aAAA,EAAA,MAAA,CAAA,EAAA;IA/EkB,CAAA,QAAA,EAAA,MAAA,CAAA,ERuPK,aQvPL;EAAA,CAAA;;AAAA,UR2PF,eAAA,CQ3PE;EAAA,CAAA,aAAA,EAAA,MAAA,CAAA,EAAA;IAAA,CAAA,QAAA,EAAA,MAAA,CAAA,EAAA,MAAA;EAAA,CAAA;AA+ElB;URkLgB,UAAA;;uBAEM;ES7OF,CAAA;;QAMS,MAAA,CAAA;EAAS,UAAjB,MAAA,CAAA;IAcU,iBAAA,CAAA,ETgOR,WShOQ;IAAc,sBAAA,CAAA,ETiOjB,eSjOiB;IAcf,gBAAA,CAAA,EToNR,USpNQ;EAAS;;;;;AVzDnB,cEOA,WAAA,CFPa;EAAA,QAAA,aAAA;EAAA,QAEvB,YAAA;EAAG,QACL,aAAA;EAAG,QAkEmB,aAAA;EAAA,QA+BF,iBAAA;EAAA,QAAA,aAAA;;;;;;;KEnFiC;EDd7C;;;;EAKM,MACO,CAAA,MAAA,EAAA,GAAA,CAAA,EC6BT,OD7BS,CAAA,IAAA,CAAA;EAAe;;;EAInB,YACV,CAAA,CAAA,EAAA,IAAA;EAAW;;AAET;EAKD,kBAAK,CAAA,CAAA,EC+EI,OD/EJ,CAAA,IAAA,CAAA;EAAA;;;;EAIE,iBACb,CAAA,KAAA,EAAA,GAAA,CAAA,EAAA,IAAA;EAAW;AACD;AAGrB;EAmBiB,MAAA,CAAA,CAAA,EAAA,IAAA;EAAe;;;EAIX,OACN,CAAA,CAAA,EAAA,IAAA;EAAM;AAGrB;AAWA;EAOiB,oBAAY,CAAA,CAAA,EAAA,GAAA;EAAA;;;EAGN,gBAAA,CAAA,CAAA,EAAA,GAAA;EAGN;AAMjB;;EAA6B,eAId,CAAA,CAAA,EAAA,GAAA;EAAc;AACL;AAIxB;;;EAGoB,QACX,CAAA,IAAA,EAAA,GAAA,EAAA,MAAA,CAAA,EAAA,CAAA,CAAA,CAAA,EAAA,GAAA;AAAS;;;ADpGG,cGIA,aAAA,CHJa;EAAA,QAAA,MAAA;EAAA,QAEvB,SAAA;EAAG,WACL,CAAA,UAAA,CAAA,EGKiB,OHLjB,CGKyB,SHLzB,CAAA;EAAG;;AAiGiB;;;;ACjG7B;EAA0B,SAAA,CAAA,CAAA,EEoBX,SFpBW;EAAA;;;EAMmB,GAA9B,CAAA,IAAA,CAAA,EAAA,MAAA,EAAA,YAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA;EAAM;;;EAKM,GACT,CAAA,IAAA,EAAA,MAAA,EAAA,KAAA,EAAA,GAAA,CAAA,EAAA,IAAA;EAAa;AACb;AAKlB;EAAsB,MAAA,CAAA,SAAA,EE2BF,OF3BE,CE2BM,SF3BN,CAAA,CAAA,EAAA,IAAA;EAAA;;;EAIE,KACb,CAAA,SAAA,CAAA,EEgCQ,OFhCR,CEgCgB,SFhChB,CAAA,CAAA,EAAA,IAAA;EAAW;AACD;AAGrB;EAmBiB,QAAA,CAAA,QAAA,EAAe,CAAA,MAAA,EEmBF,SFnBE,EAAA,GAAA,IAAA,CAAA,EAAA,GAAA,GAAA,IAAA;EAAA;;;EAIX,QACN,YAAA;EAAM;AAGrB;AAWA;AAOA;;EAA6B,QAEjB,CAAA,MAAA,CAAA,EEkBK,SFlBL,CAAA,EAAA;IACD,OAAA,EAAA,OAAA;IAAY,MAAA,EAAA,KAAA,EAAA;IAGN,QAAA,EAAA,MAAa,EAAA;EAMb,CAAA;EAAY;;;AAKL;AAIxB;EAAgC,YAAA,CAAA,WAAA,EAAA,GAAA,CAAA,EAAA,GAAA;EAAA;;AAId;AAKlB;EAOiB,aAAS,CAAA,CAAA,EAAA,GAAA;EAOT;AAWjB;AAQA;AASA;EAOiB,QAAA,CAAA,CAAA,EAAA,GAAU;EAOV;AAcjB;AAOA;AAMA;EAA8B,SAAA,CAAA,CAAA,EAAA,GAAA;EAAA;;;;EAIT,UAAA,CAAA,CAAA,EAAA,GAAA;AAIrB;;;ADpMqB,cIGA,YAAA,CJHa;EAAA,QAAA,aAAA;EAAA,QAEvB,MAAA;EAAG,QACL,YAAA;EAAG,QAkEmB,YAAA;EAAA,WA+BF,CAAA,aAAA,EAAA,GAAA;EAAA;;;;ECjGZ;;;;;EAM4B,aAA9B,CAAA,IAAA,EAAA,GAAA,EAAA,KAAA,EAAA,GAAA,CAAA,EAAA,IAAA;EAAM;;;;;EAOH,QAAA,CAAA,KAAA,EAAA,GAAA,EAAA,YAAA,CAAA,EAAA,CAAA,CAAA,CAAA,EAAA,IAAA;EAKD;;;;;;EAKK,UACP,CAAA,SAAA,EAAA,GAAA,EAAA,YAAA,EAAA,GAAA,CAAA,EAAA,GAAA;EAAM;AAGrB;AAmBA;EAAgC,UAAA,CAAA,CAAA,EAAA,IAAA;EAAA;;;AAKX;EAGJ,oBAAY,CAAA,CAAA,EAAA,MAAA;EAWZ;AAOjB;;;EAEyB,mBACd,CAAA,CAAA,EAAA,MAAA;EAAY;AAGvB;AAMA;;;;EAKwB,WAAA,CAAA,GAAA,EAAA,GAAA,EAAA,QAAA,EAAA,GAAA,CAAA,EAAA,MAAA;EAIP;;;;EAIC,eAAA,CAAA,CAAA,EGyJD,KHzJC,GAAA,IAAA;EAKD;AAOjB;AAOA;AAWA;AAQA;AASA;EAOiB,aAAU,CAAA,IAAA,EAAA,GAAA,EAAA,YAAA,EAAA,GAAA,CAAA,EAAA,GAAA;EAOV;AAcjB;AAOA;AAMA;EAA8B,kBAAA,CAAA,CAAA,EAAA,MAAA,EAAA;EAAA;;;EAGP,OACd,CAAA,CAAA,EAAA,IAAA;AAAY;;;;;;cI3Lf;;;;;;;;;ELLe,KAAA,EAAA,GAAA;EAAa,QAAA,EAAA,GAAA;EAAA,aAEvB,EAAA,GAAA;EAAG,iBACL,EAAA,GAAA;EAAG,aAkEmB,EAAA,GAAA;CAAA,EAAA,GKzD9B,kBAAA,CAAA,GAAA,CAAA,OLwF4B;;;;;;cMnGvB;;;;;;;;;ENDe,KAAA,EAAA,GAAA;EAAa,YAAA,EAAA,GAAA;EAAA,iBAEvB,EAAA,GAAA;EAAG,UACL,EAAA,GAAA;EAAG,OAkEmB,CAAA,EAAA,OAAA,GAAA,SAAA;CAAA,EAAA,GM7D9B,kBAAA,CAAA,GAAA,CAAA,ON4F4B;;;;;;cOlGvB;;;;;;;;EPFe,WAAA,EAAA,GAAa;EAAA,MAAA,EAAA,GAAA;EAAA,KAEvB,EAAA,GAAA;EAAG,QACL,EAAA,GAAA;CAAG,EAAA,GOKX,kBAAA,CAAA,GAAA,CAAA,OP6D8B;;;;;;cQpEzB;;;;;;;ERDe,WAAA,EAAA,GAAa;EAAA,MAAA,EAAA,GAAA;EAAA,KAEvB,EAAA,GAAA;CAAG,EAAA,GQIb,kBAAA,CAAA,GAAA,CAAA,ORHQ;;;;;;cSFH;;;;;;;;;ETDe,QAAA,CAAA,EAAA,MAAa,GAAA,SAAA;EAAA,KAAA,EAAA,GAAA;EAAA,eAEvB,CAAA,EAAA,OAAA,GAAA,SAAA;EAAG,cACL,CAAA,EAAA,KAAA,EAAA,GAAA,SAAA;EAAG,SAkEmB,CAAA,EAAA,MAAA,GAAA,SAAA;CAAA,EAAA,GS7D9B,kBAAA,CAAA,GAAA,CAAA,OT4F4B;;;AC7FnB,cSgBW,MAAA,CThBX;EAAK,QACJ,aAAA;EAAY,QACO,YAAA;EAAe,QAA9B,aAAA;EAAM,QAGR,QAAA;EAAO,WACJ,CAAA,MAAA,CAAA,ESgBM,OThBN,CSgBc,SThBd,CAAA;EAAU;;;EAGR,MAAA,CAAA,MAAA,EAAA,MAAA,GS2Bc,WT3Bd,CAAA,ES2B4B,OT3B5B,CAAA,IAAA,CAAA;EAKD;;;EAEK,OACP,CAAA,CAAA,EAAA,IAAA;EAAe;;;EAGT,YAAA,CAAA,MAAA,ES8BE,OT9BF,CS8BU,ST9BV,CAAA,CAAA,EAAA,IAAA;EAGJ;AAmBjB;;EAAgC,GAGnB,CAAA,MAAA,ESaC,MTbD,CAAA,EAAA,IAAA;EAAM;;AAEE;EAGJ,QAAA,CAAA,KAAA,ESgBC,KThBW,GAAA,MAAA,CAAA,EAAA,IAAA;EAWZ;AAOjB;;EAA6B,SAEjB,CAAA,CAAA,ESIG,STJH;EAAa;AACF;AAGvB;EAMiB,EAAA,CAAA,KAAA,EAAA,MAAY,EAAA,OAAA,ESCA,QTDA,CAAA,EAAA,IAAA;EAAA;;;EAKL,GAAA,CAAA,KAAA,EAAA,MAAA,EAAA,OAAA,ESGM,QTHN,CAAA,EAAA,IAAA;EAIP;;;EAGG,IACX,CAAA,KAAA,EAAA,MAAA,EAAA,IAAA,CAAA,EAAA,GAAA,CAAA,EAAA,IAAA;AAAS"}
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/core/PluginManager.ts","../src/types/index.ts","../src/core/DocRenderer.ts","../src/core/ConfigManager.ts","../src/core/ThemeManager.ts","../src/components/Layout.tsx","../src/components/Navigation.tsx","../src/components/Demo.tsx","../src/components/ApiDoc.tsx","../src/components/CodeBlock.tsx","../src/index.ts"],"sourcesContent":[],"mappings":"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"}
|
package/dist/index.mjs
CHANGED
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
import { createDemoCodePlugin, presets } from "./_chunks/plugin-DCF0RLbi.mjs";
|
|
2
|
-
import React, { useEffect, useMemo, useRef, useState } from "react";
|
|
2
|
+
import React, { useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
3
3
|
import { createRoot } from "react-dom/client";
|
|
4
4
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
5
|
+
import { EditorState } from "@codemirror/state";
|
|
6
|
+
import { EditorView, highlightActiveLine, highlightActiveLineGutter, keymap, lineNumbers } from "@codemirror/view";
|
|
7
|
+
import { javascript } from "@codemirror/lang-javascript";
|
|
8
|
+
import { oneDark } from "@codemirror/theme-one-dark";
|
|
9
|
+
import { defaultKeymap, indentWithTab } from "@codemirror/commands";
|
|
5
10
|
import { cloneDeep, get, merge, set } from "lodash-es";
|
|
6
11
|
|
|
7
12
|
//#region src/components/Navigation.tsx
|
|
@@ -207,53 +212,83 @@ var Header_default = Header;
|
|
|
207
212
|
|
|
208
213
|
//#endregion
|
|
209
214
|
//#region src/components/CodeBlock.tsx
|
|
210
|
-
const CodeBlock = ({ code, language = "javascript", theme, showLineNumbers = false, highlightLines = [], className = "" }) => {
|
|
211
|
-
const
|
|
215
|
+
const CodeBlock = ({ code, language = "javascript", theme, showLineNumbers = false, highlightLines = [], className = "", onChange }) => {
|
|
216
|
+
const editable = false;
|
|
217
|
+
const containerRef = useRef(null);
|
|
218
|
+
const editorRef = useRef(null);
|
|
219
|
+
const [internalCode, setInternalCode] = useState(code);
|
|
220
|
+
const handleCodeChange = useCallback((newCode) => {
|
|
221
|
+
setInternalCode(newCode);
|
|
222
|
+
if (onChange) onChange(newCode);
|
|
223
|
+
}, [onChange]);
|
|
212
224
|
useEffect(() => {
|
|
213
|
-
if (
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
225
|
+
if (!containerRef.current) return;
|
|
226
|
+
const startState = EditorState.create({
|
|
227
|
+
doc: internalCode,
|
|
228
|
+
extensions: [
|
|
229
|
+
lineNumbers(),
|
|
230
|
+
highlightActiveLineGutter(),
|
|
231
|
+
highlightActiveLine(),
|
|
232
|
+
javascript(),
|
|
233
|
+
oneDark,
|
|
234
|
+
keymap.of([...defaultKeymap, indentWithTab]),
|
|
235
|
+
EditorView.updateListener.of((update) => {
|
|
236
|
+
if (update.docChanged) handleCodeChange(update.state.doc.toString());
|
|
237
|
+
}),
|
|
238
|
+
EditorView.lineWrapping,
|
|
239
|
+
EditorView.editable.of(editable),
|
|
240
|
+
EditorView.theme({
|
|
241
|
+
"&": {
|
|
242
|
+
height: "100%",
|
|
243
|
+
fontSize: "14px",
|
|
244
|
+
lineHeight: "1.5"
|
|
245
|
+
},
|
|
246
|
+
".cm-content": { fontFamily: "\"Fira Code\", \"Consolas\", monospace" },
|
|
247
|
+
".cm-gutters": { borderRight: "1px solid #333" }
|
|
248
|
+
})
|
|
249
|
+
]
|
|
224
250
|
});
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
const lines = code.split("\n");
|
|
229
|
-
return /* @__PURE__ */ jsx("div", {
|
|
230
|
-
className: "doc-code-content",
|
|
231
|
-
children: lines.map((line, index) => /* @__PURE__ */ jsx("div", {
|
|
232
|
-
className: `doc-code-line ${highlightLines.includes(index + 1) ? "highlighted" : ""}`,
|
|
233
|
-
children: line || " "
|
|
234
|
-
}, index))
|
|
235
|
-
});
|
|
236
|
-
}
|
|
237
|
-
return /* @__PURE__ */ jsx("pre", {
|
|
238
|
-
className: "doc-code-content",
|
|
239
|
-
children: /* @__PURE__ */ jsx("code", {
|
|
240
|
-
ref: codeRef,
|
|
241
|
-
className: `language-${language}`,
|
|
242
|
-
children: code
|
|
243
|
-
})
|
|
251
|
+
const view = new EditorView({
|
|
252
|
+
state: startState,
|
|
253
|
+
parent: containerRef.current
|
|
244
254
|
});
|
|
245
|
-
|
|
255
|
+
editorRef.current = view;
|
|
256
|
+
return () => {
|
|
257
|
+
view.destroy();
|
|
258
|
+
};
|
|
259
|
+
}, [
|
|
260
|
+
internalCode,
|
|
261
|
+
editable,
|
|
262
|
+
handleCodeChange
|
|
263
|
+
]);
|
|
264
|
+
useEffect(() => {
|
|
265
|
+
if (code !== internalCode && editorRef.current) {
|
|
266
|
+
editorRef.current.dispatch({ changes: {
|
|
267
|
+
from: 0,
|
|
268
|
+
to: editorRef.current.state.doc.length,
|
|
269
|
+
insert: code
|
|
270
|
+
} });
|
|
271
|
+
setInternalCode(code);
|
|
272
|
+
}
|
|
273
|
+
}, [code]);
|
|
246
274
|
return /* @__PURE__ */ jsxs("div", {
|
|
247
275
|
className: `doc-code-block ${className}`,
|
|
248
|
-
children: [/* @__PURE__ */
|
|
276
|
+
children: [/* @__PURE__ */ jsxs("div", {
|
|
249
277
|
className: "doc-code-header",
|
|
250
|
-
children: /* @__PURE__ */ jsx("span", {
|
|
278
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
251
279
|
className: "doc-code-language",
|
|
252
280
|
children: language
|
|
253
|
-
})
|
|
254
|
-
}), /* @__PURE__ */
|
|
281
|
+
}), editable]
|
|
282
|
+
}), /* @__PURE__ */ jsx("div", {
|
|
255
283
|
className: "doc-code-body",
|
|
256
|
-
|
|
284
|
+
style: {
|
|
285
|
+
position: "relative",
|
|
286
|
+
height: "100%"
|
|
287
|
+
},
|
|
288
|
+
children: /* @__PURE__ */ jsx("div", {
|
|
289
|
+
ref: containerRef,
|
|
290
|
+
style: { height: "100%" }
|
|
291
|
+
})
|
|
257
292
|
})]
|
|
258
293
|
});
|
|
259
294
|
};
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":["CodeBlock","Home","Demo","ApiDoc","Header","Navigation","Content","Footer","Layout","defaultConfig: DocConfig","userConfig: Partial<DocConfig>","defaultConfig","defaultConfig: DocConfig","path?: string","defaultValue?: any","path: string","value: any","newConfig: Partial<DocConfig>","listener: (config: DocConfig) => void","newValue: any","oldValue: any","warnings: string[]","configManager: any","defaultTheme","variables: string[]","styles: string[]","rules: string[]","results: any[]","config: Partial<DocConfig>","target: string | HTMLElement","plugin: Plugin","theme: Theme | string","event: string","handler: Function","data?: any"],"sources":["../src/components/Navigation.tsx","../src/components/Header.tsx","../src/components/CodeBlock.tsx","../src/components/Demo.tsx","../src/components/ApiDoc.tsx","../src/components/Home.tsx","../src/components/Content.tsx","../src/components/Footer.tsx","../src/components/Layout.tsx","../src/core/RouterManager.ts","../src/core/ComponentRegistry.ts","../src/core/DocRenderer.ts","../src/config/default.ts","../src/core/ConfigManager.ts","../src/themes/default.ts","../src/core/ThemeManager.ts","../src/core/PluginManager.ts","../src/index.ts"],"sourcesContent":["/**\n * 导航组件\n */\n\nimport React, { useMemo } from 'react';\n\nconst Navigation = ({ \n config, \n theme, \n currentRoute, \n componentRegistry, \n onNavigate,\n compact = false \n}) => {\n // 生成导航菜单\n const navigationItems = useMemo(() => {\n const navigationConfig = config.navigation || {};\n const { mode = 'auto', groups = [], showHome = true } = navigationConfig;\n\n const items = [];\n\n // 添加首页\n if (showHome) {\n items.push({\n id: 'home',\n label: navigationConfig.homeTitle || '首页',\n path: '/',\n type: 'home'\n });\n }\n\n if (mode === 'manual' && groups.length > 0) {\n // 手动配置模式\n groups.forEach(group => {\n items.push({\n id: group.id,\n label: group.label,\n type: 'group',\n children: group.items || []\n });\n });\n } else {\n // 自动生成模式\n const components = componentRegistry.getComponentIds();\n \n if (components.length > 0) {\n // 按组件分组\n const componentGroup = {\n id: 'components',\n label: '组件',\n type: 'group',\n children: components.map(componentId => {\n const componentConfig = componentRegistry.getComponent(componentId);\n return {\n id: componentId,\n label: componentConfig?.label || componentId,\n path: `/${componentId}`,\n type: 'component'\n };\n })\n };\n \n items.push(componentGroup);\n }\n }\n\n return items;\n }, [config, componentRegistry]);\n\n const handleItemClick = (item) => {\n if (item.path && onNavigate) {\n onNavigate(item.path);\n }\n };\n\n const isItemActive = (item) => {\n if (!currentRoute) return false;\n \n if (item.type === 'home') {\n return currentRoute.path === '/';\n }\n \n if (item.type === 'component') {\n return currentRoute.path === item.path;\n }\n \n return false;\n };\n\n const renderNavigationItem = (item, level = 0) => {\n const isActive = isItemActive(item);\n const hasChildren = item.children && item.children.length > 0;\n \n if (item.type === 'group') {\n return (\n <div key={item.id} className=\"doc-navigation-group\">\n {!compact && (\n <div className=\"doc-navigation-group-title\">\n {item.label}\n </div>\n )}\n {hasChildren && (\n <div className=\"doc-navigation-group-items\">\n {item.children.map(child => renderNavigationItem(child, level + 1))}\n </div>\n )}\n </div>\n );\n }\n\n return (\n <a\n key={item.id}\n className={`doc-navigation-item ${isActive ? 'active' : ''} ${compact ? 'compact' : ''}`}\n onClick={(e) => {\n e.preventDefault();\n handleItemClick(item);\n }}\n href={item.path || '#'}\n style={{ paddingLeft: `${16 + level * 16}px` }}\n >\n {item.icon && (\n <span className=\"doc-navigation-item-icon\">\n {item.icon}\n </span>\n )}\n <span className=\"doc-navigation-item-label\">\n {item.label}\n </span>\n {item.badge && (\n <span className=\"doc-navigation-item-badge\">\n {item.badge}\n </span>\n )}\n </a>\n );\n };\n\n return (\n <nav className={`doc-navigation ${compact ? 'compact' : ''}`}>\n {!compact && config.title && (\n <div className=\"doc-navigation-title\">\n {config.title}\n </div>\n )}\n \n <div className=\"doc-navigation-items\">\n {navigationItems.map(item => renderNavigationItem(item))}\n </div>\n </nav>\n );\n};\n\nexport default Navigation;\n","/**\n * 头部组件\n */\n\nimport React, { useState } from 'react';\n\nconst Header = ({ \n config, \n theme, \n currentRoute,\n sidebarCollapsed,\n onSidebarToggle,\n showNavigation = false,\n componentRegistry,\n onNavigate\n}) => {\n \n const headerConfig = config.layout?.header || {};\n\n const renderLogo = () => {\n if (!headerConfig.showLogo) return null;\n\n return (\n <div className=\"doc-header-logo\">\n {config.logo ? (\n <img src={config.logo} alt={config.title} />\n ) : (\n <div className=\"doc-header-logo-placeholder\">\n 📚\n </div>\n )}\n </div>\n );\n };\n\n const renderTitle = () => {\n if (!headerConfig.showTitle || !config.title) return null;\n\n return (\n <div className=\"doc-header-title\">\n {config.title}\n {config.version && (\n <span className=\"doc-header-version\">\n v{config.version}\n </span>\n )}\n </div>\n );\n };\n\n const renderNavigation = () => {\n if (!showNavigation || !componentRegistry) return null;\n\n const components = componentRegistry.getComponentIds();\n \n return (\n <nav className=\"doc-header-navigation\">\n <a \n className={`doc-header-nav-item ${currentRoute?.path === '/' ? 'active' : ''}`}\n onClick={(e) => {\n e.preventDefault();\n onNavigate?.('/');\n }}\n href=\"/\"\n >\n 首页\n </a>\n \n {components.map(componentId => {\n const componentConfig = componentRegistry.getComponent(componentId);\n const path = `/${componentId}`;\n const isActive = currentRoute?.path === path;\n \n return (\n <a\n key={componentId}\n className={`doc-header-nav-item ${isActive ? 'active' : ''}`}\n onClick={(e) => {\n e.preventDefault();\n onNavigate?.(path);\n }}\n href={path}\n >\n {componentConfig?.label || componentId}\n </a>\n );\n })}\n </nav>\n );\n };\n\n const renderActions = () => {\n return (\n <div className=\"doc-header-actions\">\n {/* 侧边栏切换按钮 */}\n {onSidebarToggle && (\n <button\n className=\"doc-header-action doc-header-sidebar-toggle\"\n onClick={onSidebarToggle}\n title={sidebarCollapsed ? '展开侧边栏' : '收起侧边栏'}\n >\n {sidebarCollapsed ? '☰' : '✕'}\n </button>\n )}\n\n {/* GitHub链接 */}\n {config.github && (\n <a\n className=\"doc-header-action doc-header-github\"\n href={config.github}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n title=\"GitHub\"\n >\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z\"/>\n </svg>\n </a>\n )}\n </div>\n );\n };\n\n return (\n <>\n <header className=\"doc-header\">\n <div className=\"doc-header-content\">\n <div className=\"doc-header-left\">\n {renderLogo()}\n {renderTitle()}\n </div>\n\n {renderNavigation()}\n\n <div className=\"doc-header-right\">\n {renderActions()}\n </div>\n </div>\n </header>\n </>\n );\n};\n\nexport default Header;\n","/**\n * 代码块组件\n */\n\nimport React, { useEffect, useRef } from 'react';\n\nconst CodeBlock = ({ \n code, \n language = 'javascript', \n theme, \n showLineNumbers = false,\n highlightLines = [],\n className = ''\n}) => {\n const codeRef = useRef(null);\n useEffect(() => {\n // 如果有highlight.js,使用它进行语法高亮\n if (window.hljs && codeRef.current) {\n window.hljs.highlightElement(codeRef.current);\n }\n }, [code, language]);\n\n const renderLineNumbers = () => {\n if (!showLineNumbers) return null;\n\n const lines = code.split('\\n');\n return (\n <div className=\"doc-code-line-numbers\">\n {lines.map((_, index) => (\n <div \n key={index} \n className={`doc-code-line-number ${\n highlightLines.includes(index + 1) ? 'highlighted' : ''\n }`}\n >\n {index + 1}\n </div>\n ))}\n </div>\n );\n };\n\n const renderCode = () => {\n if (showLineNumbers) {\n const lines = code.split('\\n');\n return (\n <div className=\"doc-code-content\">\n {lines.map((line, index) => (\n <div \n key={index}\n className={`doc-code-line ${\n highlightLines.includes(index + 1) ? 'highlighted' : ''\n }`}\n >\n {line || ' '}\n </div>\n ))}\n </div>\n );\n }\n\n return (\n <pre className=\"doc-code-content\">\n <code \n ref={codeRef}\n className={`language-${language}`}\n >\n {code}\n </code>\n </pre>\n );\n };\n\n return (\n <div className={`doc-code-block ${className}`}>\n <div className=\"doc-code-header\">\n <span className=\"doc-code-language\">{language}</span>\n </div>\n \n <div className=\"doc-code-body\">\n {renderLineNumbers()}\n {renderCode()}\n </div>\n </div>\n );\n};\n\nexport default CodeBlock;\n","/**\n * Demo展示组件\n */\n\nimport React, { useState, useRef, useEffect } from 'react';\nimport CodeBlock from './CodeBlock';\n\nconst Demo = ({ \n demo, \n componentId, \n config, \n theme, \n renderer \n}) => {\n const [codeVisible, setCodeVisible] = useState(false);\n const [copied, setCopied] = useState(false);\n const demoRef = useRef(null);\n \n const demoConfig = config.demo || {};\n const { \n showCode = true, \n codeCollapsed = true, \n showCopyButton = true, \n showExpandButton = true \n } = demoConfig;\n\n useEffect(() => {\n // 初始化代码显示状态\n setCodeVisible(!codeCollapsed);\n }, [codeCollapsed]);\n\n const handleCodeToggle = () => {\n setCodeVisible(!codeVisible);\n };\n\n const handleCopyCode = async () => {\n if (!demo.code) return;\n\n try {\n await navigator.clipboard.writeText(demo.code);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n } catch (error) {\n console.error('Failed to copy code:', error);\n }\n };\n\n const renderDemo = () => {\n if (!demo.component) {\n return (\n <div className=\"doc-demo-error\">\n <p>Demo组件加载失败</p>\n </div>\n );\n }\n\n try {\n const DemoComponent = demo.component;\n return <DemoComponent />;\n } catch (error) {\n console.error('Demo render error:', error);\n return (\n <div className=\"doc-demo-error\">\n <p>Demo渲染出错: {error.message}</p>\n </div>\n );\n }\n };\n\n const renderDescription = () => {\n if (!demo.desc) return null;\n\n // 支持HTML描述\n if (demo.descFlag === false) {\n return <div className=\"doc-demo-description\">{demo.desc}</div>;\n }\n\n // 支持样式化文本({} 包围的内容会被样式化)\n const styledDesc = demo.desc.replace(\n /{([^}]+)}/g, \n '<span class=\"doc-demo-highlight\">$1</span>'\n );\n\n return (\n <div \n className=\"doc-demo-description\"\n dangerouslySetInnerHTML={{ __html: styledDesc }}\n />\n );\n };\n\n return (\n <div className=\"doc-demo\" data-demo={demo.source}>\n {/* Demo 标题和描述 */}\n <div className=\"doc-demo-header\">\n <h3 className=\"doc-demo-title\">{demo.title}</h3>\n {renderDescription()}\n </div>\n\n {/* Demo 内容 */}\n <div className=\"doc-demo-content\" ref={demoRef}>\n {renderDemo()}\n </div>\n\n {/* 代码展示 */}\n {showCode && demo.code && (\n <>\n {codeVisible && (\n <div className=\"doc-demo-code\">\n <CodeBlock\n code={demo.code}\n language=\"jsx\"\n theme={theme}\n showLineNumbers={true}\n />\n </div>\n )}\n\n {/* 操作按钮 */}\n <div className=\"doc-demo-actions\">\n {showCopyButton && (\n <button\n className=\"doc-demo-action\"\n onClick={handleCopyCode}\n title=\"复制代码\"\n >\n {copied ? '已复制' : '复制代码'}\n </button>\n )}\n\n {showExpandButton && (\n <button\n className=\"doc-demo-action\"\n onClick={handleCodeToggle}\n title={codeVisible ? '隐藏代码' : '显示代码'}\n >\n {codeVisible ? '隐藏代码' : '显示代码'}\n </button>\n )}\n\n {/* 在新窗口打开 */}\n <button\n className=\"doc-demo-action\"\n onClick={() => {\n // 触发事件,让外部处理\n renderer?.emit('demo.openInNewWindow', {\n componentId,\n demo\n });\n }}\n title=\"在新窗口打开\"\n >\n 新窗口打开\n </button>\n </div>\n </>\n )}\n </div>\n );\n};\n\nexport default Demo;\n","/**\n * API文档组件\n */\n\nimport React from 'react';\n\nconst ApiDoc = ({ \n api, \n componentId, \n config, \n theme \n}) => {\n const apiConfig = config.api || {};\n const { \n showRequired = true, \n showType = true, \n showDefault = true, \n showDescription = true \n } = apiConfig;\n\n const renderApiTable = () => {\n if (!api.data || !Array.isArray(api.data) || api.data.length === 0) {\n return (\n <div className=\"doc-api-empty\">\n <p>暂无API文档</p>\n </div>\n );\n }\n\n return (\n <div className=\"doc-api-table\">\n <div className=\"doc-api-table-header\">\n <div className=\"doc-api-table-cell doc-api-table-param\">参数</div>\n {showType && (\n <div className=\"doc-api-table-cell doc-api-table-type\">类型</div>\n )}\n {showDescription && (\n <div className=\"doc-api-table-cell doc-api-table-description\">说明</div>\n )}\n <div className=\"doc-api-table-cell doc-api-table-option\">可选值</div>\n {showDefault && (\n <div className=\"doc-api-table-cell doc-api-table-default\">默认值</div>\n )}\n {showRequired && (\n <div className=\"doc-api-table-cell doc-api-table-required\">必需</div>\n )}\n </div>\n\n <div className=\"doc-api-table-body\">\n {api.data.map((item, index) => (\n <div key={index} className=\"doc-api-table-row\">\n <div className=\"doc-api-table-cell doc-api-table-param\">\n <code className=\"doc-api-param-name\">{item.param}</code>\n {item.deprecated && (\n <span className=\"doc-api-deprecated\">已废弃</span>\n )}\n </div>\n\n {showType && (\n <div className=\"doc-api-table-cell doc-api-table-type\">\n <code className=\"doc-api-type\">{item.type}</code>\n </div>\n )}\n\n {showDescription && (\n <div className=\"doc-api-table-cell doc-api-table-description\">\n {renderDescription(item.desc, item.descFlag)}\n </div>\n )}\n\n <div className=\"doc-api-table-cell doc-api-table-option\">\n {item.option && (\n <code className=\"doc-api-option\">{item.option}</code>\n )}\n </div>\n\n {showDefault && (\n <div className=\"doc-api-table-cell doc-api-table-default\">\n {item.default !== undefined && item.default !== '' && (\n <code className=\"doc-api-default\">{String(item.default)}</code>\n )}\n </div>\n )}\n\n {showRequired && (\n <div className=\"doc-api-table-cell doc-api-table-required\">\n {item.required ? (\n <span className=\"doc-api-required-yes\">是</span>\n ) : (\n <span className=\"doc-api-required-no\">否</span>\n )}\n </div>\n )}\n </div>\n ))}\n </div>\n </div>\n );\n };\n\n const renderDescription = (desc, descFlag = true) => {\n if (!desc) return null;\n\n if (typeof desc === 'string') {\n if (descFlag) {\n // 支持样式化文本({} 包围的内容会被样式化)\n const styledDesc = desc.replace(\n /{([^}]+)}/g, \n '<span class=\"doc-api-highlight\">$1</span>'\n );\n return (\n <div dangerouslySetInnerHTML={{ __html: styledDesc }} />\n );\n } else {\n return <div>{desc}</div>;\n }\n }\n\n // 支持React元素\n return desc;\n };\n\n const renderCustomContent = () => {\n if (!api.CustomContent) return null;\n\n try {\n const CustomContent = api.CustomContent;\n return <CustomContent />;\n } catch (error) {\n console.error('API custom content render error:', error);\n return null;\n }\n };\n\n return (\n <div className=\"doc-api\" id={`api-${api.apiKey}`}>\n <div className=\"doc-api-header\">\n <h3 className=\"doc-api-title\">{api.title}</h3>\n {api.description && (\n <p className=\"doc-api-description\">{api.description}</p>\n )}\n </div>\n\n {/* 自定义内容 */}\n {renderCustomContent()}\n\n {/* API表格 */}\n {renderApiTable()}\n\n {/* 示例代码 */}\n {api.example && (\n <div className=\"doc-api-example\">\n <h4 className=\"doc-api-example-title\">示例</h4>\n <pre className=\"doc-api-example-code\">\n <code>{api.example}</code>\n </pre>\n </div>\n )}\n\n {/* 注意事项 */}\n {api.notes && (\n <div className=\"doc-api-notes\">\n <h4 className=\"doc-api-notes-title\">注意事项</h4>\n <div className=\"doc-api-notes-content\">\n {Array.isArray(api.notes) ? (\n <ul>\n {api.notes.map((note, index) => (\n <li key={index}>{note}</li>\n ))}\n </ul>\n ) : (\n <p>{api.notes}</p>\n )}\n </div>\n </div>\n )}\n </div>\n );\n};\n\nexport default ApiDoc;\n","/**\n * 首页组件\n */\n\nimport React from 'react';\n\nconst Home = ({ config, theme, componentRegistry }) => {\n const components = componentRegistry.getComponentIds();\n\n const renderWelcome = () => (\n <div className=\"doc-home-welcome\">\n <h1 className=\"doc-home-title\">\n {config.title || 'Documentation'}\n </h1>\n \n {config.description && (\n <p className=\"doc-home-description\">\n {config.description}\n </p>\n )}\n\n {config.version && (\n <div className=\"doc-home-version\">\n 当前版本: <code>{config.version}</code>\n </div>\n )}\n </div>\n );\n\n const renderQuickStart = () => {\n if (config.quickStart === false) return null;\n\n return (\n <div className=\"doc-home-section\">\n <h2 className=\"doc-home-section-title\">快速开始</h2>\n \n {config.installation && (\n <div className=\"doc-home-installation\">\n <h3>安装</h3>\n <pre className=\"doc-home-code\">\n <code>{config.installation}</code>\n </pre>\n </div>\n )}\n\n {config.usage && (\n <div className=\"doc-home-usage\">\n <h3>使用</h3>\n <pre className=\"doc-home-code\">\n <code>{config.usage}</code>\n </pre>\n </div>\n )}\n </div>\n );\n };\n\n const renderComponents = () => {\n if (components.length === 0) return null;\n\n return (\n <div className=\"doc-home-section\">\n <h2 className=\"doc-home-section-title\">组件列表</h2>\n \n <div className=\"doc-home-components\">\n {components.map(componentId => {\n const componentConfig = componentRegistry.getComponent(componentId);\n const demos = componentRegistry.getDemos(componentId);\n \n return (\n <div key={componentId} className=\"doc-home-component-card\">\n <h3 className=\"doc-home-component-title\">\n <a href={`#/${componentId}`}>\n {componentConfig?.label || componentId}\n </a>\n </h3>\n \n {componentConfig?.description && (\n <p className=\"doc-home-component-description\">\n {componentConfig.description}\n </p>\n )}\n\n <div className=\"doc-home-component-meta\">\n <span className=\"doc-home-component-demos\">\n {demos.size} 个示例\n </span>\n \n {componentConfig?.version && (\n <span className=\"doc-home-component-version\">\n v{componentConfig.version}\n </span>\n )}\n </div>\n </div>\n );\n })}\n </div>\n </div>\n );\n };\n\n const renderFeatures = () => {\n if (!config.features || !Array.isArray(config.features)) return null;\n\n return (\n <div className=\"doc-home-section\">\n <h2 className=\"doc-home-section-title\">特性</h2>\n \n <div className=\"doc-home-features\">\n {config.features.map((feature, index) => (\n <div key={index} className=\"doc-home-feature\">\n {feature.icon && (\n <div className=\"doc-home-feature-icon\">\n {feature.icon}\n </div>\n )}\n \n <h3 className=\"doc-home-feature-title\">\n {feature.title}\n </h3>\n \n {feature.description && (\n <p className=\"doc-home-feature-description\">\n {feature.description}\n </p>\n )}\n </div>\n ))}\n </div>\n </div>\n );\n };\n\n const renderCustomContent = () => {\n if (!config.homeContent) return null;\n\n if (typeof config.homeContent === 'function') {\n const CustomContent = config.homeContent;\n return <CustomContent config={config} theme={theme} componentRegistry={componentRegistry} />;\n }\n\n if (typeof config.homeContent === 'string') {\n return (\n <div \n className=\"doc-home-custom-content\"\n dangerouslySetInnerHTML={{ __html: config.homeContent }}\n />\n );\n }\n\n return config.homeContent;\n };\n\n return (\n <div className=\"doc-home\">\n {renderWelcome()}\n {renderQuickStart()}\n {renderFeatures()}\n {renderComponents()}\n {renderCustomContent()}\n </div>\n );\n};\n\nexport default Home;\n","/**\n * 内容区域组件\n */\n\nimport React, { useMemo } from 'react';\nimport Demo from './Demo';\nimport ApiDoc from './ApiDoc';\nimport Home from './Home';\n\nconst Content = ({ \n config, \n theme, \n currentRoute, \n componentRegistry, \n renderer \n}) => {\n // 根据当前路由渲染内容\n const renderContent = useMemo(() => {\n if (!currentRoute) {\n return <div className=\"doc-content-loading\">加载中...</div>;\n }\n\n // 首页\n if (currentRoute.component === 'home' || currentRoute.path === '/') {\n return (\n <Home \n config={config}\n theme={theme}\n componentRegistry={componentRegistry}\n />\n );\n }\n\n // 组件页面\n const componentId = currentRoute.component;\n const componentConfig = componentRegistry.getComponent(componentId);\n \n if (!componentConfig) {\n return (\n <div className=\"doc-content-not-found\">\n <h1>页面未找到</h1>\n <p>组件 \"{componentId}\" 不存在</p>\n </div>\n );\n }\n\n return (\n <ComponentPage\n componentId={componentId}\n componentConfig={componentConfig}\n componentRegistry={componentRegistry}\n config={config}\n theme={theme}\n renderer={renderer}\n />\n );\n }, [currentRoute, componentRegistry, config, theme, renderer]);\n\n return (\n <main className=\"doc-content\">\n <div className=\"doc-content-container\">\n {renderContent}\n </div>\n </main>\n );\n};\n\n// 组件页面\nconst ComponentPage = ({ \n componentId, \n componentConfig, \n componentRegistry, \n config, \n theme, \n renderer \n}) => {\n const demos = componentRegistry.getDemos(componentId);\n const apis = componentRegistry.getApis(componentId);\n\n return (\n <div className=\"doc-component-page\">\n {/* 页面标题 */}\n <div className=\"doc-component-header\">\n <h1 className=\"doc-component-title\">\n {componentConfig.label || componentId}\n </h1>\n {componentConfig.description && (\n <p className=\"doc-component-description\">\n {componentConfig.description}\n </p>\n )}\n {componentConfig.version && (\n <div className=\"doc-component-version\">\n 版本: {componentConfig.version}\n </div>\n )}\n </div>\n\n {/* Demo 展示 */}\n {demos.size > 0 && (\n <div className=\"doc-component-demos\">\n <h2 className=\"doc-component-section-title\">示例</h2>\n {Array.from(demos.values()).map((demo, index) => (\n <Demo\n key={demo.source || index}\n demo={demo}\n componentId={componentId}\n config={config}\n theme={theme}\n renderer={renderer}\n />\n ))}\n </div>\n )}\n\n {/* API 文档 */}\n {apis.size > 0 && (\n <div className=\"doc-component-apis\">\n <h2 className=\"doc-component-section-title\" id=\"api\">\n API\n </h2>\n {Array.from(apis.values()).map((api, index) => (\n <ApiDoc\n key={api.apiKey || index}\n api={api}\n componentId={componentId}\n config={config}\n theme={theme}\n />\n ))}\n </div>\n )}\n\n {/* 额外内容 */}\n {componentConfig.extra && (\n <div className=\"doc-component-extra\">\n {typeof componentConfig.extra === 'function' \n ? componentConfig.extra({ componentId, config, theme })\n : componentConfig.extra\n }\n </div>\n )}\n </div>\n );\n};\n\nexport default Content;\n","/**\n * 页脚组件\n */\n\nimport React from 'react';\n\nconst Footer = ({ config, theme }) => {\n const currentYear = new Date().getFullYear();\n\n const renderCopyright = () => {\n if (config.copyright === false) return null;\n\n const copyright = config.copyright || `© ${currentYear} ${config.title || 'Documentation'}`;\n \n return (\n <div className=\"doc-footer-copyright\">\n {copyright}\n </div>\n );\n };\n\n const renderLinks = () => {\n if (!config.footerLinks || !Array.isArray(config.footerLinks)) return null;\n\n return (\n <div className=\"doc-footer-links\">\n {config.footerLinks.map((link, index) => (\n <a\n key={index}\n href={link.url}\n target={link.external ? '_blank' : '_self'}\n rel={link.external ? 'noopener noreferrer' : undefined}\n className=\"doc-footer-link\"\n >\n {link.text}\n </a>\n ))}\n </div>\n );\n };\n\n const renderPoweredBy = () => {\n if (config.hidePoweredBy) return null;\n\n return (\n <div className=\"doc-footer-powered\">\n Powered by <a href=\"https://github.com/Sunny-117/doc-render-sdk\" target=\"_blank\" rel=\"noopener noreferrer\">Doc SDK</a>\n </div>\n );\n };\n\n const renderCustomContent = () => {\n if (!config.footerContent) return null;\n\n if (typeof config.footerContent === 'function') {\n const CustomContent = config.footerContent;\n return <CustomContent config={config} theme={theme} />;\n }\n\n if (typeof config.footerContent === 'string') {\n return (\n <div \n className=\"doc-footer-custom\"\n dangerouslySetInnerHTML={{ __html: config.footerContent }}\n />\n );\n }\n\n return config.footerContent;\n };\n\n return (\n <footer className=\"doc-footer\">\n <div className=\"doc-footer-content\">\n {renderCopyright()}\n {renderLinks()}\n {renderCustomContent()}\n {renderPoweredBy()}\n </div>\n </footer>\n );\n};\n\nexport default Footer;\n","/**\n * 主布局组件\n */\n\nimport React, { useState, useEffect } from 'react';\nimport Navigation from './Navigation';\nimport Header from './Header';\nimport Content from './Content';\nimport Footer from './Footer';\n\nconst Layout = ({ \n config, \n theme, \n renderer, \n routerManager, \n componentRegistry,\n onRouteChange \n}) => {\n const [currentRoute, setCurrentRoute] = useState(null);\n const [sidebarCollapsed, setSidebarCollapsed] = useState(false);\n\n useEffect(() => {\n // 监听路由变化\n const unsubscribe = routerManager.onRouteChange((route) => {\n setCurrentRoute(route);\n if (onRouteChange) {\n onRouteChange(route);\n }\n });\n\n // 获取初始路由\n setCurrentRoute(routerManager.getCurrentRoute());\n\n return unsubscribe;\n }, [routerManager, onRouteChange]);\n\n const layoutConfig = config.layout || {};\n const { type = 'sidebar' } = layoutConfig;\n\n const handleSidebarToggle = () => {\n setSidebarCollapsed(!sidebarCollapsed);\n };\n\n const handleNavigate = (path, params) => {\n routerManager.navigate(path, params);\n };\n\n // 渲染侧边栏布局\n const renderSidebarLayout = () => (\n <div className=\"doc-layout doc-layout-sidebar-type\">\n <Header \n config={config}\n theme={theme}\n currentRoute={currentRoute}\n sidebarCollapsed={sidebarCollapsed}\n onSidebarToggle={handleSidebarToggle}\n />\n \n <div className=\"doc-layout-content\">\n {!sidebarCollapsed && (\n <div className=\"doc-layout-sidebar\">\n <Navigation\n config={config}\n theme={theme}\n currentRoute={currentRoute}\n componentRegistry={componentRegistry}\n onNavigate={handleNavigate}\n />\n </div>\n )}\n \n <div className=\"doc-layout-main\">\n <Content\n config={config}\n theme={theme}\n currentRoute={currentRoute}\n componentRegistry={componentRegistry}\n renderer={renderer}\n />\n </div>\n </div>\n \n {layoutConfig.footer?.show !== false && (\n <Footer \n config={config}\n theme={theme}\n />\n )}\n </div>\n );\n\n // 渲染顶部导航布局\n const renderTopLayout = () => (\n <div className=\"doc-layout doc-layout-top-type\">\n <Header \n config={config}\n theme={theme}\n currentRoute={currentRoute}\n showNavigation={true}\n componentRegistry={componentRegistry}\n onNavigate={handleNavigate}\n />\n \n <div className=\"doc-layout-content\">\n <div className=\"doc-layout-main\">\n <Content\n config={config}\n theme={theme}\n currentRoute={currentRoute}\n componentRegistry={componentRegistry}\n renderer={renderer}\n />\n </div>\n </div>\n \n {layoutConfig.footer?.show !== false && (\n <Footer \n config={config}\n theme={theme}\n />\n )}\n </div>\n );\n\n // 渲染混合布局\n const renderMixedLayout = () => (\n <div className=\"doc-layout doc-layout-mixed-type\">\n <Header \n config={config}\n theme={theme}\n currentRoute={currentRoute}\n showNavigation={true}\n componentRegistry={componentRegistry}\n onNavigate={handleNavigate}\n />\n \n <div className=\"doc-layout-content\">\n <div className=\"doc-layout-sidebar\">\n <Navigation\n config={config}\n theme={theme}\n currentRoute={currentRoute}\n componentRegistry={componentRegistry}\n onNavigate={handleNavigate}\n compact={true}\n />\n </div>\n \n <div className=\"doc-layout-main\">\n <Content\n config={config}\n theme={theme}\n currentRoute={currentRoute}\n componentRegistry={componentRegistry}\n renderer={renderer}\n />\n </div>\n </div>\n \n {layoutConfig.footer?.show !== false && (\n <Footer \n config={config}\n theme={theme}\n />\n )}\n </div>\n );\n\n // 根据布局类型渲染\n switch (type) {\n case 'top':\n return renderTopLayout();\n case 'mixed':\n return renderMixedLayout();\n case 'sidebar':\n default:\n return renderSidebarLayout();\n }\n};\n\nexport default Layout;\n","/**\n * 路由管理器\n * 负责管理文档站点的路由系统\n */\n\nexport default class RouterManager {\n renderer: any;\n currentRoute: null;\n routes: Map<any, any>;\n listeners: Set<(route: any) => void>;\n isInitialized: boolean;\n constructor(renderer) {\n this.renderer = renderer;\n this.currentRoute = null;\n this.routes = new Map();\n this.listeners = new Set();\n this.isInitialized = false;\n }\n\n /**\n * 初始化路由系统\n */\n initialize() {\n if (this.isInitialized) {\n return;\n }\n\n // 注册路由\n this.registerRoutes();\n\n // 监听浏览器路由变化\n window.addEventListener('hashchange', this.handleHashChange.bind(this));\n window.addEventListener('popstate', this.handlePopState.bind(this));\n\n // 处理初始路由\n this.handleInitialRoute();\n\n this.isInitialized = true;\n }\n\n /**\n * 注册路由\n */\n registerRoutes() {\n const config = this.renderer.configManager.getConfig();\n const { components = {} } = config;\n\n // 注册首页路由\n this.routes.set('/', {\n path: '/',\n component: 'home',\n title: config.title || 'Documentation'\n });\n\n // 注册组件路由\n Object.entries(components).forEach(([componentId, componentConfig]) => {\n const path = `/${componentId}`;\n this.routes.set(path, {\n path,\n component: componentId,\n title: (componentConfig as any).label || componentId,\n config: componentConfig\n });\n });\n }\n\n /**\n * 处理初始路由\n */\n handleInitialRoute() {\n const hash = window.location.hash;\n const path = this.parseHashToPath(hash);\n this.navigate(path, {}, false);\n }\n\n /**\n * 处理hash变化\n */\n handleHashChange() {\n const hash = window.location.hash;\n const path = this.parseHashToPath(hash);\n this.navigate(path, {}, false);\n }\n\n /**\n * 处理浏览器前进后退\n */\n handlePopState(event) {\n if (event.state && event.state.path) {\n this.navigate(event.state.path, event.state.params || {}, false);\n }\n }\n\n /**\n * 解析hash为路径\n * @param {string} hash - URL hash\n * @returns {string} 路径\n */\n parseHashToPath(hash) {\n if (!hash || hash === '#') {\n return '/';\n }\n \n // 移除#号并解析参数\n const hashWithoutSymbol = hash.substring(1);\n const [path, queryString] = hashWithoutSymbol.split('?');\n \n return path || '/';\n }\n\n /**\n * 解析查询参数\n * @param {string} queryString - 查询字符串\n * @returns {Object} 参数对象\n */\n parseQuery(queryString) {\n const params = {};\n if (!queryString) return params;\n\n queryString.split('&').forEach(param => {\n const [key, value] = param.split('=');\n if (key) {\n params[decodeURIComponent(key)] = decodeURIComponent(value || '');\n }\n });\n\n return params;\n }\n\n /**\n * 导航到指定路径\n * @param {string} path - 路径\n * @param {Object} params - 参数\n * @param {boolean} pushState - 是否推入历史记录\n */\n navigate(path, params = {}, pushState = true) {\n const route = this.routes.get(path);\n \n if (!route) {\n console.warn(`Route not found: ${path}`);\n // 导航到首页\n return this.navigate('/', {}, pushState);\n }\n\n const newRoute = {\n ...route,\n params,\n query: this.parseQuery(window.location.hash.split('?')[1])\n };\n\n // 更新当前路由\n this.currentRoute = newRoute;\n\n // 更新URL(只使用 hash,不使用 pushState)\n if (pushState) {\n const hash = this.buildHash(path, params);\n window.location.hash = hash;\n }\n\n // 通知路由变化\n this.notifyRouteChange(newRoute);\n\n return newRoute;\n }\n\n /**\n * 构建hash\n * @param {string} path - 路径\n * @param {Object} params - 参数\n * @returns {string} hash字符串\n */\n buildHash(path, params = {}) {\n let hash = path === '/' ? '' : path;\n \n const queryParams = Object.entries(params)\n .filter(([key, value]) => value !== undefined && value !== null)\n .map(([key, value]) => `${encodeURIComponent(key)}=${encodeURIComponent(value as string)}`)\n .join('&');\n\n if (queryParams) {\n hash += `?${queryParams}`;\n }\n\n return hash;\n }\n\n /**\n * 获取当前路由\n * @returns {Object|null} 当前路由信息\n */\n getCurrentRoute() {\n return this.currentRoute;\n }\n\n /**\n * 监听路由变化\n * @param {Function} listener - 监听函数\n * @returns {Function} 取消监听的函数\n */\n onRouteChange(listener) {\n this.listeners.add(listener);\n \n return () => {\n this.listeners.delete(listener);\n };\n }\n\n /**\n * 通知路由变化\n * @param {Object} route - 路由信息\n */\n notifyRouteChange(route) {\n this.listeners.forEach(listener => {\n try {\n listener(route);\n } catch (error) {\n console.error('Route change listener error:', error);\n }\n });\n\n // 通知渲染器\n if (this.renderer && typeof this.renderer.handleRouteChange === 'function') {\n this.renderer.handleRouteChange(route);\n }\n }\n\n /**\n * 销毁路由管理器\n */\n destroy() {\n if (this.isInitialized) {\n window.removeEventListener('hashchange', this.handleHashChange.bind(this));\n window.removeEventListener('popstate', this.handlePopState.bind(this));\n this.listeners.clear();\n this.routes.clear();\n this.currentRoute = null;\n this.isInitialized = false;\n }\n }\n}\n","/**\n * 组件注册表\n * 负责管理和注册文档组件\n */\n\nexport default class ComponentRegistry {\n apis: Map<any, any>;\n demos: Map<any, any>;\n components: Map<any, any>;\n renderer: any;\n constructor(renderer) {\n this.renderer = renderer;\n this.components = new Map();\n this.demos = new Map();\n this.apis = new Map();\n }\n\n /**\n * 注册组件\n * @param {string} componentId - 组件ID\n * @param {Object} componentConfig - 组件配置\n */\n async register(componentId, componentConfig) {\n try {\n // 存储组件配置\n this.components.set(componentId, componentConfig);\n\n // 注册demos\n if (componentConfig.demos && Array.isArray(componentConfig.demos)) {\n await this.registerDemos(componentId, componentConfig.demos);\n }\n\n // 注册APIs\n if (componentConfig.apis && Array.isArray(componentConfig.apis)) {\n await this.registerApis(componentId, componentConfig.apis);\n }\n\n return true;\n } catch (error) {\n console.error(`Failed to register component ${componentId}:`, error);\n return false;\n }\n }\n\n /**\n * 注册组件demos\n * @param {string} componentId - 组件ID\n * @param {Array} demos - demo配置数组\n */\n async registerDemos(componentId, demos) {\n const componentDemos = new Map();\n\n for (const demo of demos) {\n try {\n const demoComponent = await this.loadDemo(componentId, demo);\n const demoCode = await this.loadDemoCode(componentId, demo);\n \n componentDemos.set(demo.source, {\n ...demo,\n component: demoComponent,\n code: demoCode\n });\n } catch (error) {\n console.error(`Failed to load demo ${demo.source} for component ${componentId}:`, error);\n }\n }\n\n this.demos.set(componentId, componentDemos);\n }\n\n /**\n * 加载demo组件\n * @param {string} componentId - 组件ID\n * @param {Object} demo - demo配置\n * @returns {React.Component} demo组件\n */\n async loadDemo(componentId, demo) {\n try {\n // 优先从全局注册的组件中获取\n const globalDemo = window.__DOC_SDK_DEMOS__?.[componentId]?.[demo.source];\n if (globalDemo) {\n return globalDemo;\n }\n \n // 如果全局没有注册,尝试动态导入(用于开发环境)\n const demoPath = `../components/${componentId}/demo/${demo.source}`;\n console.log({demoPath})\n const module = await import(/* @vite-ignore */ demoPath);\n return module.default || module;\n } catch (error) {\n throw new Error(`Demo component not found: ${componentId}/${demo.source}`);\n }\n }\n\n /**\n * 加载demo源码\n * @param {string} componentId - 组件ID\n * @param {Object} demo - demo配置\n * @returns {string} demo源码\n */\n async loadDemoCode(componentId, demo) {\n try {\n // 尝试从全局注册的代码中获取\n const globalCode = window.__DOC_SDK_DEMO_CODES__?.[componentId]?.[demo.source];\n if (globalCode) {\n return globalCode;\n }\n\n // 如果没有预加载的代码,返回占位符\n return `// Demo code for ${componentId}/${demo.source}\\n// Code not available`;\n } catch (error) {\n console.error(`Failed to load demo code: ${componentId}/${demo.source}`, error);\n return '// Code not available';\n }\n }\n\n /**\n * 注册组件APIs\n * @param {string} componentId - 组件ID\n * @param {Array} apis - API配置数组\n */\n async registerApis(componentId, apis) {\n const componentApis = new Map();\n\n for (const api of apis) {\n try {\n const apiData = await this.loadApiData(componentId, api);\n componentApis.set(api.apiKey, {\n ...api,\n data: apiData\n });\n } catch (error) {\n console.error(`Failed to load API ${api.apiKey} for component ${componentId}:`, error);\n }\n }\n\n this.apis.set(componentId, componentApis);\n }\n\n /**\n * 加载API数据\n * @param {string} componentId - 组件ID\n * @param {Object} api - API配置\n * @returns {Array} API数据\n */\n async loadApiData(componentId, api) {\n try {\n // 尝试从全局注册的API数据中获取\n const globalApiData = window.__DOC_SDK_APIS__?.[componentId]?.[api.apiKey];\n if (globalApiData) {\n return globalApiData;\n }\n\n // 尝试动态导入\n const apiPath = `../components/${componentId}/api`;\n const module = await import(/* @vite-ignore */ apiPath);\n const apiData = module.default || module;\n \n return apiData[api.apiKey] || [];\n } catch (error) {\n console.error(`Failed to load API data: ${componentId}/${api.apiKey}`, error);\n return [];\n }\n }\n\n /**\n * 获取组件配置\n * @param {string} componentId - 组件ID\n * @returns {Object|null} 组件配置\n */\n getComponent(componentId) {\n return this.components.get(componentId) || null;\n }\n\n /**\n * 获取组件demos\n * @param {string} componentId - 组件ID\n * @returns {Map} demos Map\n */\n getDemos(componentId) {\n return this.demos.get(componentId) || new Map();\n }\n\n /**\n * 获取特定demo\n * @param {string} componentId - 组件ID\n * @param {string} demoSource - demo源\n * @returns {Object|null} demo对象\n */\n getDemo(componentId, demoSource) {\n const componentDemos = this.getDemos(componentId);\n return componentDemos.get(demoSource) || null;\n }\n\n /**\n * 获取组件APIs\n * @param {string} componentId - 组件ID\n * @returns {Map} APIs Map\n */\n getApis(componentId) {\n return this.apis.get(componentId) || new Map();\n }\n\n /**\n * 获取特定API\n * @param {string} componentId - 组件ID\n * @param {string} apiKey - API键\n * @returns {Object|null} API对象\n */\n getApi(componentId, apiKey) {\n const componentApis = this.getApis(componentId);\n return componentApis.get(apiKey) || null;\n }\n\n /**\n * 获取所有注册的组件ID\n * @returns {Array} 组件ID数组\n */\n getComponentIds() {\n return Array.from(this.components.keys());\n }\n\n /**\n * 检查组件是否已注册\n * @param {string} componentId - 组件ID\n * @returns {boolean} 是否已注册\n */\n hasComponent(componentId) {\n return this.components.has(componentId);\n }\n\n /**\n * 清空注册表\n */\n clear() {\n this.components.clear();\n this.demos.clear();\n this.apis.clear();\n }\n}\n","/**\n * 文档渲染器核心类\n * 负责整个文档站点的渲染和管理\n */\n\nimport React from 'react';\nimport { createRoot } from 'react-dom/client';\nimport Layout from '../components/Layout';\nimport RouterManager from './RouterManager';\nimport ComponentRegistry from './ComponentRegistry';\nimport type { RendererOptions } from '../types';\n\nexport default class DocRenderer {\n private configManager: any;\n private themeManager: any;\n private pluginManager: any;\n private routerManager: any;\n private componentRegistry: any;\n private targetElement: HTMLElement | null;\n private isRendered: boolean;\n private root: any;\n\n constructor({ configManager, themeManager, pluginManager }: RendererOptions) {\n\n this.configManager = configManager;\n this.themeManager = themeManager;\n this.pluginManager = pluginManager;\n\n this.routerManager = new RouterManager(this);\n this.componentRegistry = new ComponentRegistry(this);\n\n this.targetElement = null;\n this.isRendered = false;\n this.root = null;\n\n // 初始化插件\n this.pluginManager.initialize(this);\n }\n\n /**\n * 渲染文档到指定容器\n * @param {string|HTMLElement} target - 目标容器\n */\n async render(target) {\n try {\n this.targetElement = typeof target === 'string' \n ? document.querySelector(target) \n : target;\n\n if (!this.targetElement) {\n throw new Error('Target element not found');\n }\n\n // 触发渲染前事件\n // this.emit('beforeRender', { target: this.targetElement });\n\n // 注册组件\n await this.registerComponents();\n\n // 初始化路由\n this.routerManager.initialize();\n\n // 渲染主布局\n this.renderLayout();\n\n this.isRendered = true;\n\n // 触发渲染完成事件\n // this.emit('rendered', { target: this.targetElement });\n\n return this;\n } catch (error) {\n // this.emit('renderError', { error, target });\n throw error;\n }\n }\n\n /**\n * 渲染主布局\n */\n renderLayout() {\n const config = this.configManager.getConfig();\n const theme = this.themeManager.getCurrentTheme();\n \n const layoutProps = {\n config,\n theme,\n renderer: this,\n routerManager: this.routerManager,\n componentRegistry: this.componentRegistry,\n onRouteChange: this.handleRouteChange.bind(this)\n };\n\n if (!this.root) {\n this.root = createRoot(this.targetElement!);\n }\n \n this.root.render(\n React.createElement(Layout, layoutProps)\n );\n }\n\n /**\n * 注册组件\n */\n async registerComponents() {\n const config = this.configManager.getConfig();\n const { components = {} } = config;\n\n for (const [componentId, componentConfig] of Object.entries(components)) {\n await this.componentRegistry.register(componentId, componentConfig);\n }\n }\n\n /**\n * 处理路由变化\n * @param {Object} route - 路由信息\n */\n handleRouteChange(route) {\n // this.emit('routeChange', route);\n \n // 更新页面标题\n if (route.title) {\n document.title = `${route.title} - ${this.configManager.get('title', 'Documentation')}`;\n }\n }\n\n /**\n * 更新渲染\n */\n update() {\n if (this.isRendered) {\n this.renderLayout();\n // this.emit('updated');\n }\n return this;\n }\n\n /**\n * 销毁渲染器\n */\n destroy() {\n if (this.targetElement && this.isRendered) {\n if (this.root) {\n this.root.unmount();\n this.root = null;\n }\n this.routerManager.destroy();\n this.componentRegistry.clear();\n // this.destroyEvents();\n this.isRendered = false;\n \n // this.emit('destroyed');\n }\n return this;\n }\n\n /**\n * 获取组件注册表\n */\n getComponentRegistry() {\n return this.componentRegistry;\n }\n\n /**\n * 获取路由管理器\n */\n getRouterManager() {\n return this.routerManager;\n }\n\n /**\n * 获取当前路由\n */\n getCurrentRoute() {\n return this.routerManager.getCurrentRoute();\n }\n\n /**\n * 导航到指定路由\n * @param {string} path - 路由路径\n * @param {Object} params - 路由参数\n */\n navigate(path, params = {}) {\n return this.routerManager.navigate(path, params);\n }\n}\n","/**\n * 默认配置\n */\n\nimport type { DocConfig } from '../types';\n\nconst defaultConfig: DocConfig = {\n // 站点基本信息\n title: 'Documentation',\n description: 'Component Documentation Site',\n version: '1.0.0',\n \n // 主题配置\n theme: {\n name: 'default',\n colors: {},\n typography: {},\n spacing: {},\n layout: {}\n },\n \n // 布局配置\n layout: {\n type: 'sidebar', // sidebar, top, mixed\n sidebar: {\n width: 280,\n collapsible: true,\n },\n header: {\n height: 64,\n },\n },\n \n // 组件配置\n components: {},\n \n // 插件配置\n plugins: [],\n};\n\nexport default defaultConfig;\n","/**\n * 配置管理器\n * 负责管理文档站点的所有配置\n */\n\nimport { merge, get, set, cloneDeep } from 'lodash-es';\nimport defaultConfig from '../config/default';\nimport type { DocConfig } from '../types';\n\nexport default class ConfigManager {\n private config: DocConfig;\n private listeners: Set<(config: DocConfig) => void>;\n\n constructor(userConfig: Partial<DocConfig> = {}) {\n this.config = this.mergeConfig(defaultConfig, userConfig);\n this.listeners = new Set();\n }\n\n /**\n * 合并配置\n */\n private mergeConfig(defaultConfig: DocConfig, userConfig: Partial<DocConfig>): DocConfig {\n return merge(cloneDeep(defaultConfig), userConfig);\n }\n\n /**\n * 获取完整配置\n */\n getConfig(): DocConfig {\n return cloneDeep(this.config);\n }\n\n /**\n * 获取配置项\n */\n get(path?: string, defaultValue?: any): any {\n if (!path) return this.getConfig();\n return get(this.config, path, defaultValue);\n }\n\n /**\n * 设置配置项\n */\n set(path: string, value: any): void {\n const oldValue = this.get(path);\n set(this.config, path, value);\n\n this.notifyChange(path, value, oldValue);\n }\n\n /**\n * 更新配置\n */\n update(newConfig: Partial<DocConfig>): void {\n const oldConfig = cloneDeep(this.config);\n this.config = this.mergeConfig(this.config, newConfig);\n\n this.notifyChange('*', this.config, oldConfig);\n }\n\n /**\n * 重置配置\n */\n reset(newConfig: Partial<DocConfig> = {}): void {\n const oldConfig = cloneDeep(this.config);\n this.config = this.mergeConfig(defaultConfig, newConfig);\n\n this.notifyChange('*', this.config, oldConfig);\n }\n\n /**\n * 监听配置变化\n */\n onChange(listener: (config: DocConfig) => void): () => void {\n this.listeners.add(listener);\n\n // 返回取消监听的函数\n return () => {\n this.listeners.delete(listener);\n };\n }\n\n /**\n * 通知配置变化\n */\n private notifyChange(path: string, newValue: any, oldValue: any): void {\n this.listeners.forEach(listener => {\n try {\n listener({ path, newValue, oldValue, config: this.config } as any);\n } catch (error) {\n console.error('Config change listener error:', error);\n }\n });\n }\n\n /**\n * 验证配置\n * @param {Object} config - 要验证的配置\n * @returns {Object} 验证结果\n */\n validate(config = this.config) {\n const errors = [];\n const warnings: string[] = [];\n\n // 验证必需字段\n if (!config.title) {\n warnings.push('Missing title in config');\n }\n\n if (!config.components || Object.keys(config.components).length === 0) {\n warnings.push('No components defined in config');\n }\n\n // 验证组件配置\n if (config.components) {\n Object.entries(config.components).forEach(([id, component]) => {\n if (!component.label) {\n warnings.push(`Component ${id} missing label`);\n }\n \n if (!component.demos || !Array.isArray(component.demos)) {\n warnings.push(`Component ${id} missing demos array`);\n }\n });\n }\n\n return {\n isValid: errors.length === 0,\n errors,\n warnings\n };\n }\n\n /**\n * 获取组件配置\n * @param {string} componentId - 组件ID\n * @returns {Object|null} 组件配置\n */\n getComponent(componentId) {\n return this.get(`components.${componentId}`, null);\n }\n\n /**\n * 获取所有组件配置\n * @returns {Object} 组件配置对象\n */\n getComponents() {\n return this.get('components', {});\n }\n\n /**\n * 获取主题配置\n * @returns {Object} 主题配置\n */\n getTheme() {\n return this.get('theme', {});\n }\n\n /**\n * 获取布局配置\n * @returns {Object} 布局配置\n */\n getLayout() {\n return this.get('layout', {});\n }\n\n /**\n * 获取插件配置\n * @returns {Array} 插件配置数组\n */\n getPlugins() {\n return this.get('plugins', []);\n }\n}\n","/**\n * 默认主题\n */\n\nexport default {\n name: 'default',\n \n // 颜色系统\n colors: {\n // 主色调\n primary: '#1890ff',\n primaryHover: '#40a9ff',\n primaryActive: '#096dd9',\n \n // 成功色\n success: '#52c41a',\n successHover: '#73d13d',\n successActive: '#389e0d',\n \n // 警告色\n warning: '#faad14',\n warningHover: '#ffc53d',\n warningActive: '#d48806',\n \n // 错误色\n error: '#ff4d4f',\n errorHover: '#ff7875',\n errorActive: '#d9363e',\n \n // 文本色\n text: '#262626',\n textSecondary: '#595959',\n textTertiary: '#8c8c8c',\n textQuaternary: '#bfbfbf',\n \n // 背景色\n background: '#ffffff',\n backgroundSecondary: '#fafafa',\n backgroundTertiary: '#f5f5f5',\n \n // 边框色\n border: '#d9d9d9',\n borderSecondary: '#f0f0f0',\n \n // 阴影色\n shadow: 'rgba(0, 0, 0, 0.15)',\n shadowSecondary: 'rgba(0, 0, 0, 0.06)',\n \n // 代码相关\n code: {\n background: '#f6f8fa',\n border: '#e1e4e8',\n text: '#24292e',\n keyword: '#d73a49',\n string: '#032f62',\n comment: '#6a737d',\n number: '#005cc5',\n function: '#6f42c1'\n }\n },\n \n // 字体系统\n typography: {\n fontFamily: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif',\n fontFamilyCode: 'SFMono-Regular, Consolas, \"Liberation Mono\", Menlo, Courier, monospace',\n \n // 字体大小\n fontSize: {\n xs: '12px',\n sm: '14px',\n base: '16px',\n lg: '18px',\n xl: '20px',\n '2xl': '24px',\n '3xl': '30px',\n '4xl': '36px'\n },\n \n // 行高\n lineHeight: {\n tight: 1.25,\n normal: 1.5,\n relaxed: 1.75\n },\n \n // 字重\n fontWeight: {\n normal: 400,\n medium: 500,\n semibold: 600,\n bold: 700\n }\n },\n \n // 间距系统\n spacing: {\n xs: '4px',\n sm: '8px',\n md: '16px',\n lg: '24px',\n xl: '32px',\n '2xl': '48px',\n '3xl': '64px',\n '4xl': '96px'\n },\n \n // 布局系统\n layout: {\n sidebarWidth: '280px',\n headerHeight: '64px',\n footerHeight: '60px',\n contentMaxWidth: '1200px',\n borderRadius: '6px',\n boxShadow: '0 2px 8px rgba(0, 0, 0, 0.15)'\n },\n \n // 组件样式\n components: {\n // 布局组件\n layout: `\n .doc-layout {\n min-height: 100vh;\n display: flex;\n flex-direction: column;\n }\n\n .doc-layout-header {\n background: var(--doc-color-background);\n border-bottom: 1px solid var(--doc-color-border);\n box-shadow: var(--doc-layout-boxShadow);\n z-index: 100;\n }\n\n .doc-layout-content {\n flex: 1;\n display: flex;\n }\n\n .doc-layout-sidebar {\n width: var(--doc-layout-sidebarWidth);\n background: var(--doc-color-background);\n border-right: 1px solid var(--doc-color-border);\n overflow-y: auto;\n }\n\n .doc-layout-main {\n flex: 1;\n background: var(--doc-color-backgroundSecondary);\n overflow-y: auto;\n }\n\n .doc-layout-footer {\n background: var(--doc-color-background);\n border-top: 1px solid var(--doc-color-border);\n text-align: center;\n padding: var(--doc-spacing-md);\n color: var(--doc-color-textSecondary);\n }\n `,\n\n // 头部组件\n header: `\n .doc-header {\n height: var(--doc-layout-headerHeight);\n display: flex;\n align-items: center;\n padding: 0 var(--doc-spacing-lg);\n }\n\n .doc-header-content {\n width: 100%;\n display: flex;\n align-items: center;\n justify-content: space-between;\n }\n\n .doc-header-left {\n display: flex;\n align-items: center;\n gap: var(--doc-spacing-md);\n }\n\n .doc-header-logo img {\n height: 32px;\n width: auto;\n }\n\n .doc-header-logo-placeholder {\n font-size: 24px;\n }\n\n .doc-header-title {\n font-size: var(--doc-typography-fontSize-lg);\n font-weight: var(--doc-typography-fontWeight-bold);\n color: var(--doc-color-text);\n }\n\n .doc-header-version {\n margin-left: var(--doc-spacing-sm);\n font-size: var(--doc-typography-fontSize-sm);\n color: var(--doc-color-textSecondary);\n background: var(--doc-color-backgroundTertiary);\n padding: 2px 6px;\n border-radius: 3px;\n }\n\n .doc-header-navigation {\n display: flex;\n gap: var(--doc-spacing-lg);\n }\n\n .doc-header-nav-item {\n color: var(--doc-color-text);\n text-decoration: none;\n padding: var(--doc-spacing-sm) var(--doc-spacing-md);\n border-radius: var(--doc-layout-borderRadius);\n transition: all 0.2s ease;\n }\n\n .doc-header-nav-item:hover {\n background: var(--doc-color-backgroundTertiary);\n color: var(--doc-color-primary);\n }\n\n .doc-header-nav-item.active {\n background: var(--doc-color-primary);\n color: white;\n }\n\n .doc-header-actions {\n display: flex;\n align-items: center;\n gap: var(--doc-spacing-sm);\n }\n\n .doc-header-action {\n padding: var(--doc-spacing-sm);\n background: none;\n border: none;\n color: var(--doc-color-textSecondary);\n cursor: pointer;\n border-radius: var(--doc-layout-borderRadius);\n transition: all 0.2s ease;\n text-decoration: none;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n .doc-header-action:hover {\n background: var(--doc-color-backgroundTertiary);\n color: var(--doc-color-primary);\n }\n `,\n\n // 导航组件\n navigation: `\n .doc-navigation {\n padding: var(--doc-spacing-md);\n }\n\n .doc-navigation-title {\n font-size: var(--doc-typography-fontSize-lg);\n font-weight: var(--doc-typography-fontWeight-bold);\n color: var(--doc-color-text);\n margin-bottom: var(--doc-spacing-lg);\n padding: 0 var(--doc-spacing-sm);\n }\n\n .doc-navigation-group {\n margin-bottom: var(--doc-spacing-lg);\n }\n\n .doc-navigation-group-title {\n font-size: var(--doc-typography-fontSize-sm);\n font-weight: var(--doc-typography-fontWeight-medium);\n color: var(--doc-color-textSecondary);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n margin-bottom: var(--doc-spacing-sm);\n padding: 0 var(--doc-spacing-sm);\n }\n\n .doc-navigation-item {\n display: block;\n padding: var(--doc-spacing-sm) var(--doc-spacing-md);\n color: var(--doc-color-text);\n text-decoration: none;\n border-radius: var(--doc-layout-borderRadius);\n transition: all 0.2s ease;\n margin-bottom: 2px;\n }\n\n .doc-navigation-item:hover {\n background: var(--doc-color-backgroundTertiary);\n color: var(--doc-color-primary);\n }\n\n .doc-navigation-item.active {\n background: var(--doc-color-primary);\n color: white;\n }\n `,\n\n // 内容区域\n content: `\n .doc-content {\n flex: 1;\n padding: var(--doc-spacing-lg);\n }\n\n .doc-content-container {\n max-width: var(--doc-layout-contentMaxWidth);\n margin: 0 auto;\n }\n\n .doc-content-loading {\n text-align: center;\n padding: var(--doc-spacing-4xl);\n color: var(--doc-color-textSecondary);\n }\n\n .doc-content-not-found {\n text-align: center;\n padding: var(--doc-spacing-4xl);\n }\n\n .doc-content-not-found h1 {\n font-size: var(--doc-typography-fontSize-3xl);\n color: var(--doc-color-text);\n margin-bottom: var(--doc-spacing-md);\n }\n\n .doc-content-not-found p {\n color: var(--doc-color-textSecondary);\n }\n\n .doc-component-page {\n padding: var(--doc-spacing-lg) 0;\n }\n\n .doc-component-header {\n margin-bottom: var(--doc-spacing-2xl);\n padding-bottom: var(--doc-spacing-lg);\n border-bottom: 1px solid var(--doc-color-border);\n }\n\n .doc-component-title {\n font-size: var(--doc-typography-fontSize-4xl);\n font-weight: var(--doc-typography-fontWeight-bold);\n color: var(--doc-color-text);\n margin-bottom: var(--doc-spacing-md);\n }\n\n .doc-component-description {\n font-size: var(--doc-typography-fontSize-lg);\n color: var(--doc-color-textSecondary);\n line-height: var(--doc-typography-lineHeight-relaxed);\n margin-bottom: var(--doc-spacing-md);\n }\n\n .doc-component-version {\n font-size: var(--doc-typography-fontSize-sm);\n color: var(--doc-color-textTertiary);\n }\n\n .doc-component-section-title {\n font-size: var(--doc-typography-fontSize-2xl);\n font-weight: var(--doc-typography-fontWeight-semibold);\n color: var(--doc-color-text);\n margin: var(--doc-spacing-2xl) 0 var(--doc-spacing-lg) 0;\n padding-bottom: var(--doc-spacing-sm);\n border-bottom: 1px solid var(--doc-color-borderSecondary);\n }\n `,\n\n // Demo组件\n demo: `\n .doc-demo {\n margin-bottom: var(--doc-spacing-2xl);\n border: 1px solid var(--doc-color-border);\n border-radius: var(--doc-layout-borderRadius);\n overflow: hidden;\n background: var(--doc-color-background);\n }\n\n .doc-demo-header {\n padding: var(--doc-spacing-lg);\n background: var(--doc-color-background);\n border-bottom: 1px solid var(--doc-color-borderSecondary);\n }\n\n .doc-demo-title {\n font-size: var(--doc-typography-fontSize-lg);\n font-weight: var(--doc-typography-fontWeight-medium);\n color: var(--doc-color-text);\n margin-bottom: var(--doc-spacing-sm);\n }\n\n .doc-demo-description {\n color: var(--doc-color-textSecondary);\n line-height: var(--doc-typography-lineHeight-relaxed);\n }\n\n .doc-demo-highlight {\n background: var(--doc-color-warning);\n color: var(--doc-color-background);\n padding: 2px 4px;\n border-radius: 3px;\n font-size: 0.9em;\n }\n\n .doc-demo-content {\n padding: var(--doc-spacing-xl);\n background: var(--doc-color-background);\n min-height: 100px;\n }\n\n .doc-demo-error {\n padding: var(--doc-spacing-lg);\n background: var(--doc-color-error);\n color: white;\n text-align: center;\n border-radius: var(--doc-layout-borderRadius);\n }\n\n .doc-demo-code {\n background: var(--doc-color-code-background);\n border-top: 1px solid var(--doc-color-border);\n }\n\n .doc-demo-actions {\n display: flex;\n justify-content: flex-end;\n gap: var(--doc-spacing-sm);\n padding: var(--doc-spacing-sm) var(--doc-spacing-md);\n background: var(--doc-color-backgroundTertiary);\n border-top: 1px solid var(--doc-color-border);\n }\n\n .doc-demo-action {\n padding: var(--doc-spacing-xs) var(--doc-spacing-sm);\n background: none;\n border: none;\n color: var(--doc-color-textSecondary);\n cursor: pointer;\n font-size: var(--doc-typography-fontSize-sm);\n transition: all 0.2s ease;\n border-radius: 3px;\n }\n\n .doc-demo-action:hover {\n color: var(--doc-color-primary);\n background: var(--doc-color-backgroundSecondary);\n }\n `,\n\n // API文档组件\n api: `\n .doc-api {\n margin-bottom: var(--doc-spacing-2xl);\n }\n\n .doc-api-header {\n margin-bottom: var(--doc-spacing-lg);\n }\n\n .doc-api-title {\n font-size: var(--doc-typography-fontSize-xl);\n font-weight: var(--doc-typography-fontWeight-semibold);\n color: var(--doc-color-text);\n margin-bottom: var(--doc-spacing-sm);\n }\n\n .doc-api-description {\n color: var(--doc-color-textSecondary);\n line-height: var(--doc-typography-lineHeight-relaxed);\n }\n\n .doc-api-table {\n border: 1px solid var(--doc-color-border);\n border-radius: var(--doc-layout-borderRadius);\n overflow: hidden;\n background: var(--doc-color-background);\n }\n\n .doc-api-table-header {\n display: grid;\n grid-template-columns: 1fr 1fr 2fr 1fr 1fr 80px;\n background: var(--doc-color-backgroundTertiary);\n border-bottom: 1px solid var(--doc-color-border);\n font-weight: var(--doc-typography-fontWeight-medium);\n }\n\n .doc-api-table-cell {\n padding: var(--doc-spacing-md);\n border-right: 1px solid var(--doc-color-borderSecondary);\n font-size: var(--doc-typography-fontSize-sm);\n }\n\n .doc-api-table-cell:last-child {\n border-right: none;\n }\n\n .doc-api-table-row {\n display: grid;\n grid-template-columns: 1fr 1fr 2fr 1fr 1fr 80px;\n border-bottom: 1px solid var(--doc-color-borderSecondary);\n }\n\n .doc-api-table-row:last-child {\n border-bottom: none;\n }\n\n .doc-api-table-row:hover {\n background: var(--doc-color-backgroundSecondary);\n }\n\n .doc-api-param-name {\n color: var(--doc-color-primary);\n font-family: var(--doc-typography-fontFamilyCode);\n font-size: 0.9em;\n }\n\n .doc-api-type {\n color: var(--doc-color-success);\n font-family: var(--doc-typography-fontFamilyCode);\n font-size: 0.9em;\n }\n\n .doc-api-option {\n color: var(--doc-color-warning);\n font-family: var(--doc-typography-fontFamilyCode);\n font-size: 0.9em;\n }\n\n .doc-api-default {\n color: var(--doc-color-textTertiary);\n font-family: var(--doc-typography-fontFamilyCode);\n font-size: 0.9em;\n }\n\n .doc-api-required-yes {\n color: var(--doc-color-error);\n font-weight: var(--doc-typography-fontWeight-medium);\n }\n\n .doc-api-required-no {\n color: var(--doc-color-textTertiary);\n }\n\n .doc-api-deprecated {\n background: var(--doc-color-error);\n color: white;\n font-size: 0.8em;\n padding: 2px 4px;\n border-radius: 3px;\n margin-left: var(--doc-spacing-xs);\n }\n\n .doc-api-highlight {\n background: var(--doc-color-warning);\n color: var(--doc-color-background);\n padding: 2px 4px;\n border-radius: 3px;\n font-size: 0.9em;\n }\n\n .doc-api-empty {\n padding: var(--doc-spacing-xl);\n text-align: center;\n color: var(--doc-color-textSecondary);\n background: var(--doc-color-backgroundSecondary);\n border-radius: var(--doc-layout-borderRadius);\n }\n `,\n // 首页组件\n home: `\n .doc-home {\n padding: var(--doc-spacing-2xl) 0;\n }\n\n .doc-home-welcome {\n text-align: center;\n margin-bottom: var(--doc-spacing-4xl);\n }\n\n .doc-home-title {\n font-size: var(--doc-typography-fontSize-4xl);\n font-weight: var(--doc-typography-fontWeight-bold);\n color: var(--doc-color-text);\n margin-bottom: var(--doc-spacing-lg);\n }\n\n .doc-home-description {\n font-size: var(--doc-typography-fontSize-lg);\n color: var(--doc-color-textSecondary);\n line-height: var(--doc-typography-lineHeight-relaxed);\n max-width: 600px;\n margin: 0 auto var(--doc-spacing-lg);\n }\n\n .doc-home-version {\n font-size: var(--doc-typography-fontSize-sm);\n color: var(--doc-color-textTertiary);\n }\n\n .doc-home-version code {\n background: var(--doc-color-backgroundTertiary);\n padding: 2px 6px;\n border-radius: 3px;\n font-family: var(--doc-typography-fontFamilyCode);\n }\n\n .doc-home-section {\n margin-bottom: var(--doc-spacing-4xl);\n }\n\n .doc-home-section-title {\n font-size: var(--doc-typography-fontSize-2xl);\n font-weight: var(--doc-typography-fontWeight-semibold);\n color: var(--doc-color-text);\n margin-bottom: var(--doc-spacing-lg);\n text-align: center;\n }\n\n .doc-home-code {\n background: var(--doc-color-code-background);\n border: 1px solid var(--doc-color-border);\n border-radius: var(--doc-layout-borderRadius);\n padding: var(--doc-spacing-lg);\n font-family: var(--doc-typography-fontFamilyCode);\n font-size: var(--doc-typography-fontSize-sm);\n overflow-x: auto;\n }\n\n .doc-home-features {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));\n gap: var(--doc-spacing-xl);\n margin-top: var(--doc-spacing-lg);\n }\n\n .doc-home-feature {\n text-align: center;\n padding: var(--doc-spacing-lg);\n }\n\n .doc-home-feature-icon {\n font-size: var(--doc-typography-fontSize-3xl);\n margin-bottom: var(--doc-spacing-md);\n }\n\n .doc-home-feature-title {\n font-size: var(--doc-typography-fontSize-lg);\n font-weight: var(--doc-typography-fontWeight-medium);\n color: var(--doc-color-text);\n margin-bottom: var(--doc-spacing-sm);\n }\n\n .doc-home-feature-description {\n color: var(--doc-color-textSecondary);\n line-height: var(--doc-typography-lineHeight-relaxed);\n }\n\n .doc-home-components {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));\n gap: var(--doc-spacing-lg);\n margin-top: var(--doc-spacing-lg);\n }\n\n .doc-home-component-card {\n background: var(--doc-color-background);\n border: 1px solid var(--doc-color-border);\n border-radius: var(--doc-layout-borderRadius);\n padding: var(--doc-spacing-lg);\n transition: all 0.2s ease;\n }\n\n .doc-home-component-card:hover {\n box-shadow: var(--doc-layout-boxShadow);\n border-color: var(--doc-color-primary);\n }\n\n .doc-home-component-title a {\n color: var(--doc-color-text);\n text-decoration: none;\n font-weight: var(--doc-typography-fontWeight-medium);\n font-size: var(--doc-typography-fontSize-lg);\n }\n\n .doc-home-component-title a:hover {\n color: var(--doc-color-primary);\n }\n\n .doc-home-component-description {\n color: var(--doc-color-textSecondary);\n margin: var(--doc-spacing-sm) 0;\n line-height: var(--doc-typography-lineHeight-relaxed);\n }\n\n .doc-home-component-meta {\n display: flex;\n justify-content: space-between;\n align-items: center;\n font-size: var(--doc-typography-fontSize-sm);\n color: var(--doc-color-textTertiary);\n margin-top: var(--doc-spacing-md);\n }\n `\n }\n};\n","/**\n * 主题管理器\n * 负责管理文档站点的主题系统\n */\n\nimport defaultTheme from '../themes/default';\nimport type { Theme } from '../types';\n\nexport default class ThemeManager {\n private configManager: any;\n private themes: Map<string, Theme>;\n private currentTheme: Theme | null;\n private styleElement: HTMLStyleElement | null;\n\n constructor(configManager: any) {\n this.configManager = configManager;\n this.themes = new Map();\n this.currentTheme = null;\n this.styleElement = null;\n\n // 注册默认主题\n this.registerTheme('default', defaultTheme);\n\n // 初始化主题\n this.initialize();\n }\n\n /**\n * 初始化主题管理器\n */\n initialize() {\n const themeConfig = this.configManager.get('theme', {});\n const themeName = themeConfig.name || 'default';\n \n this.setTheme(themeName, themeConfig);\n }\n\n /**\n * 注册主题\n * @param {string} name - 主题名称\n * @param {Object} theme - 主题对象\n */\n registerTheme(name, theme) {\n this.themes.set(name, theme);\n }\n\n /**\n * 设置当前主题\n * @param {string|Object} theme - 主题名称或主题对象\n * @param {Object} customConfig - 自定义配置\n */\n setTheme(theme, customConfig = {}) {\n let themeData;\n\n if (typeof theme === 'string') {\n // 通过名称获取主题\n themeData = this.themes.get(theme);\n if (!themeData) {\n console.warn(`Theme \"${theme}\" not found, using default theme`);\n themeData = this.themes.get('default');\n }\n } else if (typeof theme === 'object') {\n // 直接使用主题对象\n themeData = theme;\n } else {\n console.warn('Invalid theme type, using default theme');\n themeData = this.themes.get('default');\n }\n\n // 合并自定义配置\n this.currentTheme = this.mergeTheme(themeData, customConfig);\n \n // 应用主题样式\n this.applyTheme();\n }\n\n /**\n * 合并主题配置\n * @param {Object} baseTheme - 基础主题\n * @param {Object} customConfig - 自定义配置\n * @returns {Object} 合并后的主题\n */\n mergeTheme(baseTheme, customConfig) {\n return {\n ...baseTheme,\n colors: {\n ...baseTheme.colors,\n ...customConfig.colors\n },\n typography: {\n ...baseTheme.typography,\n ...customConfig.typography\n },\n spacing: {\n ...baseTheme.spacing,\n ...customConfig.spacing\n },\n layout: {\n ...baseTheme.layout,\n ...customConfig.layout\n },\n components: {\n ...baseTheme.components,\n ...customConfig.components\n }\n };\n }\n\n /**\n * 应用主题样式\n */\n applyTheme() {\n if (!this.currentTheme) {\n return;\n }\n\n // 移除旧的样式\n if (this.styleElement) {\n this.styleElement.remove();\n }\n\n // 生成CSS变量\n const cssVariables = this.generateCSSVariables();\n \n // 生成主题样式\n const themeStyles = this.generateThemeStyles();\n \n // 创建样式元素\n this.styleElement = document.createElement('style');\n this.styleElement.setAttribute('data-doc-render-sdk-theme', 'true');\n this.styleElement.textContent = `\n :root {\n ${cssVariables}\n }\n \n ${themeStyles}\n `;\n \n // 插入到head中\n document.head.appendChild(this.styleElement);\n }\n\n /**\n * 生成CSS变量\n * @returns {string} CSS变量字符串\n */\n generateCSSVariables() {\n const { colors, typography, spacing, layout } = this.currentTheme!;\n const variables: string[] = [];\n\n // 颜色变量\n if (colors) {\n Object.entries(colors).forEach(([key, value]) => {\n if (typeof value === 'object') {\n Object.entries(value).forEach(([subKey, subValue]) => {\n variables.push(`--doc-color-${key}-${subKey}: ${subValue};`);\n });\n } else {\n variables.push(`--doc-color-${key}: ${value};`);\n }\n });\n }\n\n // 字体变量\n if (typography) {\n Object.entries(typography).forEach(([key, value]) => {\n if (typeof value === 'object') {\n Object.entries(value).forEach(([subKey, subValue]) => {\n variables.push(`--doc-typography-${key}-${subKey}: ${subValue};`);\n });\n } else {\n variables.push(`--doc-typography-${key}: ${value};`);\n }\n });\n }\n\n // 间距变量\n if (spacing) {\n Object.entries(spacing).forEach(([key, value]) => {\n variables.push(`--doc-spacing-${key}: ${value};`);\n });\n }\n\n // 布局变量\n if (layout) {\n Object.entries(layout).forEach(([key, value]) => {\n variables.push(`--doc-layout-${key}: ${value};`);\n });\n }\n\n return variables.join('\\n ');\n }\n\n /**\n * 生成主题样式\n * @returns {string} 主题样式字符串\n */\n generateThemeStyles() {\n const { components } = this.currentTheme!;\n const styles: string[] = [];\n\n // 基础样式\n styles.push(`\n .doc-render-sdk-container {\n font-family: var(--doc-typography-fontFamily, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif);\n font-size: var(--doc-typography-fontSize, 14px);\n line-height: var(--doc-typography-lineHeight, 1.5);\n color: var(--doc-color-text, #333);\n background-color: var(--doc-color-background, #fff);\n }\n `);\n\n // 组件样式\n if (components) {\n Object.entries(components).forEach(([componentName, componentStyles]) => {\n if (typeof componentStyles === 'string') {\n styles.push(componentStyles);\n } else if (typeof componentStyles === 'object') {\n // 将对象转换为CSS\n const cssRules = this.objectToCSS(componentStyles, `.doc-${componentName}`);\n styles.push(cssRules);\n }\n });\n }\n\n return styles.join('\\n');\n }\n\n /**\n * 将对象转换为CSS规则\n * @param {Object} obj - 样式对象\n * @param {string} selector - CSS选择器\n * @returns {string} CSS规则字符串\n */\n objectToCSS(obj, selector) {\n const rules: string[] = [];\n \n Object.entries(obj).forEach(([key, value]) => {\n if (typeof value === 'object') {\n // 嵌套选择器\n const nestedSelector = key.startsWith('&') \n ? key.replace('&', selector)\n : `${selector} ${key}`;\n rules.push(this.objectToCSS(value, nestedSelector));\n } else {\n // CSS属性\n const cssProperty = key.replace(/([A-Z])/g, '-$1').toLowerCase();\n rules.push(`${cssProperty}: ${value};`);\n }\n });\n\n return `${selector} {\\n ${rules.join('\\n ')}\\n}`;\n }\n\n /**\n * 获取当前主题\n * @returns {Object} 当前主题对象\n */\n getCurrentTheme() {\n return this.currentTheme;\n }\n\n /**\n * 获取主题变量值\n * @param {string} path - 变量路径\n * @param {*} defaultValue - 默认值\n * @returns {*} 变量值\n */\n getThemeValue(path, defaultValue) {\n const keys = path.split('.');\n let value = this.currentTheme;\n \n for (const key of keys) {\n if (value && typeof value === 'object' && key in value) {\n value = value[key];\n } else {\n return defaultValue;\n }\n }\n \n return value;\n }\n\n /**\n * 获取所有注册的主题\n * @returns {Array} 主题名称数组\n */\n getAvailableThemes() {\n return Array.from(this.themes.keys());\n }\n\n /**\n * 销毁主题管理器\n */\n destroy() {\n if (this.styleElement) {\n this.styleElement.remove();\n this.styleElement = null;\n }\n this.themes.clear();\n this.currentTheme = null;\n }\n}\n","/**\n * 插件管理器\n * 负责管理文档站点的插件系统\n */\n\nexport default class PluginManager {\n configManager: any;\n plugins: Map<any, any>;\n hooks: Map<any, any>;\n renderer: any;\n constructor(configManager) {\n this.configManager = configManager;\n this.plugins = new Map();\n this.hooks = new Map();\n this.renderer = null;\n }\n\n /**\n * 初始化插件管理器\n * @param {DocRenderer} renderer - 文档渲染器实例\n */\n initialize(renderer) {\n this.renderer = renderer;\n \n // 加载配置中的插件\n const pluginConfigs = this.configManager.get('plugins', []);\n pluginConfigs.forEach(pluginConfig => {\n this.loadPlugin(pluginConfig);\n });\n }\n\n /**\n * 注册插件\n * @param {Object} plugin - 插件对象\n * @returns {boolean} 注册是否成功\n */\n register(plugin) {\n try {\n // 验证插件\n if (!this.validatePlugin(plugin)) {\n return false;\n }\n\n const { name, version = '1.0.0' } = plugin;\n \n // 检查插件是否已存在\n if (this.plugins.has(name)) {\n console.warn(`Plugin \"${name}\" already registered`);\n return false;\n }\n\n // 存储插件\n this.plugins.set(name, {\n ...plugin,\n version,\n status: 'registered'\n });\n\n // 如果渲染器已初始化,立即激活插件\n if (this.renderer) {\n this.activatePlugin(name);\n }\n\n return true;\n } catch (error) {\n console.error(`Failed to register plugin:`, error);\n return false;\n }\n }\n\n /**\n * 加载插件\n * @param {Object|string} pluginConfig - 插件配置或插件名称\n */\n async loadPlugin(pluginConfig) {\n try {\n let plugin;\n\n if (typeof pluginConfig === 'string') {\n // 通过名称加载插件\n plugin = await this.loadPluginByName(pluginConfig);\n } else if (typeof pluginConfig === 'object') {\n if (pluginConfig.name && !pluginConfig.install) {\n // 配置对象,需要加载插件\n plugin = await this.loadPluginByName(pluginConfig.name);\n plugin.config = pluginConfig.config || {};\n } else {\n // 直接的插件对象\n plugin = pluginConfig;\n }\n }\n\n if (plugin) {\n this.register(plugin);\n }\n } catch (error) {\n console.error(`Failed to load plugin:`, error);\n }\n }\n\n /**\n * 通过名称加载插件\n * @param {string} name - 插件名称\n * @returns {Object} 插件对象\n */\n async loadPluginByName(name) {\n // 尝试从全局注册的插件中获取\n // @ts-expect-error\n const globalPlugin = window.__DOC_SDK_PLUGINS__?.[name];\n if (globalPlugin) {\n return globalPlugin;\n }\n\n // 尝试动态导入 (暂时禁用以避免构建错误)\n // try {\n // const module = await import(`../plugins/${name}`);\n // return module.default || module;\n // } catch (error) {\n // throw new Error(`Plugin \"${name}\" not found`);\n // }\n\n throw new Error(`Plugin \"${name}\" not found`);\n }\n\n /**\n * 激活插件\n * @param {string} name - 插件名称\n */\n activatePlugin(name) {\n const plugin = this.plugins.get(name);\n if (!plugin || plugin.status === 'active') {\n return;\n }\n\n try {\n // 创建插件上下文\n const context = this.createPluginContext(plugin);\n\n // 调用插件的install方法\n if (typeof plugin.install === 'function') {\n plugin.install(context);\n }\n\n // 更新插件状态\n plugin.status = 'active';\n \n console.log(`Plugin \"${name}\" activated`);\n } catch (error) {\n console.error(`Failed to activate plugin \"${name}\":`, error);\n plugin.status = 'error';\n }\n }\n\n /**\n * 停用插件\n * @param {string} name - 插件名称\n */\n deactivatePlugin(name) {\n const plugin = this.plugins.get(name);\n if (!plugin || plugin.status !== 'active') {\n return;\n }\n\n try {\n // 调用插件的uninstall方法\n if (typeof plugin.uninstall === 'function') {\n plugin.uninstall();\n }\n\n // 移除插件注册的钩子\n this.removePluginHooks(name);\n\n // 更新插件状态\n plugin.status = 'inactive';\n \n console.log(`Plugin \"${name}\" deactivated`);\n } catch (error) {\n console.error(`Failed to deactivate plugin \"${name}\":`, error);\n }\n }\n\n /**\n * 创建插件上下文\n * @param {Object} plugin - 插件对象\n * @returns {Object} 插件上下文\n */\n createPluginContext(plugin) {\n return {\n // 插件信息\n plugin: {\n name: plugin.name,\n version: plugin.version,\n config: plugin.config || {}\n },\n \n // 渲染器实例\n renderer: this.renderer,\n \n // 配置管理器\n config: this.configManager,\n \n // 主题管理器\n theme: this.renderer?.themeManager,\n \n // 组件注册表\n components: this.renderer.componentRegistry,\n \n // 路由管理器\n router: this.renderer.routerManager,\n \n // 钩子系统\n hooks: {\n add: this.addHook.bind(this),\n remove: this.removeHook.bind(this),\n call: this.callHook.bind(this)\n },\n \n // 事件系统\n events: {\n on: this.renderer.on.bind(this.renderer),\n off: this.renderer.off.bind(this.renderer),\n emit: this.renderer.emit.bind(this.renderer)\n }\n };\n }\n\n /**\n * 添加钩子\n * @param {string} hookName - 钩子名称\n * @param {Function} handler - 处理函数\n * @param {string} pluginName - 插件名称\n */\n addHook(hookName, handler, pluginName) {\n if (!this.hooks.has(hookName)) {\n this.hooks.set(hookName, []);\n }\n \n this.hooks.get(hookName).push({\n handler,\n plugin: pluginName\n });\n }\n\n /**\n * 移除钩子\n * @param {string} hookName - 钩子名称\n * @param {Function} handler - 处理函数\n */\n removeHook(hookName, handler) {\n const hooks = this.hooks.get(hookName);\n if (hooks) {\n const index = hooks.findIndex(hook => hook.handler === handler);\n if (index !== -1) {\n hooks.splice(index, 1);\n }\n }\n }\n\n /**\n * 移除插件的所有钩子\n * @param {string} pluginName - 插件名称\n */\n removePluginHooks(pluginName) {\n this.hooks.forEach((hooks, hookName) => {\n const filteredHooks = hooks.filter(hook => hook.plugin !== pluginName);\n this.hooks.set(hookName, filteredHooks);\n });\n }\n\n /**\n * 调用钩子\n * @param {string} hookName - 钩子名称\n * @param {...any} args - 参数\n * @returns {Array} 钩子返回值数组\n */\n callHook(hookName, ...args) {\n const hooks = this.hooks.get(hookName);\n if (!hooks || hooks.length === 0) {\n return [];\n }\n\n const results: any[] = [];\n hooks.forEach(({ handler, plugin }) => {\n try {\n const result = handler(...args);\n results.push(result);\n } catch (error) {\n console.error(`Hook \"${hookName}\" error in plugin \"${plugin}\":`, error);\n }\n });\n\n return results;\n }\n\n /**\n * 验证插件\n * @param {Object} plugin - 插件对象\n * @returns {boolean} 是否有效\n */\n validatePlugin(plugin) {\n if (!plugin || typeof plugin !== 'object') {\n console.error('Plugin must be an object');\n return false;\n }\n\n if (!plugin.name || typeof plugin.name !== 'string') {\n console.error('Plugin must have a name');\n return false;\n }\n\n if (!plugin.install || typeof plugin.install !== 'function') {\n console.error('Plugin must have an install function');\n return false;\n }\n\n return true;\n }\n\n /**\n * 获取插件信息\n * @param {string} name - 插件名称\n * @returns {Object|null} 插件信息\n */\n getPlugin(name) {\n return this.plugins.get(name) || null;\n }\n\n /**\n * 获取所有插件\n * @returns {Array} 插件数组\n */\n getPlugins() {\n return Array.from(this.plugins.values());\n }\n\n /**\n * 获取活跃插件\n * @returns {Array} 活跃插件数组\n */\n getActivePlugins() {\n return this.getPlugins().filter(plugin => plugin.status === 'active');\n }\n\n /**\n * 销毁插件管理器\n */\n destroy() {\n // 停用所有插件\n this.plugins.forEach((plugin, name) => {\n if (plugin.status === 'active') {\n this.deactivatePlugin(name);\n }\n });\n\n this.plugins.clear();\n this.hooks.clear();\n this.renderer = null;\n }\n}\n","/**\n * 文档渲染SDK入口文件\n * @author Doc SDK Team\n */\n\nimport DocRenderer from './core/DocRenderer';\nimport ConfigManager from './core/ConfigManager';\nimport ThemeManager from './core/ThemeManager';\nimport PluginManager from './core/PluginManager';\nimport type { DocConfig, Plugin, Theme } from './types';\n\n// 导出核心类\nexport { DocRenderer, ConfigManager, ThemeManager, PluginManager };\n\n// 导出组件\nexport { default as Layout } from './components/Layout';\nexport { default as Navigation } from './components/Navigation';\nexport { default as Demo } from './components/Demo';\nexport { default as ApiDoc } from './components/ApiDoc';\nexport { default as CodeBlock } from './components/CodeBlock';\n\n// 导出插件\nexport * from './plugin';\n\n// 导出类型\nexport type * from './types';\n\n// 默认导出主类\nexport default class DocSDK {\n private configManager: ConfigManager;\n private themeManager: ThemeManager;\n private pluginManager: PluginManager;\n private renderer: DocRenderer;\n\n constructor(config: Partial<DocConfig> = {}) {\n this.configManager = new ConfigManager(config);\n this.themeManager = new ThemeManager(this.configManager);\n this.pluginManager = new PluginManager(this.configManager);\n this.renderer = new DocRenderer({\n configManager: this.configManager,\n themeManager: this.themeManager,\n pluginManager: this.pluginManager\n });\n }\n\n /**\n * 渲染文档到指定容器\n */\n async render(target: string | HTMLElement): Promise<void> {\n await this.renderer.render(target);\n }\n\n /**\n * 销毁文档实例\n */\n destroy(): void {\n this.renderer.destroy();\n }\n\n /**\n * 更新配置\n */\n updateConfig(config: Partial<DocConfig>): void {\n this.configManager.update(config);\n this.renderer.update();\n }\n\n /**\n * 注册插件\n */\n use(plugin: Plugin): this {\n this.pluginManager.register(plugin);\n return this;\n }\n\n /**\n * 设置主题\n */\n setTheme(theme: Theme | string): void {\n this.themeManager.setTheme(theme);\n this.renderer.update();\n }\n\n /**\n * 获取当前配置\n */\n getConfig(): DocConfig {\n return this.configManager.getConfig();\n }\n\n /**\n * 监听事件\n */\n on(event: string, handler: Function): void {\n // TODO: 实现事件监听\n }\n\n /**\n * 移除事件监听\n */\n off(event: string, handler: Function): void {\n // TODO: 实现事件移除\n }\n\n /**\n * 触发事件\n */\n emit(event: string, data?: any): void {\n // TODO: 实现事件触发\n }\n}"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","names":["CodeBlock","Home","Demo","ApiDoc","Header","Navigation","Content","Footer","Layout","defaultConfig: DocConfig","userConfig: Partial<DocConfig>","defaultConfig","defaultConfig: DocConfig","path?: string","defaultValue?: any","path: string","value: any","newConfig: Partial<DocConfig>","listener: (config: DocConfig) => void","newValue: any","oldValue: any","warnings: string[]","configManager: any","defaultTheme","variables: string[]","styles: string[]","rules: string[]","results: any[]","config: Partial<DocConfig>","target: string | HTMLElement","plugin: Plugin","theme: Theme | string","event: string","handler: Function","data?: any"],"sources":["../src/components/Navigation.tsx","../src/components/Header.tsx","../src/components/CodeBlock.tsx","../src/components/Demo.tsx","../src/components/ApiDoc.tsx","../src/components/Home.tsx","../src/components/Content.tsx","../src/components/Footer.tsx","../src/components/Layout.tsx","../src/core/RouterManager.ts","../src/core/ComponentRegistry.ts","../src/core/DocRenderer.ts","../src/config/default.ts","../src/core/ConfigManager.ts","../src/themes/default.ts","../src/core/ThemeManager.ts","../src/core/PluginManager.ts","../src/index.ts"],"sourcesContent":["/**\n * 导航组件\n */\n\nimport React, { useMemo } from 'react';\n\nconst Navigation = ({ \n config, \n theme, \n currentRoute, \n componentRegistry, \n onNavigate,\n compact = false \n}) => {\n // 生成导航菜单\n const navigationItems = useMemo(() => {\n const navigationConfig = config.navigation || {};\n const { mode = 'auto', groups = [], showHome = true } = navigationConfig;\n\n const items = [];\n\n // 添加首页\n if (showHome) {\n items.push({\n id: 'home',\n label: navigationConfig.homeTitle || '首页',\n path: '/',\n type: 'home'\n });\n }\n\n if (mode === 'manual' && groups.length > 0) {\n // 手动配置模式\n groups.forEach(group => {\n items.push({\n id: group.id,\n label: group.label,\n type: 'group',\n children: group.items || []\n });\n });\n } else {\n // 自动生成模式\n const components = componentRegistry.getComponentIds();\n \n if (components.length > 0) {\n // 按组件分组\n const componentGroup = {\n id: 'components',\n label: '组件',\n type: 'group',\n children: components.map(componentId => {\n const componentConfig = componentRegistry.getComponent(componentId);\n return {\n id: componentId,\n label: componentConfig?.label || componentId,\n path: `/${componentId}`,\n type: 'component'\n };\n })\n };\n \n items.push(componentGroup);\n }\n }\n\n return items;\n }, [config, componentRegistry]);\n\n const handleItemClick = (item) => {\n if (item.path && onNavigate) {\n onNavigate(item.path);\n }\n };\n\n const isItemActive = (item) => {\n if (!currentRoute) return false;\n \n if (item.type === 'home') {\n return currentRoute.path === '/';\n }\n \n if (item.type === 'component') {\n return currentRoute.path === item.path;\n }\n \n return false;\n };\n\n const renderNavigationItem = (item, level = 0) => {\n const isActive = isItemActive(item);\n const hasChildren = item.children && item.children.length > 0;\n \n if (item.type === 'group') {\n return (\n <div key={item.id} className=\"doc-navigation-group\">\n {!compact && (\n <div className=\"doc-navigation-group-title\">\n {item.label}\n </div>\n )}\n {hasChildren && (\n <div className=\"doc-navigation-group-items\">\n {item.children.map(child => renderNavigationItem(child, level + 1))}\n </div>\n )}\n </div>\n );\n }\n\n return (\n <a\n key={item.id}\n className={`doc-navigation-item ${isActive ? 'active' : ''} ${compact ? 'compact' : ''}`}\n onClick={(e) => {\n e.preventDefault();\n handleItemClick(item);\n }}\n href={item.path || '#'}\n style={{ paddingLeft: `${16 + level * 16}px` }}\n >\n {item.icon && (\n <span className=\"doc-navigation-item-icon\">\n {item.icon}\n </span>\n )}\n <span className=\"doc-navigation-item-label\">\n {item.label}\n </span>\n {item.badge && (\n <span className=\"doc-navigation-item-badge\">\n {item.badge}\n </span>\n )}\n </a>\n );\n };\n\n return (\n <nav className={`doc-navigation ${compact ? 'compact' : ''}`}>\n {!compact && config.title && (\n <div className=\"doc-navigation-title\">\n {config.title}\n </div>\n )}\n \n <div className=\"doc-navigation-items\">\n {navigationItems.map(item => renderNavigationItem(item))}\n </div>\n </nav>\n );\n};\n\nexport default Navigation;\n","/**\n * 头部组件\n */\n\nimport React, { useState } from 'react';\n\nconst Header = ({ \n config, \n theme, \n currentRoute,\n sidebarCollapsed,\n onSidebarToggle,\n showNavigation = false,\n componentRegistry,\n onNavigate\n}) => {\n \n const headerConfig = config.layout?.header || {};\n\n const renderLogo = () => {\n if (!headerConfig.showLogo) return null;\n\n return (\n <div className=\"doc-header-logo\">\n {config.logo ? (\n <img src={config.logo} alt={config.title} />\n ) : (\n <div className=\"doc-header-logo-placeholder\">\n 📚\n </div>\n )}\n </div>\n );\n };\n\n const renderTitle = () => {\n if (!headerConfig.showTitle || !config.title) return null;\n\n return (\n <div className=\"doc-header-title\">\n {config.title}\n {config.version && (\n <span className=\"doc-header-version\">\n v{config.version}\n </span>\n )}\n </div>\n );\n };\n\n const renderNavigation = () => {\n if (!showNavigation || !componentRegistry) return null;\n\n const components = componentRegistry.getComponentIds();\n \n return (\n <nav className=\"doc-header-navigation\">\n <a \n className={`doc-header-nav-item ${currentRoute?.path === '/' ? 'active' : ''}`}\n onClick={(e) => {\n e.preventDefault();\n onNavigate?.('/');\n }}\n href=\"/\"\n >\n 首页\n </a>\n \n {components.map(componentId => {\n const componentConfig = componentRegistry.getComponent(componentId);\n const path = `/${componentId}`;\n const isActive = currentRoute?.path === path;\n \n return (\n <a\n key={componentId}\n className={`doc-header-nav-item ${isActive ? 'active' : ''}`}\n onClick={(e) => {\n e.preventDefault();\n onNavigate?.(path);\n }}\n href={path}\n >\n {componentConfig?.label || componentId}\n </a>\n );\n })}\n </nav>\n );\n };\n\n const renderActions = () => {\n return (\n <div className=\"doc-header-actions\">\n {/* 侧边栏切换按钮 */}\n {onSidebarToggle && (\n <button\n className=\"doc-header-action doc-header-sidebar-toggle\"\n onClick={onSidebarToggle}\n title={sidebarCollapsed ? '展开侧边栏' : '收起侧边栏'}\n >\n {sidebarCollapsed ? '☰' : '✕'}\n </button>\n )}\n\n {/* GitHub链接 */}\n {config.github && (\n <a\n className=\"doc-header-action doc-header-github\"\n href={config.github}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n title=\"GitHub\"\n >\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z\"/>\n </svg>\n </a>\n )}\n </div>\n );\n };\n\n return (\n <>\n <header className=\"doc-header\">\n <div className=\"doc-header-content\">\n <div className=\"doc-header-left\">\n {renderLogo()}\n {renderTitle()}\n </div>\n\n {renderNavigation()}\n\n <div className=\"doc-header-right\">\n {renderActions()}\n </div>\n </div>\n </header>\n </>\n );\n};\n\nexport default Header;\n","/**\n * 代码块组件\n */\n\nimport React, { useEffect, useRef, useState, useCallback } from 'react';\nimport { EditorState } from '@codemirror/state';\nimport { EditorView, keymap, lineNumbers, highlightActiveLineGutter, highlightActiveLine } from '@codemirror/view';\nimport { javascript } from '@codemirror/lang-javascript';\nimport { oneDark } from '@codemirror/theme-one-dark';\nimport { defaultKeymap, indentWithTab } from '@codemirror/commands';\n\nconst CodeBlock = ({ \n code, \n language = 'javascript', \n theme, \n showLineNumbers = false,\n highlightLines = [],\n className = '',\n onChange,\n // editable = true\n}: {\n code: string;\n language?: string;\n theme?: any;\n showLineNumbers?: boolean;\n highlightLines?: number[];\n className?: string;\n onChange?: (code: string) => void;\n // editable?: boolean;\n}) => {\n const editable = false;\n const containerRef = useRef<HTMLDivElement | null>(null);\n const editorRef = useRef<EditorView | null>(null);\n const [internalCode, setInternalCode] = useState(code);\n\n // 处理代码变化的回调\n const handleCodeChange = useCallback((newCode) => {\n setInternalCode(newCode);\n if (onChange) {\n onChange(newCode);\n }\n }, [onChange]);\n\n useEffect(() => {\n if (!containerRef.current) return;\n\n // 初始化编辑器状态\n const startState = EditorState.create({\n doc: internalCode,\n extensions: [\n lineNumbers(),\n highlightActiveLineGutter(),\n highlightActiveLine(),\n javascript(),\n oneDark,\n keymap.of([...defaultKeymap, indentWithTab]),\n EditorView.updateListener.of((update) => {\n if (update.docChanged) {\n handleCodeChange(update.state.doc.toString());\n }\n }),\n EditorView.lineWrapping,\n EditorView.editable.of(editable),\n // 自定义样式\n EditorView.theme({\n '&': {\n height: '100%',\n fontSize: '14px',\n lineHeight: '1.5'\n },\n '.cm-content': {\n fontFamily: '\"Fira Code\", \"Consolas\", monospace'\n },\n '.cm-gutters': {\n borderRight: '1px solid #333'\n }\n })\n ]\n });\n\n // 创建编辑器视图\n const view = new EditorView({\n state: startState,\n parent: containerRef.current\n });\n\n editorRef.current = view;\n\n // 清理函数\n return () => {\n view.destroy();\n };\n }, [internalCode, editable, handleCodeChange]);\n\n // 当外部code prop变化时,更新编辑器内容\n useEffect(() => {\n if (code !== internalCode && editorRef.current) {\n editorRef.current.dispatch({\n changes: {\n from: 0,\n to: editorRef.current.state.doc.length,\n insert: code\n }\n });\n setInternalCode(code);\n }\n }, [code]);\n\n return (\n <div className={`doc-code-block ${className}`}>\n <div className=\"doc-code-header\">\n <span className=\"doc-code-language\">{language}</span>\n {editable && <span className=\"doc-code-edit-mode\">编辑模式</span>}\n </div>\n \n <div className=\"doc-code-body\" style={{ position: 'relative', height: '100%' }}>\n <div ref={containerRef} style={{ height: '100%' }} />\n </div>\n </div>\n );\n};\n\nexport default CodeBlock;\n","/**\n * Demo展示组件\n */\n\nimport React, { useState, useRef, useEffect } from 'react';\nimport CodeBlock from './CodeBlock';\n\nconst Demo = ({ \n demo, \n componentId, \n config, \n theme, \n renderer \n}) => {\n const [codeVisible, setCodeVisible] = useState(false);\n const [copied, setCopied] = useState(false);\n const demoRef = useRef(null);\n \n const demoConfig = config.demo || {};\n const { \n showCode = true, \n codeCollapsed = true, \n showCopyButton = true, \n showExpandButton = true \n } = demoConfig;\n\n useEffect(() => {\n // 初始化代码显示状态\n setCodeVisible(!codeCollapsed);\n }, [codeCollapsed]);\n\n const handleCodeToggle = () => {\n setCodeVisible(!codeVisible);\n };\n\n const handleCopyCode = async () => {\n if (!demo.code) return;\n\n try {\n await navigator.clipboard.writeText(demo.code);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n } catch (error) {\n console.error('Failed to copy code:', error);\n }\n };\n\n const renderDemo = () => {\n if (!demo.component) {\n return (\n <div className=\"doc-demo-error\">\n <p>Demo组件加载失败</p>\n </div>\n );\n }\n\n try {\n const DemoComponent = demo.component;\n return <DemoComponent />;\n } catch (error) {\n console.error('Demo render error:', error);\n return (\n <div className=\"doc-demo-error\">\n <p>Demo渲染出错: {error.message}</p>\n </div>\n );\n }\n };\n\n const renderDescription = () => {\n if (!demo.desc) return null;\n\n // 支持HTML描述\n if (demo.descFlag === false) {\n return <div className=\"doc-demo-description\">{demo.desc}</div>;\n }\n\n // 支持样式化文本({} 包围的内容会被样式化)\n const styledDesc = demo.desc.replace(\n /{([^}]+)}/g, \n '<span class=\"doc-demo-highlight\">$1</span>'\n );\n\n return (\n <div \n className=\"doc-demo-description\"\n dangerouslySetInnerHTML={{ __html: styledDesc }}\n />\n );\n };\n\n return (\n <div className=\"doc-demo\" data-demo={demo.source}>\n {/* Demo 标题和描述 */}\n <div className=\"doc-demo-header\">\n <h3 className=\"doc-demo-title\">{demo.title}</h3>\n {renderDescription()}\n </div>\n\n {/* Demo 内容 */}\n <div className=\"doc-demo-content\" ref={demoRef}>\n {renderDemo()}\n </div>\n\n {/* 代码展示 */}\n {showCode && demo.code && (\n <>\n {codeVisible && (\n <div className=\"doc-demo-code\">\n <CodeBlock\n code={demo.code}\n language=\"jsx\"\n theme={theme}\n showLineNumbers={true}\n />\n </div>\n )}\n\n {/* 操作按钮 */}\n <div className=\"doc-demo-actions\">\n {showCopyButton && (\n <button\n className=\"doc-demo-action\"\n onClick={handleCopyCode}\n title=\"复制代码\"\n >\n {copied ? '已复制' : '复制代码'}\n </button>\n )}\n\n {showExpandButton && (\n <button\n className=\"doc-demo-action\"\n onClick={handleCodeToggle}\n title={codeVisible ? '隐藏代码' : '显示代码'}\n >\n {codeVisible ? '隐藏代码' : '显示代码'}\n </button>\n )}\n\n {/* 在新窗口打开 */}\n <button\n className=\"doc-demo-action\"\n onClick={() => {\n // 触发事件,让外部处理\n renderer?.emit('demo.openInNewWindow', {\n componentId,\n demo\n });\n }}\n title=\"在新窗口打开\"\n >\n 新窗口打开\n </button>\n </div>\n </>\n )}\n </div>\n );\n};\n\nexport default Demo;\n","/**\n * API文档组件\n */\n\nimport React from 'react';\n\nconst ApiDoc = ({ \n api, \n componentId, \n config, \n theme \n}) => {\n const apiConfig = config.api || {};\n const { \n showRequired = true, \n showType = true, \n showDefault = true, \n showDescription = true \n } = apiConfig;\n\n const renderApiTable = () => {\n if (!api.data || !Array.isArray(api.data) || api.data.length === 0) {\n return (\n <div className=\"doc-api-empty\">\n <p>暂无API文档</p>\n </div>\n );\n }\n\n return (\n <div className=\"doc-api-table\">\n <div className=\"doc-api-table-header\">\n <div className=\"doc-api-table-cell doc-api-table-param\">参数</div>\n {showType && (\n <div className=\"doc-api-table-cell doc-api-table-type\">类型</div>\n )}\n {showDescription && (\n <div className=\"doc-api-table-cell doc-api-table-description\">说明</div>\n )}\n <div className=\"doc-api-table-cell doc-api-table-option\">可选值</div>\n {showDefault && (\n <div className=\"doc-api-table-cell doc-api-table-default\">默认值</div>\n )}\n {showRequired && (\n <div className=\"doc-api-table-cell doc-api-table-required\">必需</div>\n )}\n </div>\n\n <div className=\"doc-api-table-body\">\n {api.data.map((item, index) => (\n <div key={index} className=\"doc-api-table-row\">\n <div className=\"doc-api-table-cell doc-api-table-param\">\n <code className=\"doc-api-param-name\">{item.param}</code>\n {item.deprecated && (\n <span className=\"doc-api-deprecated\">已废弃</span>\n )}\n </div>\n\n {showType && (\n <div className=\"doc-api-table-cell doc-api-table-type\">\n <code className=\"doc-api-type\">{item.type}</code>\n </div>\n )}\n\n {showDescription && (\n <div className=\"doc-api-table-cell doc-api-table-description\">\n {renderDescription(item.desc, item.descFlag)}\n </div>\n )}\n\n <div className=\"doc-api-table-cell doc-api-table-option\">\n {item.option && (\n <code className=\"doc-api-option\">{item.option}</code>\n )}\n </div>\n\n {showDefault && (\n <div className=\"doc-api-table-cell doc-api-table-default\">\n {item.default !== undefined && item.default !== '' && (\n <code className=\"doc-api-default\">{String(item.default)}</code>\n )}\n </div>\n )}\n\n {showRequired && (\n <div className=\"doc-api-table-cell doc-api-table-required\">\n {item.required ? (\n <span className=\"doc-api-required-yes\">是</span>\n ) : (\n <span className=\"doc-api-required-no\">否</span>\n )}\n </div>\n )}\n </div>\n ))}\n </div>\n </div>\n );\n };\n\n const renderDescription = (desc, descFlag = true) => {\n if (!desc) return null;\n\n if (typeof desc === 'string') {\n if (descFlag) {\n // 支持样式化文本({} 包围的内容会被样式化)\n const styledDesc = desc.replace(\n /{([^}]+)}/g, \n '<span class=\"doc-api-highlight\">$1</span>'\n );\n return (\n <div dangerouslySetInnerHTML={{ __html: styledDesc }} />\n );\n } else {\n return <div>{desc}</div>;\n }\n }\n\n // 支持React元素\n return desc;\n };\n\n const renderCustomContent = () => {\n if (!api.CustomContent) return null;\n\n try {\n const CustomContent = api.CustomContent;\n return <CustomContent />;\n } catch (error) {\n console.error('API custom content render error:', error);\n return null;\n }\n };\n\n return (\n <div className=\"doc-api\" id={`api-${api.apiKey}`}>\n <div className=\"doc-api-header\">\n <h3 className=\"doc-api-title\">{api.title}</h3>\n {api.description && (\n <p className=\"doc-api-description\">{api.description}</p>\n )}\n </div>\n\n {/* 自定义内容 */}\n {renderCustomContent()}\n\n {/* API表格 */}\n {renderApiTable()}\n\n {/* 示例代码 */}\n {api.example && (\n <div className=\"doc-api-example\">\n <h4 className=\"doc-api-example-title\">示例</h4>\n <pre className=\"doc-api-example-code\">\n <code>{api.example}</code>\n </pre>\n </div>\n )}\n\n {/* 注意事项 */}\n {api.notes && (\n <div className=\"doc-api-notes\">\n <h4 className=\"doc-api-notes-title\">注意事项</h4>\n <div className=\"doc-api-notes-content\">\n {Array.isArray(api.notes) ? (\n <ul>\n {api.notes.map((note, index) => (\n <li key={index}>{note}</li>\n ))}\n </ul>\n ) : (\n <p>{api.notes}</p>\n )}\n </div>\n </div>\n )}\n </div>\n );\n};\n\nexport default ApiDoc;\n","/**\n * 首页组件\n */\n\nimport React from 'react';\n\nconst Home = ({ config, theme, componentRegistry }) => {\n const components = componentRegistry.getComponentIds();\n\n const renderWelcome = () => (\n <div className=\"doc-home-welcome\">\n <h1 className=\"doc-home-title\">\n {config.title || 'Documentation'}\n </h1>\n \n {config.description && (\n <p className=\"doc-home-description\">\n {config.description}\n </p>\n )}\n\n {config.version && (\n <div className=\"doc-home-version\">\n 当前版本: <code>{config.version}</code>\n </div>\n )}\n </div>\n );\n\n const renderQuickStart = () => {\n if (config.quickStart === false) return null;\n\n return (\n <div className=\"doc-home-section\">\n <h2 className=\"doc-home-section-title\">快速开始</h2>\n \n {config.installation && (\n <div className=\"doc-home-installation\">\n <h3>安装</h3>\n <pre className=\"doc-home-code\">\n <code>{config.installation}</code>\n </pre>\n </div>\n )}\n\n {config.usage && (\n <div className=\"doc-home-usage\">\n <h3>使用</h3>\n <pre className=\"doc-home-code\">\n <code>{config.usage}</code>\n </pre>\n </div>\n )}\n </div>\n );\n };\n\n const renderComponents = () => {\n if (components.length === 0) return null;\n\n return (\n <div className=\"doc-home-section\">\n <h2 className=\"doc-home-section-title\">组件列表</h2>\n \n <div className=\"doc-home-components\">\n {components.map(componentId => {\n const componentConfig = componentRegistry.getComponent(componentId);\n const demos = componentRegistry.getDemos(componentId);\n \n return (\n <div key={componentId} className=\"doc-home-component-card\">\n <h3 className=\"doc-home-component-title\">\n <a href={`#/${componentId}`}>\n {componentConfig?.label || componentId}\n </a>\n </h3>\n \n {componentConfig?.description && (\n <p className=\"doc-home-component-description\">\n {componentConfig.description}\n </p>\n )}\n\n <div className=\"doc-home-component-meta\">\n <span className=\"doc-home-component-demos\">\n {demos.size} 个示例\n </span>\n \n {componentConfig?.version && (\n <span className=\"doc-home-component-version\">\n v{componentConfig.version}\n </span>\n )}\n </div>\n </div>\n );\n })}\n </div>\n </div>\n );\n };\n\n const renderFeatures = () => {\n if (!config.features || !Array.isArray(config.features)) return null;\n\n return (\n <div className=\"doc-home-section\">\n <h2 className=\"doc-home-section-title\">特性</h2>\n \n <div className=\"doc-home-features\">\n {config.features.map((feature, index) => (\n <div key={index} className=\"doc-home-feature\">\n {feature.icon && (\n <div className=\"doc-home-feature-icon\">\n {feature.icon}\n </div>\n )}\n \n <h3 className=\"doc-home-feature-title\">\n {feature.title}\n </h3>\n \n {feature.description && (\n <p className=\"doc-home-feature-description\">\n {feature.description}\n </p>\n )}\n </div>\n ))}\n </div>\n </div>\n );\n };\n\n const renderCustomContent = () => {\n if (!config.homeContent) return null;\n\n if (typeof config.homeContent === 'function') {\n const CustomContent = config.homeContent;\n return <CustomContent config={config} theme={theme} componentRegistry={componentRegistry} />;\n }\n\n if (typeof config.homeContent === 'string') {\n return (\n <div \n className=\"doc-home-custom-content\"\n dangerouslySetInnerHTML={{ __html: config.homeContent }}\n />\n );\n }\n\n return config.homeContent;\n };\n\n return (\n <div className=\"doc-home\">\n {renderWelcome()}\n {renderQuickStart()}\n {renderFeatures()}\n {renderComponents()}\n {renderCustomContent()}\n </div>\n );\n};\n\nexport default Home;\n","/**\n * 内容区域组件\n */\n\nimport React, { useMemo } from 'react';\nimport Demo from './Demo';\nimport ApiDoc from './ApiDoc';\nimport Home from './Home';\n\nconst Content = ({ \n config, \n theme, \n currentRoute, \n componentRegistry, \n renderer \n}) => {\n // 根据当前路由渲染内容\n const renderContent = useMemo(() => {\n if (!currentRoute) {\n return <div className=\"doc-content-loading\">加载中...</div>;\n }\n\n // 首页\n if (currentRoute.component === 'home' || currentRoute.path === '/') {\n return (\n <Home \n config={config}\n theme={theme}\n componentRegistry={componentRegistry}\n />\n );\n }\n\n // 组件页面\n const componentId = currentRoute.component;\n const componentConfig = componentRegistry.getComponent(componentId);\n \n if (!componentConfig) {\n return (\n <div className=\"doc-content-not-found\">\n <h1>页面未找到</h1>\n <p>组件 \"{componentId}\" 不存在</p>\n </div>\n );\n }\n\n return (\n <ComponentPage\n componentId={componentId}\n componentConfig={componentConfig}\n componentRegistry={componentRegistry}\n config={config}\n theme={theme}\n renderer={renderer}\n />\n );\n }, [currentRoute, componentRegistry, config, theme, renderer]);\n\n return (\n <main className=\"doc-content\">\n <div className=\"doc-content-container\">\n {renderContent}\n </div>\n </main>\n );\n};\n\n// 组件页面\nconst ComponentPage = ({ \n componentId, \n componentConfig, \n componentRegistry, \n config, \n theme, \n renderer \n}) => {\n const demos = componentRegistry.getDemos(componentId);\n const apis = componentRegistry.getApis(componentId);\n\n return (\n <div className=\"doc-component-page\">\n {/* 页面标题 */}\n <div className=\"doc-component-header\">\n <h1 className=\"doc-component-title\">\n {componentConfig.label || componentId}\n </h1>\n {componentConfig.description && (\n <p className=\"doc-component-description\">\n {componentConfig.description}\n </p>\n )}\n {componentConfig.version && (\n <div className=\"doc-component-version\">\n 版本: {componentConfig.version}\n </div>\n )}\n </div>\n\n {/* Demo 展示 */}\n {demos.size > 0 && (\n <div className=\"doc-component-demos\">\n <h2 className=\"doc-component-section-title\">示例</h2>\n {Array.from(demos.values()).map((demo, index) => (\n <Demo\n key={demo.source || index}\n demo={demo}\n componentId={componentId}\n config={config}\n theme={theme}\n renderer={renderer}\n />\n ))}\n </div>\n )}\n\n {/* API 文档 */}\n {apis.size > 0 && (\n <div className=\"doc-component-apis\">\n <h2 className=\"doc-component-section-title\" id=\"api\">\n API\n </h2>\n {Array.from(apis.values()).map((api, index) => (\n <ApiDoc\n key={api.apiKey || index}\n api={api}\n componentId={componentId}\n config={config}\n theme={theme}\n />\n ))}\n </div>\n )}\n\n {/* 额外内容 */}\n {componentConfig.extra && (\n <div className=\"doc-component-extra\">\n {typeof componentConfig.extra === 'function' \n ? componentConfig.extra({ componentId, config, theme })\n : componentConfig.extra\n }\n </div>\n )}\n </div>\n );\n};\n\nexport default Content;\n","/**\n * 页脚组件\n */\n\nimport React from 'react';\n\nconst Footer = ({ config, theme }) => {\n const currentYear = new Date().getFullYear();\n\n const renderCopyright = () => {\n if (config.copyright === false) return null;\n\n const copyright = config.copyright || `© ${currentYear} ${config.title || 'Documentation'}`;\n \n return (\n <div className=\"doc-footer-copyright\">\n {copyright}\n </div>\n );\n };\n\n const renderLinks = () => {\n if (!config.footerLinks || !Array.isArray(config.footerLinks)) return null;\n\n return (\n <div className=\"doc-footer-links\">\n {config.footerLinks.map((link, index) => (\n <a\n key={index}\n href={link.url}\n target={link.external ? '_blank' : '_self'}\n rel={link.external ? 'noopener noreferrer' : undefined}\n className=\"doc-footer-link\"\n >\n {link.text}\n </a>\n ))}\n </div>\n );\n };\n\n const renderPoweredBy = () => {\n if (config.hidePoweredBy) return null;\n\n return (\n <div className=\"doc-footer-powered\">\n Powered by <a href=\"https://github.com/Sunny-117/doc-render-sdk\" target=\"_blank\" rel=\"noopener noreferrer\">Doc SDK</a>\n </div>\n );\n };\n\n const renderCustomContent = () => {\n if (!config.footerContent) return null;\n\n if (typeof config.footerContent === 'function') {\n const CustomContent = config.footerContent;\n return <CustomContent config={config} theme={theme} />;\n }\n\n if (typeof config.footerContent === 'string') {\n return (\n <div \n className=\"doc-footer-custom\"\n dangerouslySetInnerHTML={{ __html: config.footerContent }}\n />\n );\n }\n\n return config.footerContent;\n };\n\n return (\n <footer className=\"doc-footer\">\n <div className=\"doc-footer-content\">\n {renderCopyright()}\n {renderLinks()}\n {renderCustomContent()}\n {renderPoweredBy()}\n </div>\n </footer>\n );\n};\n\nexport default Footer;\n","/**\n * 主布局组件\n */\n\nimport React, { useState, useEffect } from 'react';\nimport Navigation from './Navigation';\nimport Header from './Header';\nimport Content from './Content';\nimport Footer from './Footer';\n\nconst Layout = ({ \n config, \n theme, \n renderer, \n routerManager, \n componentRegistry,\n onRouteChange \n}) => {\n const [currentRoute, setCurrentRoute] = useState(null);\n const [sidebarCollapsed, setSidebarCollapsed] = useState(false);\n\n useEffect(() => {\n // 监听路由变化\n const unsubscribe = routerManager.onRouteChange((route) => {\n setCurrentRoute(route);\n if (onRouteChange) {\n onRouteChange(route);\n }\n });\n\n // 获取初始路由\n setCurrentRoute(routerManager.getCurrentRoute());\n\n return unsubscribe;\n }, [routerManager, onRouteChange]);\n\n const layoutConfig = config.layout || {};\n const { type = 'sidebar' } = layoutConfig;\n\n const handleSidebarToggle = () => {\n setSidebarCollapsed(!sidebarCollapsed);\n };\n\n const handleNavigate = (path, params) => {\n routerManager.navigate(path, params);\n };\n\n // 渲染侧边栏布局\n const renderSidebarLayout = () => (\n <div className=\"doc-layout doc-layout-sidebar-type\">\n <Header \n config={config}\n theme={theme}\n currentRoute={currentRoute}\n sidebarCollapsed={sidebarCollapsed}\n onSidebarToggle={handleSidebarToggle}\n />\n \n <div className=\"doc-layout-content\">\n {!sidebarCollapsed && (\n <div className=\"doc-layout-sidebar\">\n <Navigation\n config={config}\n theme={theme}\n currentRoute={currentRoute}\n componentRegistry={componentRegistry}\n onNavigate={handleNavigate}\n />\n </div>\n )}\n \n <div className=\"doc-layout-main\">\n <Content\n config={config}\n theme={theme}\n currentRoute={currentRoute}\n componentRegistry={componentRegistry}\n renderer={renderer}\n />\n </div>\n </div>\n \n {layoutConfig.footer?.show !== false && (\n <Footer \n config={config}\n theme={theme}\n />\n )}\n </div>\n );\n\n // 渲染顶部导航布局\n const renderTopLayout = () => (\n <div className=\"doc-layout doc-layout-top-type\">\n <Header \n config={config}\n theme={theme}\n currentRoute={currentRoute}\n showNavigation={true}\n componentRegistry={componentRegistry}\n onNavigate={handleNavigate}\n />\n \n <div className=\"doc-layout-content\">\n <div className=\"doc-layout-main\">\n <Content\n config={config}\n theme={theme}\n currentRoute={currentRoute}\n componentRegistry={componentRegistry}\n renderer={renderer}\n />\n </div>\n </div>\n \n {layoutConfig.footer?.show !== false && (\n <Footer \n config={config}\n theme={theme}\n />\n )}\n </div>\n );\n\n // 渲染混合布局\n const renderMixedLayout = () => (\n <div className=\"doc-layout doc-layout-mixed-type\">\n <Header \n config={config}\n theme={theme}\n currentRoute={currentRoute}\n showNavigation={true}\n componentRegistry={componentRegistry}\n onNavigate={handleNavigate}\n />\n \n <div className=\"doc-layout-content\">\n <div className=\"doc-layout-sidebar\">\n <Navigation\n config={config}\n theme={theme}\n currentRoute={currentRoute}\n componentRegistry={componentRegistry}\n onNavigate={handleNavigate}\n compact={true}\n />\n </div>\n \n <div className=\"doc-layout-main\">\n <Content\n config={config}\n theme={theme}\n currentRoute={currentRoute}\n componentRegistry={componentRegistry}\n renderer={renderer}\n />\n </div>\n </div>\n \n {layoutConfig.footer?.show !== false && (\n <Footer \n config={config}\n theme={theme}\n />\n )}\n </div>\n );\n\n // 根据布局类型渲染\n switch (type) {\n case 'top':\n return renderTopLayout();\n case 'mixed':\n return renderMixedLayout();\n case 'sidebar':\n default:\n return renderSidebarLayout();\n }\n};\n\nexport default Layout;\n","/**\n * 路由管理器\n * 负责管理文档站点的路由系统\n */\n\nexport default class RouterManager {\n renderer: any;\n currentRoute: null;\n routes: Map<any, any>;\n listeners: Set<(route: any) => void>;\n isInitialized: boolean;\n constructor(renderer) {\n this.renderer = renderer;\n this.currentRoute = null;\n this.routes = new Map();\n this.listeners = new Set();\n this.isInitialized = false;\n }\n\n /**\n * 初始化路由系统\n */\n initialize() {\n if (this.isInitialized) {\n return;\n }\n\n // 注册路由\n this.registerRoutes();\n\n // 监听浏览器路由变化\n window.addEventListener('hashchange', this.handleHashChange.bind(this));\n window.addEventListener('popstate', this.handlePopState.bind(this));\n\n // 处理初始路由\n this.handleInitialRoute();\n\n this.isInitialized = true;\n }\n\n /**\n * 注册路由\n */\n registerRoutes() {\n const config = this.renderer.configManager.getConfig();\n const { components = {} } = config;\n\n // 注册首页路由\n this.routes.set('/', {\n path: '/',\n component: 'home',\n title: config.title || 'Documentation'\n });\n\n // 注册组件路由\n Object.entries(components).forEach(([componentId, componentConfig]) => {\n const path = `/${componentId}`;\n this.routes.set(path, {\n path,\n component: componentId,\n title: (componentConfig as any).label || componentId,\n config: componentConfig\n });\n });\n }\n\n /**\n * 处理初始路由\n */\n handleInitialRoute() {\n const hash = window.location.hash;\n const path = this.parseHashToPath(hash);\n this.navigate(path, {}, false);\n }\n\n /**\n * 处理hash变化\n */\n handleHashChange() {\n const hash = window.location.hash;\n const path = this.parseHashToPath(hash);\n this.navigate(path, {}, false);\n }\n\n /**\n * 处理浏览器前进后退\n */\n handlePopState(event) {\n if (event.state && event.state.path) {\n this.navigate(event.state.path, event.state.params || {}, false);\n }\n }\n\n /**\n * 解析hash为路径\n * @param {string} hash - URL hash\n * @returns {string} 路径\n */\n parseHashToPath(hash) {\n if (!hash || hash === '#') {\n return '/';\n }\n \n // 移除#号并解析参数\n const hashWithoutSymbol = hash.substring(1);\n const [path, queryString] = hashWithoutSymbol.split('?');\n \n return path || '/';\n }\n\n /**\n * 解析查询参数\n * @param {string} queryString - 查询字符串\n * @returns {Object} 参数对象\n */\n parseQuery(queryString) {\n const params = {};\n if (!queryString) return params;\n\n queryString.split('&').forEach(param => {\n const [key, value] = param.split('=');\n if (key) {\n params[decodeURIComponent(key)] = decodeURIComponent(value || '');\n }\n });\n\n return params;\n }\n\n /**\n * 导航到指定路径\n * @param {string} path - 路径\n * @param {Object} params - 参数\n * @param {boolean} pushState - 是否推入历史记录\n */\n navigate(path, params = {}, pushState = true) {\n const route = this.routes.get(path);\n \n if (!route) {\n console.warn(`Route not found: ${path}`);\n // 导航到首页\n return this.navigate('/', {}, pushState);\n }\n\n const newRoute = {\n ...route,\n params,\n query: this.parseQuery(window.location.hash.split('?')[1])\n };\n\n // 更新当前路由\n this.currentRoute = newRoute;\n\n // 更新URL(只使用 hash,不使用 pushState)\n if (pushState) {\n const hash = this.buildHash(path, params);\n window.location.hash = hash;\n }\n\n // 通知路由变化\n this.notifyRouteChange(newRoute);\n\n return newRoute;\n }\n\n /**\n * 构建hash\n * @param {string} path - 路径\n * @param {Object} params - 参数\n * @returns {string} hash字符串\n */\n buildHash(path, params = {}) {\n let hash = path === '/' ? '' : path;\n \n const queryParams = Object.entries(params)\n .filter(([key, value]) => value !== undefined && value !== null)\n .map(([key, value]) => `${encodeURIComponent(key)}=${encodeURIComponent(value as string)}`)\n .join('&');\n\n if (queryParams) {\n hash += `?${queryParams}`;\n }\n\n return hash;\n }\n\n /**\n * 获取当前路由\n * @returns {Object|null} 当前路由信息\n */\n getCurrentRoute() {\n return this.currentRoute;\n }\n\n /**\n * 监听路由变化\n * @param {Function} listener - 监听函数\n * @returns {Function} 取消监听的函数\n */\n onRouteChange(listener) {\n this.listeners.add(listener);\n \n return () => {\n this.listeners.delete(listener);\n };\n }\n\n /**\n * 通知路由变化\n * @param {Object} route - 路由信息\n */\n notifyRouteChange(route) {\n this.listeners.forEach(listener => {\n try {\n listener(route);\n } catch (error) {\n console.error('Route change listener error:', error);\n }\n });\n\n // 通知渲染器\n if (this.renderer && typeof this.renderer.handleRouteChange === 'function') {\n this.renderer.handleRouteChange(route);\n }\n }\n\n /**\n * 销毁路由管理器\n */\n destroy() {\n if (this.isInitialized) {\n window.removeEventListener('hashchange', this.handleHashChange.bind(this));\n window.removeEventListener('popstate', this.handlePopState.bind(this));\n this.listeners.clear();\n this.routes.clear();\n this.currentRoute = null;\n this.isInitialized = false;\n }\n }\n}\n","/**\n * 组件注册表\n * 负责管理和注册文档组件\n */\n\nexport default class ComponentRegistry {\n apis: Map<any, any>;\n demos: Map<any, any>;\n components: Map<any, any>;\n renderer: any;\n constructor(renderer) {\n this.renderer = renderer;\n this.components = new Map();\n this.demos = new Map();\n this.apis = new Map();\n }\n\n /**\n * 注册组件\n * @param {string} componentId - 组件ID\n * @param {Object} componentConfig - 组件配置\n */\n async register(componentId, componentConfig) {\n try {\n // 存储组件配置\n this.components.set(componentId, componentConfig);\n\n // 注册demos\n if (componentConfig.demos && Array.isArray(componentConfig.demos)) {\n await this.registerDemos(componentId, componentConfig.demos);\n }\n\n // 注册APIs\n if (componentConfig.apis && Array.isArray(componentConfig.apis)) {\n await this.registerApis(componentId, componentConfig.apis);\n }\n\n return true;\n } catch (error) {\n console.error(`Failed to register component ${componentId}:`, error);\n return false;\n }\n }\n\n /**\n * 注册组件demos\n * @param {string} componentId - 组件ID\n * @param {Array} demos - demo配置数组\n */\n async registerDemos(componentId, demos) {\n const componentDemos = new Map();\n\n for (const demo of demos) {\n try {\n const demoComponent = await this.loadDemo(componentId, demo);\n const demoCode = await this.loadDemoCode(componentId, demo);\n \n componentDemos.set(demo.source, {\n ...demo,\n component: demoComponent,\n code: demoCode\n });\n } catch (error) {\n console.error(`Failed to load demo ${demo.source} for component ${componentId}:`, error);\n }\n }\n\n this.demos.set(componentId, componentDemos);\n }\n\n /**\n * 加载demo组件\n * @param {string} componentId - 组件ID\n * @param {Object} demo - demo配置\n * @returns {React.Component} demo组件\n */\n async loadDemo(componentId, demo) {\n try {\n // 优先从全局注册的组件中获取\n const globalDemo = window.__DOC_SDK_DEMOS__?.[componentId]?.[demo.source];\n if (globalDemo) {\n return globalDemo;\n }\n \n // 如果全局没有注册,尝试动态导入(用于开发环境)\n const demoPath = `../components/${componentId}/demo/${demo.source}`;\n console.log({demoPath})\n const module = await import(/* @vite-ignore */ demoPath);\n return module.default || module;\n } catch (error) {\n throw new Error(`Demo component not found: ${componentId}/${demo.source}`);\n }\n }\n\n /**\n * 加载demo源码\n * @param {string} componentId - 组件ID\n * @param {Object} demo - demo配置\n * @returns {string} demo源码\n */\n async loadDemoCode(componentId, demo) {\n try {\n // 尝试从全局注册的代码中获取\n const globalCode = window.__DOC_SDK_DEMO_CODES__?.[componentId]?.[demo.source];\n if (globalCode) {\n return globalCode;\n }\n\n // 如果没有预加载的代码,返回占位符\n return `// Demo code for ${componentId}/${demo.source}\\n// Code not available`;\n } catch (error) {\n console.error(`Failed to load demo code: ${componentId}/${demo.source}`, error);\n return '// Code not available';\n }\n }\n\n /**\n * 注册组件APIs\n * @param {string} componentId - 组件ID\n * @param {Array} apis - API配置数组\n */\n async registerApis(componentId, apis) {\n const componentApis = new Map();\n\n for (const api of apis) {\n try {\n const apiData = await this.loadApiData(componentId, api);\n componentApis.set(api.apiKey, {\n ...api,\n data: apiData\n });\n } catch (error) {\n console.error(`Failed to load API ${api.apiKey} for component ${componentId}:`, error);\n }\n }\n\n this.apis.set(componentId, componentApis);\n }\n\n /**\n * 加载API数据\n * @param {string} componentId - 组件ID\n * @param {Object} api - API配置\n * @returns {Array} API数据\n */\n async loadApiData(componentId, api) {\n try {\n // 尝试从全局注册的API数据中获取\n const globalApiData = window.__DOC_SDK_APIS__?.[componentId]?.[api.apiKey];\n if (globalApiData) {\n return globalApiData;\n }\n\n // 尝试动态导入\n const apiPath = `../components/${componentId}/api`;\n const module = await import(/* @vite-ignore */ apiPath);\n const apiData = module.default || module;\n \n return apiData[api.apiKey] || [];\n } catch (error) {\n console.error(`Failed to load API data: ${componentId}/${api.apiKey}`, error);\n return [];\n }\n }\n\n /**\n * 获取组件配置\n * @param {string} componentId - 组件ID\n * @returns {Object|null} 组件配置\n */\n getComponent(componentId) {\n return this.components.get(componentId) || null;\n }\n\n /**\n * 获取组件demos\n * @param {string} componentId - 组件ID\n * @returns {Map} demos Map\n */\n getDemos(componentId) {\n return this.demos.get(componentId) || new Map();\n }\n\n /**\n * 获取特定demo\n * @param {string} componentId - 组件ID\n * @param {string} demoSource - demo源\n * @returns {Object|null} demo对象\n */\n getDemo(componentId, demoSource) {\n const componentDemos = this.getDemos(componentId);\n return componentDemos.get(demoSource) || null;\n }\n\n /**\n * 获取组件APIs\n * @param {string} componentId - 组件ID\n * @returns {Map} APIs Map\n */\n getApis(componentId) {\n return this.apis.get(componentId) || new Map();\n }\n\n /**\n * 获取特定API\n * @param {string} componentId - 组件ID\n * @param {string} apiKey - API键\n * @returns {Object|null} API对象\n */\n getApi(componentId, apiKey) {\n const componentApis = this.getApis(componentId);\n return componentApis.get(apiKey) || null;\n }\n\n /**\n * 获取所有注册的组件ID\n * @returns {Array} 组件ID数组\n */\n getComponentIds() {\n return Array.from(this.components.keys());\n }\n\n /**\n * 检查组件是否已注册\n * @param {string} componentId - 组件ID\n * @returns {boolean} 是否已注册\n */\n hasComponent(componentId) {\n return this.components.has(componentId);\n }\n\n /**\n * 清空注册表\n */\n clear() {\n this.components.clear();\n this.demos.clear();\n this.apis.clear();\n }\n}\n","/**\n * 文档渲染器核心类\n * 负责整个文档站点的渲染和管理\n */\n\nimport React from 'react';\nimport { createRoot } from 'react-dom/client';\nimport Layout from '../components/Layout';\nimport RouterManager from './RouterManager';\nimport ComponentRegistry from './ComponentRegistry';\nimport type { RendererOptions } from '../types';\n\nexport default class DocRenderer {\n private configManager: any;\n private themeManager: any;\n private pluginManager: any;\n private routerManager: any;\n private componentRegistry: any;\n private targetElement: HTMLElement | null;\n private isRendered: boolean;\n private root: any;\n\n constructor({ configManager, themeManager, pluginManager }: RendererOptions) {\n\n this.configManager = configManager;\n this.themeManager = themeManager;\n this.pluginManager = pluginManager;\n\n this.routerManager = new RouterManager(this);\n this.componentRegistry = new ComponentRegistry(this);\n\n this.targetElement = null;\n this.isRendered = false;\n this.root = null;\n\n // 初始化插件\n this.pluginManager.initialize(this);\n }\n\n /**\n * 渲染文档到指定容器\n * @param {string|HTMLElement} target - 目标容器\n */\n async render(target) {\n try {\n this.targetElement = typeof target === 'string' \n ? document.querySelector(target) \n : target;\n\n if (!this.targetElement) {\n throw new Error('Target element not found');\n }\n\n // 触发渲染前事件\n // this.emit('beforeRender', { target: this.targetElement });\n\n // 注册组件\n await this.registerComponents();\n\n // 初始化路由\n this.routerManager.initialize();\n\n // 渲染主布局\n this.renderLayout();\n\n this.isRendered = true;\n\n // 触发渲染完成事件\n // this.emit('rendered', { target: this.targetElement });\n\n return this;\n } catch (error) {\n // this.emit('renderError', { error, target });\n throw error;\n }\n }\n\n /**\n * 渲染主布局\n */\n renderLayout() {\n const config = this.configManager.getConfig();\n const theme = this.themeManager.getCurrentTheme();\n \n const layoutProps = {\n config,\n theme,\n renderer: this,\n routerManager: this.routerManager,\n componentRegistry: this.componentRegistry,\n onRouteChange: this.handleRouteChange.bind(this)\n };\n\n if (!this.root) {\n this.root = createRoot(this.targetElement!);\n }\n \n this.root.render(\n React.createElement(Layout, layoutProps)\n );\n }\n\n /**\n * 注册组件\n */\n async registerComponents() {\n const config = this.configManager.getConfig();\n const { components = {} } = config;\n\n for (const [componentId, componentConfig] of Object.entries(components)) {\n await this.componentRegistry.register(componentId, componentConfig);\n }\n }\n\n /**\n * 处理路由变化\n * @param {Object} route - 路由信息\n */\n handleRouteChange(route) {\n // this.emit('routeChange', route);\n \n // 更新页面标题\n if (route.title) {\n document.title = `${route.title} - ${this.configManager.get('title', 'Documentation')}`;\n }\n }\n\n /**\n * 更新渲染\n */\n update() {\n if (this.isRendered) {\n this.renderLayout();\n // this.emit('updated');\n }\n return this;\n }\n\n /**\n * 销毁渲染器\n */\n destroy() {\n if (this.targetElement && this.isRendered) {\n if (this.root) {\n this.root.unmount();\n this.root = null;\n }\n this.routerManager.destroy();\n this.componentRegistry.clear();\n // this.destroyEvents();\n this.isRendered = false;\n \n // this.emit('destroyed');\n }\n return this;\n }\n\n /**\n * 获取组件注册表\n */\n getComponentRegistry() {\n return this.componentRegistry;\n }\n\n /**\n * 获取路由管理器\n */\n getRouterManager() {\n return this.routerManager;\n }\n\n /**\n * 获取当前路由\n */\n getCurrentRoute() {\n return this.routerManager.getCurrentRoute();\n }\n\n /**\n * 导航到指定路由\n * @param {string} path - 路由路径\n * @param {Object} params - 路由参数\n */\n navigate(path, params = {}) {\n return this.routerManager.navigate(path, params);\n }\n}\n","/**\n * 默认配置\n */\n\nimport type { DocConfig } from '../types';\n\nconst defaultConfig: DocConfig = {\n // 站点基本信息\n title: 'Documentation',\n description: 'Component Documentation Site',\n version: '1.0.0',\n \n // 主题配置\n theme: {\n name: 'default',\n colors: {},\n typography: {},\n spacing: {},\n layout: {}\n },\n \n // 布局配置\n layout: {\n type: 'sidebar', // sidebar, top, mixed\n sidebar: {\n width: 280,\n collapsible: true,\n },\n header: {\n height: 64,\n },\n },\n \n // 组件配置\n components: {},\n \n // 插件配置\n plugins: [],\n};\n\nexport default defaultConfig;\n","/**\n * 配置管理器\n * 负责管理文档站点的所有配置\n */\n\nimport { merge, get, set, cloneDeep } from 'lodash-es';\nimport defaultConfig from '../config/default';\nimport type { DocConfig } from '../types';\n\nexport default class ConfigManager {\n private config: DocConfig;\n private listeners: Set<(config: DocConfig) => void>;\n\n constructor(userConfig: Partial<DocConfig> = {}) {\n this.config = this.mergeConfig(defaultConfig, userConfig);\n this.listeners = new Set();\n }\n\n /**\n * 合并配置\n */\n private mergeConfig(defaultConfig: DocConfig, userConfig: Partial<DocConfig>): DocConfig {\n return merge(cloneDeep(defaultConfig), userConfig);\n }\n\n /**\n * 获取完整配置\n */\n getConfig(): DocConfig {\n return cloneDeep(this.config);\n }\n\n /**\n * 获取配置项\n */\n get(path?: string, defaultValue?: any): any {\n if (!path) return this.getConfig();\n return get(this.config, path, defaultValue);\n }\n\n /**\n * 设置配置项\n */\n set(path: string, value: any): void {\n const oldValue = this.get(path);\n set(this.config, path, value);\n\n this.notifyChange(path, value, oldValue);\n }\n\n /**\n * 更新配置\n */\n update(newConfig: Partial<DocConfig>): void {\n const oldConfig = cloneDeep(this.config);\n this.config = this.mergeConfig(this.config, newConfig);\n\n this.notifyChange('*', this.config, oldConfig);\n }\n\n /**\n * 重置配置\n */\n reset(newConfig: Partial<DocConfig> = {}): void {\n const oldConfig = cloneDeep(this.config);\n this.config = this.mergeConfig(defaultConfig, newConfig);\n\n this.notifyChange('*', this.config, oldConfig);\n }\n\n /**\n * 监听配置变化\n */\n onChange(listener: (config: DocConfig) => void): () => void {\n this.listeners.add(listener);\n\n // 返回取消监听的函数\n return () => {\n this.listeners.delete(listener);\n };\n }\n\n /**\n * 通知配置变化\n */\n private notifyChange(path: string, newValue: any, oldValue: any): void {\n this.listeners.forEach(listener => {\n try {\n listener({ path, newValue, oldValue, config: this.config } as any);\n } catch (error) {\n console.error('Config change listener error:', error);\n }\n });\n }\n\n /**\n * 验证配置\n * @param {Object} config - 要验证的配置\n * @returns {Object} 验证结果\n */\n validate(config = this.config) {\n const errors = [];\n const warnings: string[] = [];\n\n // 验证必需字段\n if (!config.title) {\n warnings.push('Missing title in config');\n }\n\n if (!config.components || Object.keys(config.components).length === 0) {\n warnings.push('No components defined in config');\n }\n\n // 验证组件配置\n if (config.components) {\n Object.entries(config.components).forEach(([id, component]) => {\n if (!component.label) {\n warnings.push(`Component ${id} missing label`);\n }\n \n if (!component.demos || !Array.isArray(component.demos)) {\n warnings.push(`Component ${id} missing demos array`);\n }\n });\n }\n\n return {\n isValid: errors.length === 0,\n errors,\n warnings\n };\n }\n\n /**\n * 获取组件配置\n * @param {string} componentId - 组件ID\n * @returns {Object|null} 组件配置\n */\n getComponent(componentId) {\n return this.get(`components.${componentId}`, null);\n }\n\n /**\n * 获取所有组件配置\n * @returns {Object} 组件配置对象\n */\n getComponents() {\n return this.get('components', {});\n }\n\n /**\n * 获取主题配置\n * @returns {Object} 主题配置\n */\n getTheme() {\n return this.get('theme', {});\n }\n\n /**\n * 获取布局配置\n * @returns {Object} 布局配置\n */\n getLayout() {\n return this.get('layout', {});\n }\n\n /**\n * 获取插件配置\n * @returns {Array} 插件配置数组\n */\n getPlugins() {\n return this.get('plugins', []);\n }\n}\n","/**\n * 默认主题\n */\n\nexport default {\n name: 'default',\n \n // 颜色系统\n colors: {\n // 主色调\n primary: '#1890ff',\n primaryHover: '#40a9ff',\n primaryActive: '#096dd9',\n \n // 成功色\n success: '#52c41a',\n successHover: '#73d13d',\n successActive: '#389e0d',\n \n // 警告色\n warning: '#faad14',\n warningHover: '#ffc53d',\n warningActive: '#d48806',\n \n // 错误色\n error: '#ff4d4f',\n errorHover: '#ff7875',\n errorActive: '#d9363e',\n \n // 文本色\n text: '#262626',\n textSecondary: '#595959',\n textTertiary: '#8c8c8c',\n textQuaternary: '#bfbfbf',\n \n // 背景色\n background: '#ffffff',\n backgroundSecondary: '#fafafa',\n backgroundTertiary: '#f5f5f5',\n \n // 边框色\n border: '#d9d9d9',\n borderSecondary: '#f0f0f0',\n \n // 阴影色\n shadow: 'rgba(0, 0, 0, 0.15)',\n shadowSecondary: 'rgba(0, 0, 0, 0.06)',\n \n // 代码相关\n code: {\n background: '#f6f8fa',\n border: '#e1e4e8',\n text: '#24292e',\n keyword: '#d73a49',\n string: '#032f62',\n comment: '#6a737d',\n number: '#005cc5',\n function: '#6f42c1'\n }\n },\n \n // 字体系统\n typography: {\n fontFamily: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif',\n fontFamilyCode: 'SFMono-Regular, Consolas, \"Liberation Mono\", Menlo, Courier, monospace',\n \n // 字体大小\n fontSize: {\n xs: '12px',\n sm: '14px',\n base: '16px',\n lg: '18px',\n xl: '20px',\n '2xl': '24px',\n '3xl': '30px',\n '4xl': '36px'\n },\n \n // 行高\n lineHeight: {\n tight: 1.25,\n normal: 1.5,\n relaxed: 1.75\n },\n \n // 字重\n fontWeight: {\n normal: 400,\n medium: 500,\n semibold: 600,\n bold: 700\n }\n },\n \n // 间距系统\n spacing: {\n xs: '4px',\n sm: '8px',\n md: '16px',\n lg: '24px',\n xl: '32px',\n '2xl': '48px',\n '3xl': '64px',\n '4xl': '96px'\n },\n \n // 布局系统\n layout: {\n sidebarWidth: '280px',\n headerHeight: '64px',\n footerHeight: '60px',\n contentMaxWidth: '1200px',\n borderRadius: '6px',\n boxShadow: '0 2px 8px rgba(0, 0, 0, 0.15)'\n },\n \n // 组件样式\n components: {\n // 布局组件\n layout: `\n .doc-layout {\n min-height: 100vh;\n display: flex;\n flex-direction: column;\n }\n\n .doc-layout-header {\n background: var(--doc-color-background);\n border-bottom: 1px solid var(--doc-color-border);\n box-shadow: var(--doc-layout-boxShadow);\n z-index: 100;\n }\n\n .doc-layout-content {\n flex: 1;\n display: flex;\n }\n\n .doc-layout-sidebar {\n width: var(--doc-layout-sidebarWidth);\n background: var(--doc-color-background);\n border-right: 1px solid var(--doc-color-border);\n overflow-y: auto;\n }\n\n .doc-layout-main {\n flex: 1;\n background: var(--doc-color-backgroundSecondary);\n overflow-y: auto;\n }\n\n .doc-layout-footer {\n background: var(--doc-color-background);\n border-top: 1px solid var(--doc-color-border);\n text-align: center;\n padding: var(--doc-spacing-md);\n color: var(--doc-color-textSecondary);\n }\n `,\n\n // 头部组件\n header: `\n .doc-header {\n height: var(--doc-layout-headerHeight);\n display: flex;\n align-items: center;\n padding: 0 var(--doc-spacing-lg);\n }\n\n .doc-header-content {\n width: 100%;\n display: flex;\n align-items: center;\n justify-content: space-between;\n }\n\n .doc-header-left {\n display: flex;\n align-items: center;\n gap: var(--doc-spacing-md);\n }\n\n .doc-header-logo img {\n height: 32px;\n width: auto;\n }\n\n .doc-header-logo-placeholder {\n font-size: 24px;\n }\n\n .doc-header-title {\n font-size: var(--doc-typography-fontSize-lg);\n font-weight: var(--doc-typography-fontWeight-bold);\n color: var(--doc-color-text);\n }\n\n .doc-header-version {\n margin-left: var(--doc-spacing-sm);\n font-size: var(--doc-typography-fontSize-sm);\n color: var(--doc-color-textSecondary);\n background: var(--doc-color-backgroundTertiary);\n padding: 2px 6px;\n border-radius: 3px;\n }\n\n .doc-header-navigation {\n display: flex;\n gap: var(--doc-spacing-lg);\n }\n\n .doc-header-nav-item {\n color: var(--doc-color-text);\n text-decoration: none;\n padding: var(--doc-spacing-sm) var(--doc-spacing-md);\n border-radius: var(--doc-layout-borderRadius);\n transition: all 0.2s ease;\n }\n\n .doc-header-nav-item:hover {\n background: var(--doc-color-backgroundTertiary);\n color: var(--doc-color-primary);\n }\n\n .doc-header-nav-item.active {\n background: var(--doc-color-primary);\n color: white;\n }\n\n .doc-header-actions {\n display: flex;\n align-items: center;\n gap: var(--doc-spacing-sm);\n }\n\n .doc-header-action {\n padding: var(--doc-spacing-sm);\n background: none;\n border: none;\n color: var(--doc-color-textSecondary);\n cursor: pointer;\n border-radius: var(--doc-layout-borderRadius);\n transition: all 0.2s ease;\n text-decoration: none;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n .doc-header-action:hover {\n background: var(--doc-color-backgroundTertiary);\n color: var(--doc-color-primary);\n }\n `,\n\n // 导航组件\n navigation: `\n .doc-navigation {\n padding: var(--doc-spacing-md);\n }\n\n .doc-navigation-title {\n font-size: var(--doc-typography-fontSize-lg);\n font-weight: var(--doc-typography-fontWeight-bold);\n color: var(--doc-color-text);\n margin-bottom: var(--doc-spacing-lg);\n padding: 0 var(--doc-spacing-sm);\n }\n\n .doc-navigation-group {\n margin-bottom: var(--doc-spacing-lg);\n }\n\n .doc-navigation-group-title {\n font-size: var(--doc-typography-fontSize-sm);\n font-weight: var(--doc-typography-fontWeight-medium);\n color: var(--doc-color-textSecondary);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n margin-bottom: var(--doc-spacing-sm);\n padding: 0 var(--doc-spacing-sm);\n }\n\n .doc-navigation-item {\n display: block;\n padding: var(--doc-spacing-sm) var(--doc-spacing-md);\n color: var(--doc-color-text);\n text-decoration: none;\n border-radius: var(--doc-layout-borderRadius);\n transition: all 0.2s ease;\n margin-bottom: 2px;\n }\n\n .doc-navigation-item:hover {\n background: var(--doc-color-backgroundTertiary);\n color: var(--doc-color-primary);\n }\n\n .doc-navigation-item.active {\n background: var(--doc-color-primary);\n color: white;\n }\n `,\n\n // 内容区域\n content: `\n .doc-content {\n flex: 1;\n padding: var(--doc-spacing-lg);\n }\n\n .doc-content-container {\n max-width: var(--doc-layout-contentMaxWidth);\n margin: 0 auto;\n }\n\n .doc-content-loading {\n text-align: center;\n padding: var(--doc-spacing-4xl);\n color: var(--doc-color-textSecondary);\n }\n\n .doc-content-not-found {\n text-align: center;\n padding: var(--doc-spacing-4xl);\n }\n\n .doc-content-not-found h1 {\n font-size: var(--doc-typography-fontSize-3xl);\n color: var(--doc-color-text);\n margin-bottom: var(--doc-spacing-md);\n }\n\n .doc-content-not-found p {\n color: var(--doc-color-textSecondary);\n }\n\n .doc-component-page {\n padding: var(--doc-spacing-lg) 0;\n }\n\n .doc-component-header {\n margin-bottom: var(--doc-spacing-2xl);\n padding-bottom: var(--doc-spacing-lg);\n border-bottom: 1px solid var(--doc-color-border);\n }\n\n .doc-component-title {\n font-size: var(--doc-typography-fontSize-4xl);\n font-weight: var(--doc-typography-fontWeight-bold);\n color: var(--doc-color-text);\n margin-bottom: var(--doc-spacing-md);\n }\n\n .doc-component-description {\n font-size: var(--doc-typography-fontSize-lg);\n color: var(--doc-color-textSecondary);\n line-height: var(--doc-typography-lineHeight-relaxed);\n margin-bottom: var(--doc-spacing-md);\n }\n\n .doc-component-version {\n font-size: var(--doc-typography-fontSize-sm);\n color: var(--doc-color-textTertiary);\n }\n\n .doc-component-section-title {\n font-size: var(--doc-typography-fontSize-2xl);\n font-weight: var(--doc-typography-fontWeight-semibold);\n color: var(--doc-color-text);\n margin: var(--doc-spacing-2xl) 0 var(--doc-spacing-lg) 0;\n padding-bottom: var(--doc-spacing-sm);\n border-bottom: 1px solid var(--doc-color-borderSecondary);\n }\n `,\n\n // Demo组件\n demo: `\n .doc-demo {\n margin-bottom: var(--doc-spacing-2xl);\n border: 1px solid var(--doc-color-border);\n border-radius: var(--doc-layout-borderRadius);\n overflow: hidden;\n background: var(--doc-color-background);\n }\n\n .doc-demo-header {\n padding: var(--doc-spacing-lg);\n background: var(--doc-color-background);\n border-bottom: 1px solid var(--doc-color-borderSecondary);\n }\n\n .doc-demo-title {\n font-size: var(--doc-typography-fontSize-lg);\n font-weight: var(--doc-typography-fontWeight-medium);\n color: var(--doc-color-text);\n margin-bottom: var(--doc-spacing-sm);\n }\n\n .doc-demo-description {\n color: var(--doc-color-textSecondary);\n line-height: var(--doc-typography-lineHeight-relaxed);\n }\n\n .doc-demo-highlight {\n background: var(--doc-color-warning);\n color: var(--doc-color-background);\n padding: 2px 4px;\n border-radius: 3px;\n font-size: 0.9em;\n }\n\n .doc-demo-content {\n padding: var(--doc-spacing-xl);\n background: var(--doc-color-background);\n min-height: 100px;\n }\n\n .doc-demo-error {\n padding: var(--doc-spacing-lg);\n background: var(--doc-color-error);\n color: white;\n text-align: center;\n border-radius: var(--doc-layout-borderRadius);\n }\n\n .doc-demo-code {\n background: var(--doc-color-code-background);\n border-top: 1px solid var(--doc-color-border);\n }\n\n .doc-demo-actions {\n display: flex;\n justify-content: flex-end;\n gap: var(--doc-spacing-sm);\n padding: var(--doc-spacing-sm) var(--doc-spacing-md);\n background: var(--doc-color-backgroundTertiary);\n border-top: 1px solid var(--doc-color-border);\n }\n\n .doc-demo-action {\n padding: var(--doc-spacing-xs) var(--doc-spacing-sm);\n background: none;\n border: none;\n color: var(--doc-color-textSecondary);\n cursor: pointer;\n font-size: var(--doc-typography-fontSize-sm);\n transition: all 0.2s ease;\n border-radius: 3px;\n }\n\n .doc-demo-action:hover {\n color: var(--doc-color-primary);\n background: var(--doc-color-backgroundSecondary);\n }\n `,\n\n // API文档组件\n api: `\n .doc-api {\n margin-bottom: var(--doc-spacing-2xl);\n }\n\n .doc-api-header {\n margin-bottom: var(--doc-spacing-lg);\n }\n\n .doc-api-title {\n font-size: var(--doc-typography-fontSize-xl);\n font-weight: var(--doc-typography-fontWeight-semibold);\n color: var(--doc-color-text);\n margin-bottom: var(--doc-spacing-sm);\n }\n\n .doc-api-description {\n color: var(--doc-color-textSecondary);\n line-height: var(--doc-typography-lineHeight-relaxed);\n }\n\n .doc-api-table {\n border: 1px solid var(--doc-color-border);\n border-radius: var(--doc-layout-borderRadius);\n overflow: hidden;\n background: var(--doc-color-background);\n }\n\n .doc-api-table-header {\n display: grid;\n grid-template-columns: 1fr 1fr 2fr 1fr 1fr 80px;\n background: var(--doc-color-backgroundTertiary);\n border-bottom: 1px solid var(--doc-color-border);\n font-weight: var(--doc-typography-fontWeight-medium);\n }\n\n .doc-api-table-cell {\n padding: var(--doc-spacing-md);\n border-right: 1px solid var(--doc-color-borderSecondary);\n font-size: var(--doc-typography-fontSize-sm);\n }\n\n .doc-api-table-cell:last-child {\n border-right: none;\n }\n\n .doc-api-table-row {\n display: grid;\n grid-template-columns: 1fr 1fr 2fr 1fr 1fr 80px;\n border-bottom: 1px solid var(--doc-color-borderSecondary);\n }\n\n .doc-api-table-row:last-child {\n border-bottom: none;\n }\n\n .doc-api-table-row:hover {\n background: var(--doc-color-backgroundSecondary);\n }\n\n .doc-api-param-name {\n color: var(--doc-color-primary);\n font-family: var(--doc-typography-fontFamilyCode);\n font-size: 0.9em;\n }\n\n .doc-api-type {\n color: var(--doc-color-success);\n font-family: var(--doc-typography-fontFamilyCode);\n font-size: 0.9em;\n }\n\n .doc-api-option {\n color: var(--doc-color-warning);\n font-family: var(--doc-typography-fontFamilyCode);\n font-size: 0.9em;\n }\n\n .doc-api-default {\n color: var(--doc-color-textTertiary);\n font-family: var(--doc-typography-fontFamilyCode);\n font-size: 0.9em;\n }\n\n .doc-api-required-yes {\n color: var(--doc-color-error);\n font-weight: var(--doc-typography-fontWeight-medium);\n }\n\n .doc-api-required-no {\n color: var(--doc-color-textTertiary);\n }\n\n .doc-api-deprecated {\n background: var(--doc-color-error);\n color: white;\n font-size: 0.8em;\n padding: 2px 4px;\n border-radius: 3px;\n margin-left: var(--doc-spacing-xs);\n }\n\n .doc-api-highlight {\n background: var(--doc-color-warning);\n color: var(--doc-color-background);\n padding: 2px 4px;\n border-radius: 3px;\n font-size: 0.9em;\n }\n\n .doc-api-empty {\n padding: var(--doc-spacing-xl);\n text-align: center;\n color: var(--doc-color-textSecondary);\n background: var(--doc-color-backgroundSecondary);\n border-radius: var(--doc-layout-borderRadius);\n }\n `,\n // 首页组件\n home: `\n .doc-home {\n padding: var(--doc-spacing-2xl) 0;\n }\n\n .doc-home-welcome {\n text-align: center;\n margin-bottom: var(--doc-spacing-4xl);\n }\n\n .doc-home-title {\n font-size: var(--doc-typography-fontSize-4xl);\n font-weight: var(--doc-typography-fontWeight-bold);\n color: var(--doc-color-text);\n margin-bottom: var(--doc-spacing-lg);\n }\n\n .doc-home-description {\n font-size: var(--doc-typography-fontSize-lg);\n color: var(--doc-color-textSecondary);\n line-height: var(--doc-typography-lineHeight-relaxed);\n max-width: 600px;\n margin: 0 auto var(--doc-spacing-lg);\n }\n\n .doc-home-version {\n font-size: var(--doc-typography-fontSize-sm);\n color: var(--doc-color-textTertiary);\n }\n\n .doc-home-version code {\n background: var(--doc-color-backgroundTertiary);\n padding: 2px 6px;\n border-radius: 3px;\n font-family: var(--doc-typography-fontFamilyCode);\n }\n\n .doc-home-section {\n margin-bottom: var(--doc-spacing-4xl);\n }\n\n .doc-home-section-title {\n font-size: var(--doc-typography-fontSize-2xl);\n font-weight: var(--doc-typography-fontWeight-semibold);\n color: var(--doc-color-text);\n margin-bottom: var(--doc-spacing-lg);\n text-align: center;\n }\n\n .doc-home-code {\n background: var(--doc-color-code-background);\n border: 1px solid var(--doc-color-border);\n border-radius: var(--doc-layout-borderRadius);\n padding: var(--doc-spacing-lg);\n font-family: var(--doc-typography-fontFamilyCode);\n font-size: var(--doc-typography-fontSize-sm);\n overflow-x: auto;\n }\n\n .doc-home-features {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));\n gap: var(--doc-spacing-xl);\n margin-top: var(--doc-spacing-lg);\n }\n\n .doc-home-feature {\n text-align: center;\n padding: var(--doc-spacing-lg);\n }\n\n .doc-home-feature-icon {\n font-size: var(--doc-typography-fontSize-3xl);\n margin-bottom: var(--doc-spacing-md);\n }\n\n .doc-home-feature-title {\n font-size: var(--doc-typography-fontSize-lg);\n font-weight: var(--doc-typography-fontWeight-medium);\n color: var(--doc-color-text);\n margin-bottom: var(--doc-spacing-sm);\n }\n\n .doc-home-feature-description {\n color: var(--doc-color-textSecondary);\n line-height: var(--doc-typography-lineHeight-relaxed);\n }\n\n .doc-home-components {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));\n gap: var(--doc-spacing-lg);\n margin-top: var(--doc-spacing-lg);\n }\n\n .doc-home-component-card {\n background: var(--doc-color-background);\n border: 1px solid var(--doc-color-border);\n border-radius: var(--doc-layout-borderRadius);\n padding: var(--doc-spacing-lg);\n transition: all 0.2s ease;\n }\n\n .doc-home-component-card:hover {\n box-shadow: var(--doc-layout-boxShadow);\n border-color: var(--doc-color-primary);\n }\n\n .doc-home-component-title a {\n color: var(--doc-color-text);\n text-decoration: none;\n font-weight: var(--doc-typography-fontWeight-medium);\n font-size: var(--doc-typography-fontSize-lg);\n }\n\n .doc-home-component-title a:hover {\n color: var(--doc-color-primary);\n }\n\n .doc-home-component-description {\n color: var(--doc-color-textSecondary);\n margin: var(--doc-spacing-sm) 0;\n line-height: var(--doc-typography-lineHeight-relaxed);\n }\n\n .doc-home-component-meta {\n display: flex;\n justify-content: space-between;\n align-items: center;\n font-size: var(--doc-typography-fontSize-sm);\n color: var(--doc-color-textTertiary);\n margin-top: var(--doc-spacing-md);\n }\n `\n }\n};\n","/**\n * 主题管理器\n * 负责管理文档站点的主题系统\n */\n\nimport defaultTheme from '../themes/default';\nimport type { Theme } from '../types';\n\nexport default class ThemeManager {\n private configManager: any;\n private themes: Map<string, Theme>;\n private currentTheme: Theme | null;\n private styleElement: HTMLStyleElement | null;\n\n constructor(configManager: any) {\n this.configManager = configManager;\n this.themes = new Map();\n this.currentTheme = null;\n this.styleElement = null;\n\n // 注册默认主题\n this.registerTheme('default', defaultTheme);\n\n // 初始化主题\n this.initialize();\n }\n\n /**\n * 初始化主题管理器\n */\n initialize() {\n const themeConfig = this.configManager.get('theme', {});\n const themeName = themeConfig.name || 'default';\n \n this.setTheme(themeName, themeConfig);\n }\n\n /**\n * 注册主题\n * @param {string} name - 主题名称\n * @param {Object} theme - 主题对象\n */\n registerTheme(name, theme) {\n this.themes.set(name, theme);\n }\n\n /**\n * 设置当前主题\n * @param {string|Object} theme - 主题名称或主题对象\n * @param {Object} customConfig - 自定义配置\n */\n setTheme(theme, customConfig = {}) {\n let themeData;\n\n if (typeof theme === 'string') {\n // 通过名称获取主题\n themeData = this.themes.get(theme);\n if (!themeData) {\n console.warn(`Theme \"${theme}\" not found, using default theme`);\n themeData = this.themes.get('default');\n }\n } else if (typeof theme === 'object') {\n // 直接使用主题对象\n themeData = theme;\n } else {\n console.warn('Invalid theme type, using default theme');\n themeData = this.themes.get('default');\n }\n\n // 合并自定义配置\n this.currentTheme = this.mergeTheme(themeData, customConfig);\n \n // 应用主题样式\n this.applyTheme();\n }\n\n /**\n * 合并主题配置\n * @param {Object} baseTheme - 基础主题\n * @param {Object} customConfig - 自定义配置\n * @returns {Object} 合并后的主题\n */\n mergeTheme(baseTheme, customConfig) {\n return {\n ...baseTheme,\n colors: {\n ...baseTheme.colors,\n ...customConfig.colors\n },\n typography: {\n ...baseTheme.typography,\n ...customConfig.typography\n },\n spacing: {\n ...baseTheme.spacing,\n ...customConfig.spacing\n },\n layout: {\n ...baseTheme.layout,\n ...customConfig.layout\n },\n components: {\n ...baseTheme.components,\n ...customConfig.components\n }\n };\n }\n\n /**\n * 应用主题样式\n */\n applyTheme() {\n if (!this.currentTheme) {\n return;\n }\n\n // 移除旧的样式\n if (this.styleElement) {\n this.styleElement.remove();\n }\n\n // 生成CSS变量\n const cssVariables = this.generateCSSVariables();\n \n // 生成主题样式\n const themeStyles = this.generateThemeStyles();\n \n // 创建样式元素\n this.styleElement = document.createElement('style');\n this.styleElement.setAttribute('data-doc-render-sdk-theme', 'true');\n this.styleElement.textContent = `\n :root {\n ${cssVariables}\n }\n \n ${themeStyles}\n `;\n \n // 插入到head中\n document.head.appendChild(this.styleElement);\n }\n\n /**\n * 生成CSS变量\n * @returns {string} CSS变量字符串\n */\n generateCSSVariables() {\n const { colors, typography, spacing, layout } = this.currentTheme!;\n const variables: string[] = [];\n\n // 颜色变量\n if (colors) {\n Object.entries(colors).forEach(([key, value]) => {\n if (typeof value === 'object') {\n Object.entries(value).forEach(([subKey, subValue]) => {\n variables.push(`--doc-color-${key}-${subKey}: ${subValue};`);\n });\n } else {\n variables.push(`--doc-color-${key}: ${value};`);\n }\n });\n }\n\n // 字体变量\n if (typography) {\n Object.entries(typography).forEach(([key, value]) => {\n if (typeof value === 'object') {\n Object.entries(value).forEach(([subKey, subValue]) => {\n variables.push(`--doc-typography-${key}-${subKey}: ${subValue};`);\n });\n } else {\n variables.push(`--doc-typography-${key}: ${value};`);\n }\n });\n }\n\n // 间距变量\n if (spacing) {\n Object.entries(spacing).forEach(([key, value]) => {\n variables.push(`--doc-spacing-${key}: ${value};`);\n });\n }\n\n // 布局变量\n if (layout) {\n Object.entries(layout).forEach(([key, value]) => {\n variables.push(`--doc-layout-${key}: ${value};`);\n });\n }\n\n return variables.join('\\n ');\n }\n\n /**\n * 生成主题样式\n * @returns {string} 主题样式字符串\n */\n generateThemeStyles() {\n const { components } = this.currentTheme!;\n const styles: string[] = [];\n\n // 基础样式\n styles.push(`\n .doc-render-sdk-container {\n font-family: var(--doc-typography-fontFamily, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif);\n font-size: var(--doc-typography-fontSize, 14px);\n line-height: var(--doc-typography-lineHeight, 1.5);\n color: var(--doc-color-text, #333);\n background-color: var(--doc-color-background, #fff);\n }\n `);\n\n // 组件样式\n if (components) {\n Object.entries(components).forEach(([componentName, componentStyles]) => {\n if (typeof componentStyles === 'string') {\n styles.push(componentStyles);\n } else if (typeof componentStyles === 'object') {\n // 将对象转换为CSS\n const cssRules = this.objectToCSS(componentStyles, `.doc-${componentName}`);\n styles.push(cssRules);\n }\n });\n }\n\n return styles.join('\\n');\n }\n\n /**\n * 将对象转换为CSS规则\n * @param {Object} obj - 样式对象\n * @param {string} selector - CSS选择器\n * @returns {string} CSS规则字符串\n */\n objectToCSS(obj, selector) {\n const rules: string[] = [];\n \n Object.entries(obj).forEach(([key, value]) => {\n if (typeof value === 'object') {\n // 嵌套选择器\n const nestedSelector = key.startsWith('&') \n ? key.replace('&', selector)\n : `${selector} ${key}`;\n rules.push(this.objectToCSS(value, nestedSelector));\n } else {\n // CSS属性\n const cssProperty = key.replace(/([A-Z])/g, '-$1').toLowerCase();\n rules.push(`${cssProperty}: ${value};`);\n }\n });\n\n return `${selector} {\\n ${rules.join('\\n ')}\\n}`;\n }\n\n /**\n * 获取当前主题\n * @returns {Object} 当前主题对象\n */\n getCurrentTheme() {\n return this.currentTheme;\n }\n\n /**\n * 获取主题变量值\n * @param {string} path - 变量路径\n * @param {*} defaultValue - 默认值\n * @returns {*} 变量值\n */\n getThemeValue(path, defaultValue) {\n const keys = path.split('.');\n let value = this.currentTheme;\n \n for (const key of keys) {\n if (value && typeof value === 'object' && key in value) {\n value = value[key];\n } else {\n return defaultValue;\n }\n }\n \n return value;\n }\n\n /**\n * 获取所有注册的主题\n * @returns {Array} 主题名称数组\n */\n getAvailableThemes() {\n return Array.from(this.themes.keys());\n }\n\n /**\n * 销毁主题管理器\n */\n destroy() {\n if (this.styleElement) {\n this.styleElement.remove();\n this.styleElement = null;\n }\n this.themes.clear();\n this.currentTheme = null;\n }\n}\n","/**\n * 插件管理器\n * 负责管理文档站点的插件系统\n */\n\nexport default class PluginManager {\n configManager: any;\n plugins: Map<any, any>;\n hooks: Map<any, any>;\n renderer: any;\n constructor(configManager) {\n this.configManager = configManager;\n this.plugins = new Map();\n this.hooks = new Map();\n this.renderer = null;\n }\n\n /**\n * 初始化插件管理器\n * @param {DocRenderer} renderer - 文档渲染器实例\n */\n initialize(renderer) {\n this.renderer = renderer;\n \n // 加载配置中的插件\n const pluginConfigs = this.configManager.get('plugins', []);\n pluginConfigs.forEach(pluginConfig => {\n this.loadPlugin(pluginConfig);\n });\n }\n\n /**\n * 注册插件\n * @param {Object} plugin - 插件对象\n * @returns {boolean} 注册是否成功\n */\n register(plugin) {\n try {\n // 验证插件\n if (!this.validatePlugin(plugin)) {\n return false;\n }\n\n const { name, version = '1.0.0' } = plugin;\n \n // 检查插件是否已存在\n if (this.plugins.has(name)) {\n console.warn(`Plugin \"${name}\" already registered`);\n return false;\n }\n\n // 存储插件\n this.plugins.set(name, {\n ...plugin,\n version,\n status: 'registered'\n });\n\n // 如果渲染器已初始化,立即激活插件\n if (this.renderer) {\n this.activatePlugin(name);\n }\n\n return true;\n } catch (error) {\n console.error(`Failed to register plugin:`, error);\n return false;\n }\n }\n\n /**\n * 加载插件\n * @param {Object|string} pluginConfig - 插件配置或插件名称\n */\n async loadPlugin(pluginConfig) {\n try {\n let plugin;\n\n if (typeof pluginConfig === 'string') {\n // 通过名称加载插件\n plugin = await this.loadPluginByName(pluginConfig);\n } else if (typeof pluginConfig === 'object') {\n if (pluginConfig.name && !pluginConfig.install) {\n // 配置对象,需要加载插件\n plugin = await this.loadPluginByName(pluginConfig.name);\n plugin.config = pluginConfig.config || {};\n } else {\n // 直接的插件对象\n plugin = pluginConfig;\n }\n }\n\n if (plugin) {\n this.register(plugin);\n }\n } catch (error) {\n console.error(`Failed to load plugin:`, error);\n }\n }\n\n /**\n * 通过名称加载插件\n * @param {string} name - 插件名称\n * @returns {Object} 插件对象\n */\n async loadPluginByName(name) {\n // 尝试从全局注册的插件中获取\n // @ts-expect-error\n const globalPlugin = window.__DOC_SDK_PLUGINS__?.[name];\n if (globalPlugin) {\n return globalPlugin;\n }\n\n // 尝试动态导入 (暂时禁用以避免构建错误)\n // try {\n // const module = await import(`../plugins/${name}`);\n // return module.default || module;\n // } catch (error) {\n // throw new Error(`Plugin \"${name}\" not found`);\n // }\n\n throw new Error(`Plugin \"${name}\" not found`);\n }\n\n /**\n * 激活插件\n * @param {string} name - 插件名称\n */\n activatePlugin(name) {\n const plugin = this.plugins.get(name);\n if (!plugin || plugin.status === 'active') {\n return;\n }\n\n try {\n // 创建插件上下文\n const context = this.createPluginContext(plugin);\n\n // 调用插件的install方法\n if (typeof plugin.install === 'function') {\n plugin.install(context);\n }\n\n // 更新插件状态\n plugin.status = 'active';\n \n console.log(`Plugin \"${name}\" activated`);\n } catch (error) {\n console.error(`Failed to activate plugin \"${name}\":`, error);\n plugin.status = 'error';\n }\n }\n\n /**\n * 停用插件\n * @param {string} name - 插件名称\n */\n deactivatePlugin(name) {\n const plugin = this.plugins.get(name);\n if (!plugin || plugin.status !== 'active') {\n return;\n }\n\n try {\n // 调用插件的uninstall方法\n if (typeof plugin.uninstall === 'function') {\n plugin.uninstall();\n }\n\n // 移除插件注册的钩子\n this.removePluginHooks(name);\n\n // 更新插件状态\n plugin.status = 'inactive';\n \n console.log(`Plugin \"${name}\" deactivated`);\n } catch (error) {\n console.error(`Failed to deactivate plugin \"${name}\":`, error);\n }\n }\n\n /**\n * 创建插件上下文\n * @param {Object} plugin - 插件对象\n * @returns {Object} 插件上下文\n */\n createPluginContext(plugin) {\n return {\n // 插件信息\n plugin: {\n name: plugin.name,\n version: plugin.version,\n config: plugin.config || {}\n },\n \n // 渲染器实例\n renderer: this.renderer,\n \n // 配置管理器\n config: this.configManager,\n \n // 主题管理器\n theme: this.renderer?.themeManager,\n \n // 组件注册表\n components: this.renderer.componentRegistry,\n \n // 路由管理器\n router: this.renderer.routerManager,\n \n // 钩子系统\n hooks: {\n add: this.addHook.bind(this),\n remove: this.removeHook.bind(this),\n call: this.callHook.bind(this)\n },\n \n // 事件系统\n events: {\n on: this.renderer.on.bind(this.renderer),\n off: this.renderer.off.bind(this.renderer),\n emit: this.renderer.emit.bind(this.renderer)\n }\n };\n }\n\n /**\n * 添加钩子\n * @param {string} hookName - 钩子名称\n * @param {Function} handler - 处理函数\n * @param {string} pluginName - 插件名称\n */\n addHook(hookName, handler, pluginName) {\n if (!this.hooks.has(hookName)) {\n this.hooks.set(hookName, []);\n }\n \n this.hooks.get(hookName).push({\n handler,\n plugin: pluginName\n });\n }\n\n /**\n * 移除钩子\n * @param {string} hookName - 钩子名称\n * @param {Function} handler - 处理函数\n */\n removeHook(hookName, handler) {\n const hooks = this.hooks.get(hookName);\n if (hooks) {\n const index = hooks.findIndex(hook => hook.handler === handler);\n if (index !== -1) {\n hooks.splice(index, 1);\n }\n }\n }\n\n /**\n * 移除插件的所有钩子\n * @param {string} pluginName - 插件名称\n */\n removePluginHooks(pluginName) {\n this.hooks.forEach((hooks, hookName) => {\n const filteredHooks = hooks.filter(hook => hook.plugin !== pluginName);\n this.hooks.set(hookName, filteredHooks);\n });\n }\n\n /**\n * 调用钩子\n * @param {string} hookName - 钩子名称\n * @param {...any} args - 参数\n * @returns {Array} 钩子返回值数组\n */\n callHook(hookName, ...args) {\n const hooks = this.hooks.get(hookName);\n if (!hooks || hooks.length === 0) {\n return [];\n }\n\n const results: any[] = [];\n hooks.forEach(({ handler, plugin }) => {\n try {\n const result = handler(...args);\n results.push(result);\n } catch (error) {\n console.error(`Hook \"${hookName}\" error in plugin \"${plugin}\":`, error);\n }\n });\n\n return results;\n }\n\n /**\n * 验证插件\n * @param {Object} plugin - 插件对象\n * @returns {boolean} 是否有效\n */\n validatePlugin(plugin) {\n if (!plugin || typeof plugin !== 'object') {\n console.error('Plugin must be an object');\n return false;\n }\n\n if (!plugin.name || typeof plugin.name !== 'string') {\n console.error('Plugin must have a name');\n return false;\n }\n\n if (!plugin.install || typeof plugin.install !== 'function') {\n console.error('Plugin must have an install function');\n return false;\n }\n\n return true;\n }\n\n /**\n * 获取插件信息\n * @param {string} name - 插件名称\n * @returns {Object|null} 插件信息\n */\n getPlugin(name) {\n return this.plugins.get(name) || null;\n }\n\n /**\n * 获取所有插件\n * @returns {Array} 插件数组\n */\n getPlugins() {\n return Array.from(this.plugins.values());\n }\n\n /**\n * 获取活跃插件\n * @returns {Array} 活跃插件数组\n */\n getActivePlugins() {\n return this.getPlugins().filter(plugin => plugin.status === 'active');\n }\n\n /**\n * 销毁插件管理器\n */\n destroy() {\n // 停用所有插件\n this.plugins.forEach((plugin, name) => {\n if (plugin.status === 'active') {\n this.deactivatePlugin(name);\n }\n });\n\n this.plugins.clear();\n this.hooks.clear();\n this.renderer = null;\n }\n}\n","/**\n * 文档渲染SDK入口文件\n * @author Doc SDK Team\n */\n\nimport DocRenderer from './core/DocRenderer';\nimport ConfigManager from './core/ConfigManager';\nimport ThemeManager from './core/ThemeManager';\nimport PluginManager from './core/PluginManager';\nimport type { DocConfig, Plugin, Theme } from './types';\n\n// 导出核心类\nexport { DocRenderer, ConfigManager, ThemeManager, PluginManager };\n\n// 导出组件\nexport { default as Layout } from './components/Layout';\nexport { default as Navigation } from './components/Navigation';\nexport { default as Demo } from './components/Demo';\nexport { default as ApiDoc } from './components/ApiDoc';\nexport { default as CodeBlock } from './components/CodeBlock';\n\n// 导出插件\nexport * from './plugin';\n\n// 导出类型\nexport type * from './types';\n\n// 默认导出主类\nexport default class DocSDK {\n private configManager: ConfigManager;\n private themeManager: ThemeManager;\n private pluginManager: PluginManager;\n private renderer: DocRenderer;\n\n constructor(config: Partial<DocConfig> = {}) {\n this.configManager = new ConfigManager(config);\n this.themeManager = new ThemeManager(this.configManager);\n this.pluginManager = new PluginManager(this.configManager);\n this.renderer = new DocRenderer({\n configManager: this.configManager,\n themeManager: this.themeManager,\n pluginManager: this.pluginManager\n });\n }\n\n /**\n * 渲染文档到指定容器\n */\n async render(target: string | HTMLElement): Promise<void> {\n await this.renderer.render(target);\n }\n\n /**\n * 销毁文档实例\n */\n destroy(): void {\n this.renderer.destroy();\n }\n\n /**\n * 更新配置\n */\n updateConfig(config: Partial<DocConfig>): void {\n this.configManager.update(config);\n this.renderer.update();\n }\n\n /**\n * 注册插件\n */\n use(plugin: Plugin): this {\n this.pluginManager.register(plugin);\n return this;\n }\n\n /**\n * 设置主题\n */\n setTheme(theme: Theme | string): void {\n this.themeManager.setTheme(theme);\n this.renderer.update();\n }\n\n /**\n * 获取当前配置\n */\n getConfig(): DocConfig {\n return this.configManager.getConfig();\n }\n\n /**\n * 监听事件\n */\n on(event: string, handler: Function): void {\n // TODO: 实现事件监听\n }\n\n /**\n * 移除事件监听\n */\n off(event: string, handler: Function): void {\n // TODO: 实现事件移除\n }\n\n /**\n * 触发事件\n */\n emit(event: string, data?: any): void {\n // TODO: 实现事件触发\n }\n}"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "doc-render-sdk",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.15",
|
|
4
4
|
"description": "A powerful documentation rendering SDK for component libraries",
|
|
5
5
|
"main": "dist/index.mjs",
|
|
6
6
|
"module": "dist/index.mjs",
|
|
@@ -19,12 +19,23 @@
|
|
|
19
19
|
"default": "./dist/plugin/index.mjs"
|
|
20
20
|
}
|
|
21
21
|
},
|
|
22
|
+
"packageManager": "pnpm@10.9.0",
|
|
22
23
|
"files": [
|
|
23
24
|
"dist"
|
|
24
25
|
],
|
|
25
26
|
"bin": {
|
|
26
27
|
"doc-render-sdk": "./bin/doc-render-sdk.js"
|
|
27
28
|
},
|
|
29
|
+
"scripts": {
|
|
30
|
+
"prepublishOnly": "npm run build",
|
|
31
|
+
"sdk:dev": "robuild --watch",
|
|
32
|
+
"dev": "turbo run sdk:dev playground:dev --parallel",
|
|
33
|
+
"build": "robuild",
|
|
34
|
+
"prepublish": "pnpm build",
|
|
35
|
+
"release": "changelogen --release && pnpm publish --no-git-checks",
|
|
36
|
+
"commit": "git-cz",
|
|
37
|
+
"playground:dev": "cd playground && pnpm dev"
|
|
38
|
+
},
|
|
28
39
|
"keywords": [
|
|
29
40
|
"documentation",
|
|
30
41
|
"component",
|
|
@@ -48,6 +59,12 @@
|
|
|
48
59
|
"react-dom": ">=16.8.0"
|
|
49
60
|
},
|
|
50
61
|
"dependencies": {
|
|
62
|
+
"@codemirror/basic-setup": "^0.20.0",
|
|
63
|
+
"@codemirror/commands": "^6.10.1",
|
|
64
|
+
"@codemirror/lang-javascript": "^6.2.4",
|
|
65
|
+
"@codemirror/state": "^6.5.4",
|
|
66
|
+
"@codemirror/theme-one-dark": "^6.1.3",
|
|
67
|
+
"@codemirror/view": "^6.39.11",
|
|
51
68
|
"commander": "^11.0.0",
|
|
52
69
|
"express": "^4.18.0",
|
|
53
70
|
"lodash-es": "^4.17.21"
|
|
@@ -65,14 +82,5 @@
|
|
|
65
82
|
"turbo": "^2.5.6",
|
|
66
83
|
"typescript": "^5.1.0",
|
|
67
84
|
"vite": "7.1.8"
|
|
68
|
-
},
|
|
69
|
-
"scripts": {
|
|
70
|
-
"sdk:dev": "robuild --watch",
|
|
71
|
-
"dev": "turbo run sdk:dev playground:dev --parallel",
|
|
72
|
-
"build": "robuild",
|
|
73
|
-
"prepublish": "pnpm build",
|
|
74
|
-
"release": "changelogen --release && pnpm publish --no-git-checks",
|
|
75
|
-
"commit": "git-cz",
|
|
76
|
-
"playground:dev": "cd playground && pnpm dev"
|
|
77
85
|
}
|
|
78
|
-
}
|
|
86
|
+
}
|