@mdxui/do 4.0.0 → 4.0.8
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/app/index.d.ts +32 -186
- package/dist/app/index.js +19 -11
- package/dist/auth/index.d.ts +48 -0
- package/dist/auth/index.js +4 -0
- package/dist/{breadcrumbs-C9Qn3S7d.d.ts → breadcrumbs-DltlCiHt.d.ts} +3 -3
- package/dist/chunk-2FWXT4HH.js +576 -0
- package/dist/chunk-2FWXT4HH.js.map +1 -0
- package/dist/chunk-5PC6U46L.js +604 -0
- package/dist/chunk-5PC6U46L.js.map +1 -0
- package/dist/chunk-63VCRTDQ.js +2505 -0
- package/dist/chunk-63VCRTDQ.js.map +1 -0
- package/dist/chunk-7J3RSIG4.js +178 -0
- package/dist/chunk-7J3RSIG4.js.map +1 -0
- package/dist/chunk-7QCTRNEJ.js +173 -0
- package/dist/chunk-7QCTRNEJ.js.map +1 -0
- package/dist/chunk-7TFHUKS7.js +66 -0
- package/dist/chunk-7TFHUKS7.js.map +1 -0
- package/dist/{chunk-LJIWB7KE.js → chunk-BU5HMHGQ.js} +3 -3
- package/dist/chunk-BU5HMHGQ.js.map +1 -0
- package/dist/{chunk-GGO5GW72.js → chunk-BZURBNFD.js} +305 -51
- package/dist/chunk-BZURBNFD.js.map +1 -0
- package/dist/{chunk-NA652ART.js → chunk-FM2RTAHV.js} +5 -65
- package/dist/chunk-FM2RTAHV.js.map +1 -0
- package/dist/{chunk-WMNT4OIE.js → chunk-HC4PBXV4.js} +131 -58
- package/dist/chunk-HC4PBXV4.js.map +1 -0
- package/dist/{chunk-Y52IEYVM.js → chunk-JPZ6RZJE.js} +78 -45
- package/dist/chunk-JPZ6RZJE.js.map +1 -0
- package/dist/{chunk-OVLO7UOH.js → chunk-KLN5OTQH.js} +168 -361
- package/dist/chunk-KLN5OTQH.js.map +1 -0
- package/dist/chunk-LCYBQR35.js +79 -0
- package/dist/chunk-LCYBQR35.js.map +1 -0
- package/dist/chunk-PJYGRD7N.js +216 -0
- package/dist/chunk-PJYGRD7N.js.map +1 -0
- package/dist/chunk-QEXY4FZV.js +292 -0
- package/dist/chunk-QEXY4FZV.js.map +1 -0
- package/dist/chunk-SX4IIE2R.js +53 -0
- package/dist/chunk-SX4IIE2R.js.map +1 -0
- package/dist/chunk-UCWMSKCW.js +901 -0
- package/dist/chunk-UCWMSKCW.js.map +1 -0
- package/dist/{chunk-5SHZZC7L.js → chunk-WC6SFBAF.js} +59 -6
- package/dist/chunk-WC6SFBAF.js.map +1 -0
- package/dist/chunk-WIKU77ZY.js +18 -0
- package/dist/chunk-WIKU77ZY.js.map +1 -0
- package/dist/chunk-X3AWNFBF.js +47 -0
- package/dist/chunk-X3AWNFBF.js.map +1 -0
- package/dist/chunk-ZZTQGMLX.js +23 -0
- package/dist/chunk-ZZTQGMLX.js.map +1 -0
- package/dist/{lib → client}/index.d.ts +97 -345
- package/dist/client/index.js +3 -0
- package/dist/common-DW_JM2dW.d.ts +454 -0
- package/dist/components/index.d.ts +11 -2
- package/dist/components/index.js +8 -3
- package/dist/{config-CxvpD8Y6.d.ts → config-DB14_LhF.d.ts} +1 -1
- package/dist/{do-D27i5bU0.d.ts → do-D37hbmL9.d.ts} +6 -14
- package/dist/dotdo-client-2DkwXHM2.d.ts +344 -0
- package/dist/errors-BOY11CJs.d.ts +373 -0
- package/dist/features/data-browser/index.d.ts +51 -0
- package/dist/features/data-browser/index.js +12 -0
- package/dist/features/data-browser/index.js.map +1 -0
- package/dist/features/data-grid/index.d.ts +22 -0
- package/dist/features/data-grid/index.js +12 -0
- package/dist/features/data-grid/index.js.map +1 -0
- package/dist/features/document-editor/index.d.ts +26 -0
- package/dist/features/document-editor/index.js +12 -0
- package/dist/features/document-editor/index.js.map +1 -0
- package/dist/features/function-editor/index.d.ts +215 -0
- package/dist/features/function-editor/index.js +7 -0
- package/dist/features/function-editor/index.js.map +1 -0
- package/dist/hooks/index.d.ts +64 -7
- package/dist/hooks/index.js +8 -7
- package/dist/hooks/things/index.d.ts +5 -297
- package/dist/hooks/things/index.js +6 -6
- package/dist/index-C0m9UI6W.d.ts +444 -0
- package/dist/index.d.ts +42 -32
- package/dist/index.js +21 -13
- package/dist/providers/index.d.ts +16 -28
- package/dist/providers/index.js +3 -3
- package/dist/schemas/index.d.ts +4551 -109
- package/dist/schemas/index.js +2 -260
- package/dist/schemas/index.js.map +1 -1
- package/dist/shell/index.d.ts +92 -0
- package/dist/shell/index.js +6 -0
- package/dist/shell/index.js.map +1 -0
- package/dist/{thing-BF25aUtJ.d.ts → thing-Dc3AE2XI.d.ts} +22 -22
- package/dist/thing-adapters-aMjF0h9u.d.ts +1214 -0
- package/dist/types/index.d.ts +954 -7521
- package/dist/types/index.js +2 -2
- package/dist/ui-filters-BvrjMP_U.d.ts +108 -0
- package/dist/{errors-DratdVIz.d.ts → utils/index.d.ts} +38 -77
- package/dist/utils/index.js +4 -0
- package/dist/utils/index.js.map +1 -0
- package/dist-app/assets/index-DWX3479M.js +7 -0
- package/dist-app/assets/index-DWX3479M.js.map +1 -0
- package/dist-app/assets/main-BptePr_C.js +318 -0
- package/dist-app/assets/main-BptePr_C.js.map +1 -0
- package/dist-app/assets/main-CS9jgKzj.css +1 -0
- package/dist-app/index.html +38 -0
- package/package.json +32 -19
- package/dist/agents-2_r9e9i7.d.ts +0 -1043
- package/dist/capnweb-client-Bq78FtEA.d.ts +0 -229
- package/dist/chunk-3XKYQRXY.js +0 -192
- package/dist/chunk-3XKYQRXY.js.map +0 -1
- package/dist/chunk-4KXVN3EQ.js +0 -56
- package/dist/chunk-4KXVN3EQ.js.map +0 -1
- package/dist/chunk-5SHZZC7L.js.map +0 -1
- package/dist/chunk-7UFINK3Q.js +0 -1994
- package/dist/chunk-7UFINK3Q.js.map +0 -1
- package/dist/chunk-GGO5GW72.js.map +0 -1
- package/dist/chunk-JJLAES6W.js +0 -76
- package/dist/chunk-JJLAES6W.js.map +0 -1
- package/dist/chunk-KT52UU3U.js +0 -985
- package/dist/chunk-KT52UU3U.js.map +0 -1
- package/dist/chunk-LJIWB7KE.js.map +0 -1
- package/dist/chunk-NA652ART.js.map +0 -1
- package/dist/chunk-OVLO7UOH.js.map +0 -1
- package/dist/chunk-VRLUXCLD.js +0 -31
- package/dist/chunk-VRLUXCLD.js.map +0 -1
- package/dist/chunk-WMNT4OIE.js.map +0 -1
- package/dist/chunk-Y52IEYVM.js.map +0 -1
- package/dist/lib/index.js +0 -6
- package/dist/query-keys-CZNFikIi.d.ts +0 -153
- package/dist/views/index.d.ts +0 -131
- package/dist/views/index.js +0 -11
- /package/dist/{lib → auth}/index.js.map +0 -0
- /package/dist/{views → client}/index.js.map +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/client/dotdo-client.ts","../src/client/mock-data.ts","../src/client/mock-client.ts","../src/client/fetch.ts"],"names":["options"],"mappings":";;;AA6FA,SAAS,gBAAA,CACR,MACA,SAAA,EACyB;AAEzB,EAAA,IAAI,CAAC,IAAA,IAAQ,OAAO,IAAA,KAAS,QAAA,EAAU;AACtC,IAAA,OAAO,IAAA;AAAA,EACR;AAGA,EAAA,MAAM;AAAA,IACL,EAAA;AAAA,IACA,GAAA;AAAA;AAAA,IACA,KAAA;AAAA,IACA,IAAA;AAAA,IACA,SAAA;AAAA,IACA,SAAA;AAAA,IACA,IAAA;AAAA;AAAA,IACA,GAAG;AAAA,GACJ,GAAI,IAAA;AAGJ,EAAA,MAAM,QAAA,GAAW,GAAA,IAAO,EAAA,IAAM,MAAA,CAAO,UAAA,EAAW;AAGhD,EAAA,MAAM,IAAA,GACL,KAAA,IAAW,IAAA,CAAiC,IAAA,IAAmB,SAAA;AAGhE,EAAA,MAAM,UAAA,GACL,IAAA,IAAQ,OAAO,IAAA,KAAS,WAAW,IAAA,GAAO,QAAA;AAI3C,EAAA,MAAM,cACL,IAAA,IACC,UAAA,CAAW,SACX,UAAA,CAAW,KAAA,IACX,WAAW,WAAA,IACX,UAAA,CAAW,SACX,UAAA,CAAW,QAAA,IACZ,GAAG,IAAI,CAAA,CAAA,EAAI,SAAS,KAAA,CAAM,CAAA,EAAG,CAAC,CAAC,CAAA,CAAA;AAEhC,EAAA,OAAO;AAAA,IACN,EAAA,EAAI,QAAA;AAAA,IACJ,EAAA,EAAI,SAAA;AAAA,IACJ,IAAA;AAAA,IACA,IAAA,EAAM,WAAA;AAAA,IACN,WAAW,SAAA,GAAY,IAAI,KAAK,SAAS,CAAA,uBAAQ,IAAA,EAAK;AAAA,IACtD,WAAW,SAAA,GAAY,IAAI,KAAK,SAAS,CAAA,uBAAQ,IAAA,EAAK;AAAA,IACtD,IAAA,EAAM;AAAA,GACP;AACD;AA6CO,SAAS,cAAA,CACf,OAAA,EACA,OAAA,GAA4B,EAAC,EAC5B;AAED,EAAA,MAAM,MAAiB,iBAAA,CAAkB;AAAA,IACxC,OAAA,EAAS,OAAA;AAAA,IACT,OAAO,OAAA,CAAQ,SAAA;AAAA,IACf,SAAA,EAAW,QAAQ,SAAA,IAAa;AAAA,GAChC,CAAA;AAGD,EAAA,OAAO;AAAA;AAAA;AAAA;AAAA,IAIN,SAAA,EAAW;AAAA,MACV,MAAM,KAAK,OAAA,EAAuC;AACjD,QAAA,IAAI;AAEH,UAAA,MAAM,MAAA,GAAS,MAAM,GAAA,CAAI,UAAA,EAAY,IAAA,IAAO;AAC5C,UAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA,EAAG;AAC1B,YAAA,OAAO,MAAA;AAAA,UACR;AACA,UAAA,IAAI,QAAQ,KAAA,EAAO;AAClB,YAAA,OAAO,MAAA,CAAO,KAAA;AAAA,UACf;AAEA,UAAA,OAAO,CAAC,EAAE,EAAA,EAAI,SAAA,EAAW,IAAA,EAAM,WAAW,CAAA;AAAA,QAC3C,CAAA,CAAA,MAAQ;AACP,UAAA,OAAO,CAAC,EAAE,EAAA,EAAI,SAAA,EAAW,IAAA,EAAM,WAAW,CAAA;AAAA,QAC3C;AAAA,MACD;AAAA,KACD;AAAA;AAAA;AAAA;AAAA,IAKA,MAAA,EAAQ;AAAA,MACP,MAAM,SAAS,OAAA,EAA2B;AACzC,QAAA,IAAI;AAEH,UAAA,MAAM,MAAA,GAAS,MAAM,GAAA,CAAI,OAAA,EAAS,IAAA,IAAO;AACzC,UAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA,GAC/B,SACC,MAAA,EAAQ,KAAA,IAAS,MAAA,EAAQ,IAAA,IAAQ,EAAC;AAEtC,UAAA,OAAO;AAAA,YACN,UAAA,EAAY,CAAC,SAAS,CAAA;AAAA,YACtB,OAAO,KAAA,CAAM,GAAA;AAAA,cAAI,CAAC,CAAA,KACjB,OAAO,MAAM,QAAA,GAAW,CAAA,GAAM,GAAyB,IAAA,IAAQ;AAAA,aAChE;AAAA,YACA,OAAA,EAAS;AAAA,WACV;AAAA,QACD,SAAS,KAAA,EAAO;AACf,UAAA,OAAA,CAAQ,KAAA,CAAM,2CAA2C,KAAK,CAAA;AAC9D,UAAA,OAAO,EAAE,UAAA,EAAY,CAAC,SAAS,CAAA,EAAG,OAAO,EAAC,EAAG,OAAA,EAAS,EAAC,EAAE;AAAA,QAC1D;AAAA,MACD,CAAA;AAAA,MAEA,MAAM,IAAI,MAAA,EAAuC;AAChD,QAAA,IAAI;AACH,UAAA,MAAM,SAAS,MAAM,GAAA,CAAI,OAAA,EAAS,GAAA,GAAM,OAAO,IAAI,CAAA;AACnD,UAAA,OAAO,MAAA;AAAA,QACR,CAAA,CAAA,MAAQ;AACP,UAAA,OAAO,IAAA;AAAA,QACR;AAAA,MACD;AAAA,KACD;AAAA;AAAA;AAAA;AAAA,IAKA,KAAA,EAAO;AAAA,MACN,MAAM,MAAM,MAAA,EAAkD;AAC7D,QAAA,MAAM,EAAA,GAAK,OAAO,EAAA,IAAM,SAAA;AACxB,QAAA,IAAI;AAEH,UAAA,MAAM,MAAA,GAAS,MAAM,GAAA,CAAI,KAAA,EAAO,IAAA,IAAO;AACvC,UAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA,GAC/B,SACC,MAAA,EAAQ,KAAA,IAAS,MAAA,EAAQ,IAAA,IAAQ,EAAC;AAGtC,UAAA,IAAI,KAAA,CAAM,SAAS,CAAA,EAAG;AACrB,YAAA,OAAO,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,KAAe;AAChC,cAAA,IAAI,OAAO,MAAM,QAAA,EAAU;AAC1B,gBAAA,OAAO,EAAE,IAAA,EAAM,CAAA,EAAG,EAAA,EAAG;AAAA,cACtB;AACA,cAAA,OAAO,EAAE,IAAA,EAAO,CAAA,EAAyB,IAAA,IAAQ,GAAG,EAAA,EAAG;AAAA,YACxD,CAAC,CAAA;AAAA,UACF;AAIA,UAAA,MAAM,YAAA,GAAgB,MAAM,GAAA,CAAI,MAAA,EAAQ,OAAO,EAAE,KAAA,EAAO,KAAM,CAAA;AAI9D,UAAA,IAAI,WAAyB,EAAC;AAE9B,UAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,YAAY,CAAA,EAAG;AAChC,YAAA,QAAA,GAAW,YAAA;AAAA,UACZ,WAAW,YAAA,EAAc;AACxB,YAAA,QAAA,GAAY,aAAa,IAAA,IACxB,YAAA,CAAa,KAAA,IACb,YAAA,CAAa,UACb,EAAC;AAAA,UACH;AAGA,UAAA,MAAM,WAAA,uBAAkB,GAAA,EAAY;AACpC,UAAA,KAAA,MAAW,QAAQ,QAAA,EAAU;AAC5B,YAAA,MAAM,IAAA,GACL,IAAA,CAAK,KAAA,IAAW,IAAA,CAAiC,IAAA;AAClD,YAAA,IAAI,IAAA,EAAM;AACT,cAAA,WAAA,CAAY,IAAI,IAAI,CAAA;AAAA,YACrB;AAAA,UACD;AAEA,UAAA,OAAO,MAAM,IAAA,CAAK,WAAW,CAAA,CAAE,GAAA,CAAI,CAAC,QAAA,MAAc;AAAA,YACjD,IAAA,EAAM,QAAA;AAAA,YACN;AAAA,WACD,CAAE,CAAA;AAAA,QACH,SAAS,KAAA,EAAO;AACf,UAAA,OAAA,CAAQ,KAAA,CAAM,oCAAoC,KAAK,CAAA;AACvD,UAAA,OAAO,EAAC;AAAA,QACT;AAAA,MACD,CAAA;AAAA,MAEA,MAAM,KAAK,MAAA,EAKR;AACF,QAAA,IAAI;AACH,UAAA,MAAM,EAAA,GAAK,OAAO,EAAA,IAAM,SAAA;AACxB,UAAA,MAAMA,WAAmC,EAAC;AAC1C,UAAA,IAAI,MAAA,CAAO,IAAA,EAAMA,QAAAA,CAAQ,OAAO,MAAA,CAAO,IAAA;AACvC,UAAA,IAAI,MAAA,CAAO,IAAA,EAAMA,QAAAA,CAAQ,QAAQ,MAAA,CAAO,IAAA;AACxC,UAAA,IAAI,OAAO,KAAA,KAAU,KAAA,CAAA,EAAWA,QAAAA,CAAQ,QAAQ,MAAA,CAAO,KAAA;AACvD,UAAA,IAAI,OAAO,MAAA,KAAW,KAAA,CAAA,EAAWA,QAAAA,CAAQ,SAAS,MAAA,CAAO,MAAA;AAEzD,UAAA,MAAM,MAAA,GAAU,MAAM,GAAA,CAAI,MAAA,EAAQ,OAAOA,QAAO,CAAA;AAKhD,UAAA,IAAI,WAAyB,EAAC;AAC9B,UAAA,IAAI,KAAA,GAAQ,CAAA;AAEZ,UAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA,EAAG;AAC1B,YAAA,QAAA,GAAW,MAAA;AACX,YAAA,KAAA,GAAQ,MAAA,CAAO,MAAA;AAAA,UAChB,WAAW,MAAA,EAAQ;AAClB,YAAA,QAAA,GAAY,OAAO,IAAA,IAClB,MAAA,CAAO,KAAA,IACP,MAAA,CAAO,UACP,EAAC;AACF,YAAA,KAAA,GAAQ,MAAA,CAAO,KAAA,IAAS,MAAA,CAAO,KAAA,IAAS,QAAA,CAAS,MAAA;AAAA,UAClD;AAGA,UAAA,MAAM,kBAAkB,QAAA,CAAS,GAAA;AAAA,YAAI,CAAC,IAAA,KACrC,gBAAA,CAAiB,IAAA,EAAM,EAAE;AAAA,WAC1B;AAEA,UAAA,OAAO,EAAE,IAAA,EAAM,eAAA,EAAiB,KAAA,EAAM;AAAA,QACvC,SAAS,KAAA,EAAO;AACf,UAAA,OAAA,CAAQ,KAAA,CAAM,sCAAsC,KAAK,CAAA;AACzD,UAAA,OAAO,EAAE,IAAA,EAAM,EAAC,EAAG,OAAO,CAAA,EAAE;AAAA,QAC7B;AAAA,MACD,CAAA;AAAA,MAEA,MAAM,IAAI,MAAA,EAAoD;AAC7D,QAAA,IAAI;AACH,UAAA,MAAM,EAAA,GAAK,OAAO,EAAA,IAAM,SAAA;AAGxB,UAAA,IAAI,SAAS,MAAM,GAAA,CAAI,MAAA,EAAQ,GAAA,GAAM,OAAO,EAAE,CAAA;AAG9C,UAAA,IAAI,CAAC,MAAA,IAAU,MAAA,CAAO,IAAA,EAAM;AAC3B,YAAA,MAAA,GAAS,MAAM,GAAA,CAAI,MAAA,EAAQ,GAAA,GAAM;AAAA,cAChC,IAAI,MAAA,CAAO,EAAA;AAAA,cACX,MAAM,MAAA,CAAO,IAAA;AAAA,cACb,OAAO,MAAA,CAAO;AAAA,aACd,CAAA;AAAA,UACF;AAEA,UAAA,IAAI,MAAA,EAAQ;AACX,YAAA,OAAO,gBAAA,CAAiB,QAAsB,EAAE,CAAA;AAAA,UACjD;AACA,UAAA,OAAO,IAAA;AAAA,QACR,CAAA,CAAA,MAAQ;AACP,UAAA,OAAO,IAAA;AAAA,QACR;AAAA,MACD,CAAA;AAAA,MAEA,MAAM,OAAO,MAAA,EAAsD;AAClE,QAAA,MAAM,OAAA,GAAU;AAAA,UACf,OAAO,MAAA,CAAO,IAAA;AAAA,UACd,GAAI,MAAA,CAAO;AAAA,SACZ;AACA,QAAA,MAAM,MAAA,GAAS,MAAM,GAAA,CAAI,MAAA,EAAQ,SAAS,OAAO,CAAA;AACjD,QAAA,OAAO,MAAA;AAAA,MACR,CAAA;AAAA,MAEA,MAAM,OAAO,MAAA,EAKV;AACF,QAAA,MAAM,OAAA,GAAU;AAAA,UACf,OAAO,MAAA,CAAO,IAAA;AAAA,UACd,IAAI,MAAA,CAAO,EAAA;AAAA,UACX,GAAI,MAAA,CAAO;AAAA,SACZ;AACA,QAAA,MAAM,SAAS,MAAM,GAAA,CAAI,QAAQ,MAAA,GAAS,MAAA,CAAO,IAAI,OAAO,CAAA;AAC5D,QAAA,OAAO,MAAA;AAAA,MACR,CAAA;AAAA,MAEA,MAAM,OAAO,MAAA,EAKV;AACF,QAAA,MAAM,GAAA,CAAI,MAAA,EAAQ,MAAA,GAAS,MAAA,CAAO,EAAE,CAAA;AACpC,QAAA,OAAO,EAAE,SAAS,IAAA,EAAK;AAAA,MACxB,CAAA;AAAA,MAEA,MAAM,SAAS,OAAA,EAAoD;AAElE,QAAA,OAAO,EAAC;AAAA,MACT,CAAA;AAAA,MAEA,MAAM,MAAM,OAAA,EAAyC;AACpD,QAAA,IAAI;AACH,UAAA,MAAMA,WAAmC,EAAC;AAC1C,UAAA,IAAI,OAAA,CAAQ,IAAA,EAAMA,QAAAA,CAAQ,OAAO,OAAA,CAAQ,IAAA;AAGzC,UAAA,MAAM,MAAA,GAAS,MAAM,GAAA,CAAI,MAAA,EAAQ,QAAQA,QAAO,CAAA;AAChD,UAAA,OAAO;AAAA,YACN,KAAA,EAAO,QAAQ,KAAA,IAAS,CAAA;AAAA,YACxB,MAAA,EAAQ,MAAA,EAAQ,MAAA,IAAU;AAAC,WAC5B;AAAA,QACD,SAAS,KAAA,EAAO;AACf,UAAA,OAAA,CAAQ,KAAA,CAAM,oCAAoC,KAAK,CAAA;AACvD,UAAA,OAAO,EAAE,KAAA,EAAO,CAAA,EAAG,MAAA,EAAQ,EAAC,EAAE;AAAA,QAC/B;AAAA,MACD,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,SAAA,CACC,SACA,UAAA,EAMC;AAGD,QAAA,OAAA,CAAQ,IAAA;AAAA,UACP;AAAA,SACD;AACA,QAAA,OAAO;AAAA,UACN,aAAa,MAAM;AAAA,UAEnB;AAAA,SACD;AAAA,MACD;AAAA,KACD;AAAA;AAAA;AAAA;AAAA,IAKA,GAAA,EAAK;AAAA,MACJ,MAAM,QAAQ,MAAA,EAGS;AACtB,QAAA,IAAI;AAEH,UAAA,MAAM,MAAA,GAAS,MAAM,GAAA,CAAI,GAAA,EAAK,UAAU,MAAA,CAAO,KAAA,EAAO,OAAO,MAAM,CAAA;AACnE,UAAA,OAAO;AAAA,YACN,IAAA,EAAM,MAAA,EAAQ,IAAA,IAAQ,EAAC;AAAA,YACvB,OAAA,EAAS,MAAA,EAAQ,OAAA,IAAW,EAAC;AAAA,YAC7B,cAAc,MAAA,EAAQ,YAAA;AAAA,YACtB,iBAAiB,MAAA,EAAQ;AAAA,WAC1B;AAAA,QACD,CAAA,CAAA,MAAQ;AACP,UAAA,MAAM,IAAI,MAAM,+CAA+C,CAAA;AAAA,QAChE;AAAA,MACD;AAAA,KACD;AAAA;AAAA;AAAA;AAAA,IAKA,GAAA,EAAK,MAAM,cAAA,CAAe,OAAA,EAAS,OAAO,CAAA;AAAA;AAAA;AAAA;AAAA,IAK1C,WAAA,EAAa,CAAC,SAAA,KAAwC;AAAA,IAGtD,CAAA;AAAA;AAAA;AAAA;AAAA,IAKA,CAAC,MAAA,CAAO,OAAO,GAAG,MAAM;AAEvB,MAAA,IAAI,GAAA,CAAI,KAAA,IAAS,OAAO,GAAA,CAAI,UAAU,UAAA,EAAY;AACjD,QAAA,GAAA,CAAI,KAAA,EAAM;AAAA,MACX;AAAA,IACD,CAAA;AAAA;AAAA;AAAA;AAAA,IAKA,IAAA,EAAM;AAAA,GACP;AACD;AAgBO,SAAS,UAAA,CAAW,KAAa,OAAA,EAA4B;AACnE,EAAA,OAAO,cAAA,CAAe,KAAK,OAAO,CAAA;AACnC;;;AC9gBA,IAAI,SAAA,GAAY,CAAA;AAEhB,SAAS,UAAA,CAAW,SAAS,MAAA,EAAgB;AAC3C,EAAA,OAAO,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,IAAA,CAAK,KAAI,CAAE,QAAA,CAAS,EAAE,CAAC,CAAA,CAAA,EAAA,CAAK,EAAE,SAAA,EAAW,QAAA,CAAS,EAAE,CAAC,CAAA,CAAA;AAC3E;AAMA,IAAM,cAAA,GAAqD;AAAA,EACzD,IAAA,EAAM;AAAA,IACJ,EAAE,IAAA,EAAM,OAAA,EAAS,OAAO,OAAA,EAAS,WAAA,EAAa,iBAAiB,aAAA,EAAe,CAAC,QAAQ,CAAA,EAAG,gBAAgB,CAAC,MAAM,GAAG,QAAA,EAAU,IAAA,EAAM,SAAS,KAAA,EAAM;AAAA,IACnJ,EAAE,IAAA,EAAM,MAAA,EAAQ,OAAO,MAAA,EAAQ,WAAA,EAAa,aAAa,aAAA,EAAe,CAAC,QAAQ,CAAA,EAAG,gBAAgB,CAAC,MAAM,GAAG,QAAA,EAAU,KAAA,EAAO,SAAS,KAAA,EAAM;AAAA,IAC9I,EAAE,IAAA,EAAM,QAAA,EAAU,OAAO,QAAA,EAAU,WAAA,EAAa,uBAAuB,aAAA,EAAe,CAAC,QAAQ,CAAA,EAAG,gBAAgB,CAAC,MAAM,GAAG,QAAA,EAAU,KAAA,EAAO,SAAS,KAAA,EAAM;AAAA,IAC5J,EAAE,IAAA,EAAM,QAAA,EAAU,OAAO,QAAA,EAAU,WAAA,EAAa,kBAAkB,aAAA,EAAe,CAAC,QAAQ,CAAA,EAAG,gBAAgB,CAAC,MAAM,GAAG,QAAA,EAAU,KAAA,EAAO,SAAS,KAAA;AAAM,GACzJ;AAAA,EACA,OAAA,EAAS;AAAA,IACP,EAAE,IAAA,EAAM,aAAA,EAAe,OAAO,aAAA,EAAe,WAAA,EAAa,uBAAuB,aAAA,EAAe,CAAC,QAAQ,CAAA,EAAG,gBAAgB,CAAC,SAAS,GAAG,QAAA,EAAU,KAAA,EAAO,SAAS,KAAA,EAAM;AAAA,IACzK,EAAE,IAAA,EAAM,QAAA,EAAU,OAAO,QAAA,EAAU,WAAA,EAAa,kBAAkB,aAAA,EAAe,CAAC,QAAQ,CAAA,EAAG,gBAAgB,CAAC,SAAS,GAAG,QAAA,EAAU,IAAA,EAAM,SAAS,KAAA,EAAM;AAAA,IACzJ,EAAE,IAAA,EAAM,OAAA,EAAS,OAAO,OAAA,EAAS,WAAA,EAAa,iBAAiB,aAAA,EAAe,CAAC,MAAM,CAAA,EAAG,gBAAgB,CAAC,SAAS,GAAG,QAAA,EAAU,IAAA,EAAM,SAAS,KAAA,EAAM;AAAA,IACpJ,EAAE,IAAA,EAAM,MAAA,EAAQ,OAAO,MAAA,EAAQ,WAAA,EAAa,gBAAgB,aAAA,EAAe,CAAC,QAAQ,CAAA,EAAG,gBAAgB,CAAC,SAAS,GAAG,QAAA,EAAU,KAAA,EAAO,SAAS,IAAA;AAAK,GACrJ;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,EAAE,IAAA,EAAM,aAAA,EAAe,OAAO,aAAA,EAAe,WAAA,EAAa,oBAAoB,aAAA,EAAe,CAAC,QAAQ,CAAA,EAAG,gBAAgB,CAAC,MAAM,GAAG,QAAA,EAAU,KAAA,EAAO,SAAS,KAAA,EAAM;AAAA,IACnK,EAAE,IAAA,EAAM,QAAA,EAAU,OAAO,QAAA,EAAU,WAAA,EAAa,eAAe,aAAA,EAAe,CAAC,QAAQ,CAAA,EAAG,gBAAgB,CAAC,MAAM,GAAG,QAAA,EAAU,IAAA,EAAM,SAAS,KAAA,EAAM;AAAA,IACnJ,EAAE,IAAA,EAAM,UAAA,EAAY,OAAO,UAAA,EAAY,WAAA,EAAa,iBAAiB,aAAA,EAAe,CAAC,QAAQ,CAAA,EAAG,gBAAgB,CAAC,MAAM,GAAG,QAAA,EAAU,KAAA,EAAO,SAAS,KAAA,EAAM;AAAA,IAC1J,EAAE,IAAA,EAAM,UAAA,EAAY,OAAO,UAAA,EAAY,WAAA,EAAa,iBAAiB,aAAA,EAAe,CAAC,MAAM,CAAA,EAAG,gBAAgB,CAAC,MAAM,GAAG,QAAA,EAAU,KAAA,EAAO,SAAS,KAAA,EAAM;AAAA,IACxJ,EAAE,IAAA,EAAM,SAAA,EAAW,OAAO,SAAA,EAAW,WAAA,EAAa,kBAAkB,aAAA,EAAe,CAAC,SAAS,CAAA,EAAG,gBAAgB,CAAC,MAAM,GAAG,QAAA,EAAU,KAAA,EAAO,SAAS,KAAA,EAAM;AAAA,IAC1J,EAAE,IAAA,EAAM,SAAA,EAAW,OAAO,UAAA,EAAY,WAAA,EAAa,iBAAiB,aAAA,EAAe,CAAC,MAAM,CAAA,EAAG,gBAAgB,CAAC,MAAM,GAAG,QAAA,EAAU,KAAA,EAAO,SAAS,KAAA;AAAM,GACzJ;AAAA,EACA,QAAA,EAAU;AAAA,IACR,EAAE,IAAA,EAAM,SAAA,EAAW,OAAO,SAAA,EAAW,WAAA,EAAa,oBAAoB,aAAA,EAAe,CAAC,QAAQ,CAAA,EAAG,gBAAgB,CAAC,UAAU,GAAG,QAAA,EAAU,IAAA,EAAM,SAAS,KAAA,EAAM;AAAA,IAC9J,EAAE,IAAA,EAAM,QAAA,EAAU,OAAO,QAAA,EAAU,WAAA,EAAa,kBAAkB,aAAA,EAAe,CAAC,QAAQ,CAAA,EAAG,gBAAgB,CAAC,UAAU,GAAG,QAAA,EAAU,KAAA,EAAO,SAAS,KAAA,EAAM;AAAA,IAC3J,EAAE,IAAA,EAAM,QAAA,EAAU,OAAO,QAAA,EAAU,WAAA,EAAa,mBAAmB,aAAA,EAAe,CAAC,MAAM,CAAA,EAAG,gBAAgB,CAAC,UAAU,GAAG,QAAA,EAAU,KAAA,EAAO,SAAS,KAAA,EAAM;AAAA,IAC1J,EAAE,IAAA,EAAM,MAAA,EAAQ,OAAO,MAAA,EAAQ,WAAA,EAAa,iBAAiB,aAAA,EAAe,CAAC,QAAQ,CAAA,EAAG,gBAAgB,CAAC,UAAU,GAAG,QAAA,EAAU,KAAA,EAAO,SAAS,IAAA;AAAK,GACvJ;AAAA,EACA,QAAA,EAAU;AAAA,IACR,EAAE,IAAA,EAAM,aAAA,EAAe,OAAO,aAAA,EAAe,WAAA,EAAa,wBAAwB,aAAA,EAAe,CAAC,QAAQ,CAAA,EAAG,gBAAgB,CAAC,UAAU,GAAG,QAAA,EAAU,KAAA,EAAO,SAAS,KAAA,EAAM;AAAA,IAC3K,EAAE,IAAA,EAAM,MAAA,EAAQ,OAAO,MAAA,EAAQ,WAAA,EAAa,iBAAiB,aAAA,EAAe,CAAC,QAAQ,CAAA,EAAG,gBAAgB,CAAC,UAAU,GAAG,QAAA,EAAU,IAAA,EAAM,SAAS,KAAA,EAAM;AAAA,IACrJ,EAAE,IAAA,EAAM,SAAA,EAAW,OAAO,SAAA,EAAW,WAAA,EAAa,qBAAqB,aAAA,EAAe,CAAC,QAAQ,CAAA,EAAG,gBAAgB,CAAC,UAAU,GAAG,QAAA,EAAU,IAAA,EAAM,SAAS,KAAA,EAAM;AAAA,IAC/J,EAAE,IAAA,EAAM,UAAA,EAAY,OAAO,UAAA,EAAY,WAAA,EAAa,kBAAkB,aAAA,EAAe,CAAC,QAAQ,CAAA,EAAG,gBAAgB,CAAC,UAAU,GAAG,QAAA,EAAU,KAAA,EAAO,SAAS,IAAA;AAAK,GAChK;AAAA,EACA,QAAA,EAAU;AAAA,IACR,EAAE,IAAA,EAAM,aAAA,EAAe,OAAO,aAAA,EAAe,WAAA,EAAa,wBAAwB,aAAA,EAAe,CAAC,QAAQ,CAAA,EAAG,gBAAgB,CAAC,UAAU,GAAG,QAAA,EAAU,KAAA,EAAO,SAAS,KAAA,EAAM;AAAA,IAC3K,EAAE,IAAA,EAAM,OAAA,EAAS,OAAO,OAAA,EAAS,WAAA,EAAa,kBAAkB,aAAA,EAAe,CAAC,QAAQ,CAAA,EAAG,gBAAgB,CAAC,UAAU,GAAG,QAAA,EAAU,IAAA,EAAM,SAAS,IAAA,EAAK;AAAA,IACvJ,EAAE,IAAA,EAAM,QAAA,EAAU,OAAO,QAAA,EAAU,WAAA,EAAa,mBAAmB,aAAA,EAAe,CAAC,QAAQ,CAAA,EAAG,gBAAgB,CAAC,UAAU,GAAG,QAAA,EAAU,IAAA,EAAM,SAAS,KAAA;AAAM,GAC7J;AAAA,EACA,KAAA,EAAO;AAAA,IACL,EAAE,IAAA,EAAM,aAAA,EAAe,OAAO,aAAA,EAAe,WAAA,EAAa,qBAAqB,aAAA,EAAe,CAAC,QAAQ,CAAA,EAAG,gBAAgB,CAAC,OAAO,GAAG,QAAA,EAAU,KAAA,EAAO,SAAS,KAAA,EAAM;AAAA,IACrK,EAAE,IAAA,EAAM,OAAA,EAAS,OAAO,OAAA,EAAS,WAAA,EAAa,YAAY,aAAA,EAAe,CAAC,QAAQ,CAAA,EAAG,gBAAgB,CAAC,OAAO,GAAG,QAAA,EAAU,IAAA,EAAM,SAAS,KAAA,EAAM;AAAA,IAC/I,EAAE,IAAA,EAAM,cAAA,EAAgB,OAAO,eAAA,EAAiB,WAAA,EAAa,uBAAuB,aAAA,EAAe,CAAC,QAAQ,CAAA,EAAG,gBAAgB,CAAC,OAAO,GAAG,QAAA,EAAU,KAAA,EAAO,SAAS,KAAA,EAAM;AAAA,IAC1K,EAAE,IAAA,EAAM,OAAA,EAAS,OAAO,OAAA,EAAS,WAAA,EAAa,mBAAmB,aAAA,EAAe,CAAC,QAAQ,CAAA,EAAG,gBAAgB,CAAC,OAAO,GAAG,QAAA,EAAU,KAAA,EAAO,SAAS,IAAA;AAAK;AAE1J,CAAA;AAEO,IAAM,UAAA,GAAa,MAAA,CAAO,IAAA,CAAK,cAAc;AAE7C,SAAS,mBAAmB,QAAA,EAAgC;AACjE,EAAA,MAAM,UAAA,GAAa,cAAA,CAAe,QAAQ,CAAA,IAAK,EAAC;AAChD,EAAA,OAAO;AAAA,IACL,SAAA,EAAW,SAAA;AAAA,IACX,IAAA,EAAM,QAAA;AAAA,IACN,EAAA,EAAI,WAAW,QAAQ,CAAA,CAAA;AAAA,IACvB,KAAA,EAAO,QAAA;AAAA,IACP,WAAA,EAAa,GAAG,QAAQ,CAAA,YAAA,CAAA;AAAA,IACxB,WAAA,EAAa,CAAC,OAAO,CAAA;AAAA,IACrB,UAAA;AAAA,IACA,UAAU;AAAC,GACb;AACF;AAMA,IAAM,UAAA,GAAa,CAAC,OAAA,EAAS,KAAA,EAAO,SAAA,EAAW,OAAA,EAAS,KAAA,EAAO,OAAA,EAAS,OAAA,EAAS,OAAA,EAAS,MAAA,EAAQ,MAAM,CAAA;AACxG,IAAM,SAAA,GAAY,CAAC,OAAA,EAAS,SAAA,EAAW,UAAA,EAAY,OAAA,EAAS,OAAA,EAAS,QAAA,EAAU,QAAA,EAAU,OAAA,EAAS,WAAA,EAAa,UAAU,CAAA;AACzH,IAAM,YAAA,GAAe,CAAC,QAAA,EAAU,SAAA,EAAW,QAAA,EAAU,SAAA,EAAW,SAAA,EAAW,SAAA,EAAW,QAAA,EAAU,QAAA,EAAU,OAAA,EAAS,SAAS,CAAA;AAC5H,IAAM,YAAA,GAAe,CAAC,WAAA,EAAa,KAAA,EAAO,QAAA,EAAU,QAAA,EAAU,QAAA,EAAU,MAAA,EAAQ,QAAA,EAAU,UAAA,EAAY,UAAA,EAAY,UAAU,CAAA;AAC5H,IAAM,QAAA,GAAW,CAAC,QAAA,EAAU,SAAA,EAAW,aAAa,UAAU,CAAA;AAC9D,IAAM,UAAA,GAAa,CAAC,KAAA,EAAO,QAAA,EAAU,QAAQ,UAAU,CAAA;AACvD,IAAM,KAAA,GAAQ,CAAC,OAAA,EAAS,QAAA,EAAU,UAAU,WAAW,CAAA;AAEvD,SAAS,WAAc,GAAA,EAAa;AAClC,EAAA,OAAO,GAAA,CAAI,KAAK,KAAA,CAAM,IAAA,CAAK,QAAO,GAAI,GAAA,CAAI,MAAM,CAAC,CAAA;AACnD;AAEA,SAAS,UAAA,CAAW,WAAW,EAAA,EAAU;AACvC,EAAA,MAAM,IAAA,uBAAW,IAAA,EAAK;AACtB,EAAA,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,OAAA,EAAQ,GAAI,IAAA,CAAK,MAAM,IAAA,CAAK,MAAA,EAAO,GAAI,QAAQ,CAAC,CAAA;AAClE,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,iBAAiB,EAAA,EAAoB;AAC5C,EAAA,MAAM,SAAA,GAAY,WAAW,UAAU,CAAA;AACvC,EAAA,MAAM,QAAA,GAAW,WAAW,SAAS,CAAA;AACrC,EAAA,MAAM,IAAA,GAAO,CAAA,EAAG,SAAS,CAAA,CAAA,EAAI,QAAQ,CAAA,CAAA;AACrC,EAAA,MAAM,GAAA,uBAAU,IAAA,EAAK;AACrB,EAAA,MAAM,OAAA,GAAU,WAAW,EAAE,CAAA;AAE7B,EAAA,OAAO;AAAA,IACL,EAAA,EAAI,SAAA;AAAA,IACJ,IAAA,EAAM,MAAA;AAAA,IACN,EAAA,EAAI,EAAA,IAAM,UAAA,CAAW,MAAM,CAAA;AAAA,IAC3B,EAAA,EAAI,GAAA;AAAA,IACJ,IAAA;AAAA,IACA,SAAA,EAAW,OAAA;AAAA,IACX,SAAA,EAAW,GAAA;AAAA,IACX,SAAA,EAAW,QAAA;AAAA,IACX,IAAA,EAAM;AAAA,MACJ,OAAA,EAAS,MAAA;AAAA,MACT,KAAA,EAAO,GAAG,SAAA,CAAU,WAAA,EAAa,CAAA,CAAA,EAAI,QAAA,CAAS,aAAa,CAAA,YAAA,CAAA;AAAA,MAC3D,IAAA,EAAM,WAAW,KAAK,CAAA;AAAA,MACtB,MAAA,EAAQ,mDAAmD,SAAS,CAAA,CAAA;AAAA,MACpE,MAAA,EAAQ,UAAA,CAAW,CAAC,QAAA,EAAU,UAAU,CAAC;AAAA;AAC3C,GACF;AACF;AAEA,SAAS,oBAAoB,EAAA,EAAoB;AAC/C,EAAA,MAAM,IAAA,GAAO,CAAA,QAAA,EAAW,UAAA,CAAW,YAAY,CAAC,CAAA,CAAA;AAChD,EAAA,MAAM,GAAA,uBAAU,IAAA,EAAK;AACrB,EAAA,MAAM,OAAA,GAAU,WAAW,EAAE,CAAA;AAE7B,EAAA,OAAO;AAAA,IACL,EAAA,EAAI,SAAA;AAAA,IACJ,IAAA,EAAM,SAAA;AAAA,IACN,EAAA,EAAI,EAAA,IAAM,UAAA,CAAW,MAAM,CAAA;AAAA,IAC3B,EAAA,EAAI,GAAA;AAAA,IACJ,IAAA;AAAA,IACA,SAAA,EAAW,OAAA;AAAA,IACX,SAAA,EAAW,GAAA;AAAA,IACX,SAAA,EAAW,QAAA;AAAA,IACX,IAAA,EAAM;AAAA,MACJ,OAAA,EAAS,SAAA;AAAA,MACT,WAAA,EAAa,KAAK,UAAA,CAAW,CAAC,OAAO,QAAA,EAAU,KAAA,EAAO,QAAQ,IAAI,CAAC,CAAC,CAAA,oBAAA,EAAuB,UAAA,CAAW,CAAC,aAAA,EAAe,aAAA,EAAe,mBAAmB,YAAA,EAAc,WAAW,CAAC,CAAC,CAAA,CAAA;AAAA,MACnL,MAAA,EAAQ,WAAW,QAAQ,CAAA;AAAA,MAC3B,KAAA,EAAO,QAAQ,IAAA,CAAK,KAAA,CAAM,KAAK,MAAA,EAAO,GAAI,EAAE,CAAC,CAAA,CAAA;AAAA,MAC7C,MAAM,CAAC,UAAA,CAAW,CAAC,UAAA,EAAY,WAAW,WAAW,CAAC,CAAA,EAAG,UAAA,CAAW,CAAC,OAAA,EAAS,MAAA,EAAQ,QAAA,EAAU,IAAI,CAAC,CAAC;AAAA;AACxG,GACF;AACF;AAEA,SAAS,iBAAiB,EAAA,EAAoB;AAC5C,EAAA,MAAM,MAAA,GAAS,WAAW,YAAY,CAAA;AACtC,EAAA,MAAM,MAAA,GAAS,UAAA,CAAW,CAAC,gBAAA,EAAkB,WAAA,EAAa,cAAA,EAAgB,iBAAA,EAAmB,WAAA,EAAa,qBAAA,EAAuB,gBAAA,EAAkB,sBAAsB,CAAC,CAAA;AAC1K,EAAA,MAAM,IAAA,GAAO,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,MAAM,CAAA,CAAA;AAChC,EAAA,MAAM,GAAA,uBAAU,IAAA,EAAK;AACrB,EAAA,MAAM,OAAA,GAAU,WAAW,EAAE,CAAA;AAE7B,EAAA,OAAO;AAAA,IACL,EAAA,EAAI,SAAA;AAAA,IACJ,IAAA,EAAM,MAAA;AAAA,IACN,EAAA,EAAI,EAAA,IAAM,UAAA,CAAW,MAAM,CAAA;AAAA,IAC3B,EAAA,EAAI,GAAA;AAAA,IACJ,IAAA;AAAA,IACA,SAAA,EAAW,OAAA;AAAA,IACX,SAAA,EAAW,GAAA;AAAA,IACX,SAAA,EAAW,QAAA;AAAA,IACX,IAAA,EAAM;AAAA,MACJ,OAAA,EAAS,MAAA;AAAA,MACT,WAAA,EAAa,CAAA,EAAG,MAAM,CAAA,KAAA,EAAQ,MAAM,CAAA,YAAA,EAAe,UAAA,CAAW,CAAC,aAAA,EAAe,aAAA,EAAe,WAAA,EAAa,UAAU,CAAC,CAAC,CAAA,CAAA;AAAA,MACtH,QAAQ,UAAA,CAAW,CAAC,QAAQ,aAAA,EAAe,QAAA,EAAU,MAAM,CAAC,CAAA;AAAA,MAC5D,QAAA,EAAU,WAAW,UAAU,CAAA;AAAA,MAC/B,QAAA,EAAU,QAAQ,IAAA,CAAK,KAAA,CAAM,KAAK,MAAA,EAAO,GAAI,EAAE,CAAC,CAAA,CAAA;AAAA,MAChD,OAAA,EAAS,IAAI,IAAA,CAAK,IAAA,CAAK,KAAI,GAAI,IAAA,CAAK,MAAA,EAAO,GAAI,KAAK,EAAA,GAAK,EAAA,GAAK,EAAA,GAAK,GAAI,EAAE,WAAA;AAAY;AACvF,GACF;AACF;AAEA,SAAS,qBAAqB,EAAA,EAAoB;AAChD,EAAA,MAAM,QAAA,GAAW,CAAC,QAAA,EAAU,mBAAA,EAAqB,sBAAsB,aAAA,EAAe,eAAA,EAAiB,eAAA,EAAiB,gBAAA,EAAkB,iBAAiB,CAAA;AAC3J,EAAA,MAAM,IAAA,GAAO,WAAW,QAAQ,CAAA;AAChC,EAAA,MAAM,GAAA,uBAAU,IAAA,EAAK;AACrB,EAAA,MAAM,OAAA,GAAU,WAAW,EAAE,CAAA;AAE7B,EAAA,OAAO;AAAA,IACL,EAAA,EAAI,SAAA;AAAA,IACJ,IAAA,EAAM,UAAA;AAAA,IACN,EAAA,EAAI,EAAA,IAAM,UAAA,CAAW,KAAK,CAAA;AAAA,IAC1B,EAAA,EAAI,GAAA;AAAA,IACJ,IAAA;AAAA,IACA,SAAA,EAAW,OAAA;AAAA,IACX,SAAA,EAAW,GAAA;AAAA,IACX,SAAA,EAAW,QAAA;AAAA,IACX,IAAA,EAAM;AAAA,MACJ,OAAA,EAAS,UAAA;AAAA,MACT,OAAA,EAAS,KAAK,IAAI;;AAAA;;AAAA;;AAAA,wDAAA,CAAA;AAAA,MAClB,MAAA,EAAQ,UAAA;AAAA,MACR,MAAA,EAAQ,QAAQ,IAAA,CAAK,KAAA,CAAM,KAAK,MAAA,EAAO,GAAI,EAAE,CAAC,CAAA,CAAA;AAAA,MAC9C,IAAA,EAAM,CAAC,UAAA,CAAW,CAAC,iBAAiB,OAAA,EAAS,WAAW,CAAC,CAAA,EAAG,WAAW,CAAC,IAAA,EAAM,IAAA,EAAM,OAAO,CAAC,CAAC;AAAA;AAC/F,GACF;AACF;AAEA,SAAS,qBAAqB,EAAA,EAAoB;AAChD,EAAA,MAAM,SAAA,GAAY,CAAC,cAAA,EAAgB,kBAAA,EAAoB,iBAAiB,eAAA,EAAiB,gBAAA,EAAkB,UAAA,EAAY,eAAA,EAAiB,kBAAkB,CAAA;AAC1J,EAAA,MAAM,IAAA,GAAO,WAAW,SAAS,CAAA;AACjC,EAAA,MAAM,GAAA,uBAAU,IAAA,EAAK;AACrB,EAAA,MAAM,OAAA,GAAU,WAAW,EAAE,CAAA;AAE7B,EAAA,OAAO;AAAA,IACL,EAAA,EAAI,SAAA;AAAA,IACJ,IAAA,EAAM,UAAA;AAAA,IACN,EAAA,EAAI,EAAA,IAAM,UAAA,CAAW,IAAI,CAAA;AAAA,IACzB,EAAA,EAAI,GAAA;AAAA,IACJ,IAAA;AAAA,IACA,SAAA,EAAW,OAAA;AAAA,IACX,SAAA,EAAW,GAAA;AAAA,IACX,SAAA,EAAW,QAAA;AAAA,IACX,IAAA,EAAM;AAAA,MACJ,OAAA,EAAS,UAAA;AAAA,MACT,WAAA,EAAa,CAAA,QAAA,EAAW,IAAA,CAAK,OAAA,CAAQ,UAAA,EAAY,KAAK,CAAA,CAAE,WAAA,EAAY,CAAE,IAAA,EAAM,CAAA,WAAA,CAAA;AAAA,MAC5E,IAAA,EAAM,iCAAiC,IAAI,CAAA;AAAA;AAAA;AAAA,CAAA,CAAA;AAAA,MAC3C,SAAS,UAAA,CAAW,CAAC,YAAA,EAAc,YAAA,EAAc,QAAQ,CAAC,CAAA;AAAA,MAC1D,QAAA,EAAU,CAAC,UAAA,CAAW,CAAC,QAAQ,UAAA,EAAY,OAAA,EAAS,OAAO,CAAC,CAAC;AAAA;AAC/D,GACF;AACF;AAEA,SAAS,qBAAqB,EAAA,EAAoB;AAChD,EAAA,MAAM,gBAAgB,CAAC,kBAAA,EAAoB,mBAAmB,kBAAA,EAAoB,eAAA,EAAiB,kBAAkB,gBAAgB,CAAA;AACrI,EAAA,MAAM,IAAA,GAAO,WAAW,aAAa,CAAA;AACrC,EAAA,MAAM,GAAA,uBAAU,IAAA,EAAK;AACrB,EAAA,MAAM,OAAA,GAAU,WAAW,EAAE,CAAA;AAE7B,EAAA,OAAO;AAAA,IACL,EAAA,EAAI,SAAA;AAAA,IACJ,IAAA,EAAM,UAAA;AAAA,IACN,EAAA,EAAI,EAAA,IAAM,UAAA,CAAW,IAAI,CAAA;AAAA,IACzB,EAAA,EAAI,GAAA;AAAA,IACJ,IAAA;AAAA,IACA,SAAA,EAAW,OAAA;AAAA,IACX,SAAA,EAAW,GAAA;AAAA,IACX,SAAA,EAAW,QAAA;AAAA,IACX,IAAA,EAAM;AAAA,MACJ,OAAA,EAAS,UAAA;AAAA,MACT,WAAA,EAAa,CAAA,uBAAA,EAA0B,IAAA,CAAK,WAAA,EAAa,CAAA,CAAA;AAAA,MACzD,KAAA,EAAO;AAAA,QACL,EAAE,EAAA,EAAI,OAAA,EAAS,IAAA,EAAM,YAAA,EAAc,MAAM,UAAA,EAAW;AAAA,QACpD,EAAE,EAAA,EAAI,OAAA,EAAS,IAAA,EAAM,SAAA,EAAW,MAAM,UAAA,EAAW;AAAA,QACjD,EAAE,EAAA,EAAI,OAAA,EAAS,IAAA,EAAM,QAAA,EAAU,MAAM,cAAA;AAAe,OACtD;AAAA,MACA,QAAQ,UAAA,CAAW,CAAC,QAAA,EAAU,QAAA,EAAU,OAAO,CAAC;AAAA;AAClD,GACF;AACF;AAEA,SAAS,kBAAkB,EAAA,EAAoB;AAC7C,EAAA,MAAM,aAAa,CAAC,gBAAA,EAAkB,gBAAgB,aAAA,EAAe,gBAAA,EAAkB,kBAAkB,WAAW,CAAA;AACpH,EAAA,MAAM,IAAA,GAAO,WAAW,UAAU,CAAA;AAClC,EAAA,MAAM,GAAA,uBAAU,IAAA,EAAK;AACrB,EAAA,MAAM,OAAA,GAAU,WAAW,EAAE,CAAA;AAE7B,EAAA,OAAO;AAAA,IACL,EAAA,EAAI,SAAA;AAAA,IACJ,IAAA,EAAM,OAAA;AAAA,IACN,EAAA,EAAI,EAAA,IAAM,UAAA,CAAW,OAAO,CAAA;AAAA,IAC5B,EAAA,EAAI,GAAA;AAAA,IACJ,IAAA;AAAA,IACA,SAAA,EAAW,OAAA;AAAA,IACX,SAAA,EAAW,GAAA;AAAA,IACX,SAAA,EAAW,QAAA;AAAA,IACX,IAAA,EAAM;AAAA,MACJ,OAAA,EAAS,OAAA;AAAA,MACT,WAAA,EAAa,CAAA,wBAAA,EAA2B,IAAA,CAAK,WAAA,EAAa,CAAA,MAAA,CAAA;AAAA,MAC1D,OAAO,UAAA,CAAW,CAAC,iBAAiB,iBAAA,EAAmB,OAAA,EAAS,aAAa,CAAC,CAAA;AAAA,MAC9E,YAAA,EAAc,CAAA,kBAAA,EAAqB,IAAA,CAAK,WAAA,EAAa,CAAA,WAAA,CAAA;AAAA,MACrD,KAAA,EAAO,CAAC,UAAA,CAAW,CAAC,UAAU,MAAA,EAAQ,QAAA,EAAU,SAAS,CAAC,CAAC;AAAA;AAC7D,GACF;AACF;AAMA,IAAM,UAAA,GAAqD;AAAA,EACzD,IAAA,EAAM,gBAAA;AAAA,EACN,OAAA,EAAS,mBAAA;AAAA,EACT,IAAA,EAAM,gBAAA;AAAA,EACN,QAAA,EAAU,oBAAA;AAAA,EACV,QAAA,EAAU,oBAAA;AAAA,EACV,QAAA,EAAU,oBAAA;AAAA,EACV,KAAA,EAAO;AACT,CAAA;AAEO,SAAS,iBAAA,CAAkB,MAAc,EAAA,EAAoB;AAClE,EAAA,MAAM,SAAA,GAAY,WAAW,IAAI,CAAA;AACjC,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,OAAO,UAAU,EAAE,CAAA;AAAA,EACrB;AAGA,EAAA,MAAM,GAAA,uBAAU,IAAA,EAAK;AACrB,EAAA,OAAO;AAAA,IACL,EAAA,EAAI,SAAA;AAAA,IACJ,IAAA;AAAA,IACA,EAAA,EAAI,EAAA,IAAM,UAAA,CAAW,IAAA,CAAK,aAAa,CAAA;AAAA,IACvC,EAAA,EAAI,GAAA;AAAA,IACJ,IAAA,EAAM,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,IAAA,CAAK,MAAM,IAAA,CAAK,MAAA,EAAO,GAAI,GAAI,CAAC,CAAA,CAAA;AAAA,IACjD,SAAA,EAAW,WAAW,EAAE,CAAA;AAAA,IACxB,SAAA,EAAW,GAAA;AAAA,IACX,SAAA,EAAW,QAAA;AAAA,IACX,IAAA,EAAM;AAAA,MACJ,OAAA,EAAS;AAAA;AACX,GACF;AACF;AAEO,SAAS,kBAAA,CAAmB,MAAc,KAAA,EAAwB;AACvE,EAAA,OAAO,KAAA,CAAM,KAAK,EAAE,MAAA,EAAQ,OAAM,EAAG,MAAM,iBAAA,CAAkB,IAAI,CAAC,CAAA;AACpE;AAKO,SAAS,uBAAA,GAAmC;AACjD,EAAA,OAAO;AAAA,IACL,GAAG,kBAAA,CAAmB,MAAA,EAAQ,CAAC,CAAA;AAAA,IAC/B,GAAG,kBAAA,CAAmB,SAAA,EAAW,CAAC,CAAA;AAAA,IAClC,GAAG,kBAAA,CAAmB,MAAA,EAAQ,EAAE,CAAA;AAAA,IAChC,GAAG,kBAAA,CAAmB,UAAA,EAAY,CAAC,CAAA;AAAA,IACnC,GAAG,kBAAA,CAAmB,UAAA,EAAY,CAAC,CAAA;AAAA,IACnC,GAAG,kBAAA,CAAmB,UAAA,EAAY,CAAC,CAAA;AAAA,IACnC,GAAG,kBAAA,CAAmB,OAAA,EAAS,CAAC;AAAA,GAClC;AACF;;;AChTA,SAAS,QAAA,CAAS,EAAA,EAAY,IAAA,EAAc,EAAA,EAAoB;AAC9D,EAAA,OAAO,CAAA,EAAG,EAAE,CAAA,CAAA,EAAI,IAAI,IAAI,EAAE,CAAA,CAAA;AAC5B;AAEA,eAAe,MAAM,EAAA,EAA2B;AAC9C,EAAA,IAAI,KAAK,CAAA,EAAG;AACV,IAAA,MAAM,IAAI,OAAA,CAAQ,CAAC,YAAY,UAAA,CAAW,OAAA,EAAS,EAAE,CAAC,CAAA;AAAA,EACxD;AACF;AASO,SAAS,gBAAA,CAAiB,OAAA,GAA6B,EAAC,EAAG;AAChE,EAAA,MAAM,EAAE,KAAA,EAAO,OAAA,GAAU,KAAK,OAAA,GAAU,KAAA,EAAO,aAAY,GAAI,OAAA;AAG/D,EAAA,MAAM,KAAA,GAAmB;AAAA,IACvB,MAAA,sBAAY,GAAA,EAAI;AAAA,IAChB,aAAA,sBAAmB,GAAA;AAAI,GACzB;AAGA,EAAA,MAAM,IAAA,GAAO,eAAe,uBAAA,EAAwB;AACpD,EAAA,KAAA,MAAW,SAAS,IAAA,EAAM;AACxB,IAAA,MAAM,MAAM,QAAA,CAAS,KAAA,CAAM,IAAI,KAAA,CAAM,IAAA,EAAM,MAAM,EAAE,CAAA;AACnD,IAAA,KAAA,CAAM,MAAA,CAAO,GAAA,CAAI,GAAA,EAAK,KAAK,CAAA;AAAA,EAC7B;AAEA,EAAA,IAAI,OAAA,EAAS;AACX,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,8BAAA,EAAiC,KAAA,CAAM,MAAA,CAAO,IAAI,CAAA,OAAA,CAAS,CAAA;AAAA,EACzE;AAGA,EAAA,SAAS,GAAA,CAAI,cAAsB,IAAA,EAAiB;AAClD,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,aAAA,EAAgB,SAAS,CAAA,CAAA,EAAI,GAAG,IAAI,CAAA;AAAA,IAClD;AAAA,EACF;AAEA,EAAA,OAAO;AAAA;AAAA;AAAA;AAAA,IAIL,SAAA,EAAW;AAAA,MACT,MAAM,KAAK,OAAA,EAAuC;AAChD,QAAA,MAAM,MAAM,OAAO,CAAA;AACnB,QAAA,GAAA,CAAI,gBAAgB,CAAA;AAGpB,QAAA,MAAM,UAAA,uBAAiB,GAAA,EAAY;AACnC,QAAA,KAAA,MAAW,KAAA,IAAS,KAAA,CAAM,MAAA,CAAO,MAAA,EAAO,EAAG;AACzC,UAAA,UAAA,CAAW,GAAA,CAAI,MAAM,EAAE,CAAA;AAAA,QACzB;AAGA,QAAA,UAAA,CAAW,IAAI,SAAS,CAAA;AAExB,QAAA,OAAO,MAAM,IAAA,CAAK,UAAU,CAAA,CAAE,GAAA,CAAI,CAAC,EAAA,MAAQ;AAAA,UACzC,EAAA,EAAI,EAAA;AAAA,UACJ,IAAA,EAAM;AAAA,SACR,CAAE,CAAA;AAAA,MACJ;AAAA,KACF;AAAA;AAAA;AAAA;AAAA,IAKA,MAAA,EAAQ;AAAA,MACN,MAAM,SAAS,OAAA,EAA2B;AACxC,QAAA,MAAM,MAAM,OAAO,CAAA;AACnB,QAAA,GAAA,CAAI,iBAAiB,CAAA;AAGrB,QAAA,MAAM,KAAA,uBAAY,GAAA,EAAY;AAC9B,QAAA,KAAA,MAAW,KAAA,IAAS,KAAA,CAAM,MAAA,CAAO,MAAA,EAAO,EAAG;AACzC,UAAA,KAAA,CAAM,GAAA,CAAI,MAAM,IAAI,CAAA;AAAA,QACtB;AAGA,QAAA,KAAA,MAAW,QAAQ,UAAA,EAAY;AAC7B,UAAA,KAAA,CAAM,IAAI,IAAI,CAAA;AAAA,QAChB;AAEA,QAAA,MAAM,QAAA,GAAW,KAAA,CAAM,IAAA,CAAK,KAAK,EAAE,IAAA,EAAK;AAExC,QAAA,OAAO;AAAA,UACL,UAAA,EAAY,CAAC,SAAS,CAAA;AAAA,UACtB,KAAA,EAAO,QAAA;AAAA,UACP,OAAA,EAAS;AAAA,SACX;AAAA,MACF,CAAA;AAAA,MAEA,MAAM,IAAI,MAAA,EAAuC;AAC/C,QAAA,MAAM,MAAM,OAAO,CAAA;AACnB,QAAA,GAAA,CAAI,YAAA,EAAc,OAAO,IAAI,CAAA;AAE7B,QAAA,OAAO,kBAAA,CAAmB,OAAO,IAAI,CAAA;AAAA,MACvC;AAAA,KACF;AAAA;AAAA;AAAA;AAAA,IAKA,KAAA,EAAO;AAAA,MACL,MAAM,MAAM,MAAA,EAAkD;AAC5D,QAAA,MAAM,MAAM,OAAO,CAAA;AACnB,QAAA,GAAA,CAAI,aAAa,CAAA;AAGjB,QAAA,MAAM,KAAA,uBAAY,GAAA,EAAY;AAC9B,QAAA,KAAA,MAAW,KAAA,IAAS,KAAA,CAAM,MAAA,CAAO,MAAA,EAAO,EAAG;AACzC,UAAA,IAAI,CAAC,MAAA,CAAO,EAAA,IAAM,KAAA,CAAM,EAAA,KAAO,OAAO,EAAA,EAAI;AACxC,YAAA,KAAA,CAAM,GAAA,CAAI,MAAM,IAAI,CAAA;AAAA,UACtB;AAAA,QACF;AAGA,QAAA,KAAA,MAAW,QAAQ,UAAA,EAAY;AAC7B,UAAA,KAAA,CAAM,IAAI,IAAI,CAAA;AAAA,QAChB;AAEA,QAAA,OAAO,KAAA,CAAM,KAAK,KAAK,CAAA,CACpB,MAAK,CACL,GAAA,CAAI,CAAC,IAAA,MAAU;AAAA,UACd,IAAA;AAAA,UACA,EAAA,EAAI,OAAO,EAAA,IAAM;AAAA,SACnB,CAAE,CAAA;AAAA,MACN,CAAA;AAAA,MAEA,MAAM,KAAK,MAAA,EAAyE;AAClF,QAAA,MAAM,MAAM,OAAO,CAAA;AACnB,QAAA,GAAA,CAAI,cAAc,MAAM,CAAA;AAExB,QAAA,IAAI,SAAS,KAAA,CAAM,IAAA,CAAK,KAAA,CAAM,MAAA,CAAO,QAAQ,CAAA;AAG7C,QAAA,IAAI,OAAO,EAAA,EAAI;AACb,UAAA,MAAA,GAAS,OAAO,MAAA,CAAO,CAAC,MAAM,CAAA,CAAE,EAAA,KAAO,OAAO,EAAE,CAAA;AAAA,QAClD;AAGA,QAAA,IAAI,OAAO,IAAA,EAAM;AACf,UAAA,MAAA,GAAS,OAAO,MAAA,CAAO,CAAC,MAAM,CAAA,CAAE,IAAA,KAAS,OAAO,IAAI,CAAA;AAAA,QACtD;AAGA,QAAA,MAAA,GAAS,MAAA,CAAO,MAAA,CAAO,CAAC,CAAA,KAAM;AAC5B,UAAA,MAAM,MAAM,QAAA,CAAS,CAAA,CAAE,IAAI,CAAA,CAAE,IAAA,EAAM,EAAE,EAAE,CAAA;AACvC,UAAA,OAAO,CAAC,KAAA,CAAM,aAAA,CAAc,GAAA,CAAI,GAAG,CAAA;AAAA,QACrC,CAAC,CAAA;AAGD,QAAA,MAAA,CAAO,KAAK,CAAC,CAAA,EAAG,CAAA,KAAM,IAAI,KAAK,CAAA,CAAE,SAAS,CAAA,CAAE,OAAA,KAAY,IAAI,IAAA,CAAK,EAAE,SAAS,CAAA,CAAE,SAAS,CAAA;AAEvF,QAAA,MAAM,QAAQ,MAAA,CAAO,MAAA;AAGrB,QAAA,MAAM,MAAA,GAAS,OAAO,MAAA,IAAU,CAAA;AAChC,QAAA,MAAM,KAAA,GAAQ,OAAO,KAAA,IAAS,EAAA;AAC9B,QAAA,MAAA,GAAS,MAAA,CAAO,KAAA,CAAM,MAAA,EAAQ,MAAA,GAAS,KAAK,CAAA;AAE5C,QAAA,OAAO,EAAE,IAAA,EAAM,MAAA,EAAQ,KAAA,EAAM;AAAA,MAC/B,CAAA;AAAA,MAEA,MAAM,IAAI,MAAA,EAAmD;AAC3D,QAAA,MAAM,MAAM,OAAO,CAAA;AACnB,QAAA,GAAA,CAAI,aAAa,MAAM,CAAA;AAEvB,QAAA,MAAM,GAAA,GAAM,SAAS,MAAA,CAAO,EAAA,IAAM,WAAW,MAAA,CAAO,IAAA,EAAM,OAAO,EAAE,CAAA;AAEnE,QAAA,IAAI,KAAA,CAAM,aAAA,CAAc,GAAA,CAAI,GAAG,CAAA,EAAG;AAChC,UAAA,OAAO,IAAA;AAAA,QACT;AAEA,QAAA,OAAO,KAAA,CAAM,MAAA,CAAO,GAAA,CAAI,GAAG,CAAA,IAAK,IAAA;AAAA,MAClC,CAAA;AAAA,MAEA,MAAM,OAAO,MAAA,EAAqE;AAChF,QAAA,MAAM,MAAM,OAAO,CAAA;AACnB,QAAA,GAAA,CAAI,gBAAgB,MAAM,CAAA;AAE1B,QAAA,MAAM,EAAA,GAAK,OAAO,EAAA,IAAM,SAAA;AACxB,QAAA,MAAM,GAAA,uBAAU,IAAA,EAAK;AAGrB,QAAA,MAAM,SAAA,GAAY,iBAAA,CAAkB,MAAA,CAAO,IAAI,CAAA;AAC/C,QAAA,MAAM,KAAA,GAAe;AAAA,UACnB,GAAG,SAAA;AAAA,UACH,EAAA;AAAA,UACA,IAAI,SAAA,CAAU,EAAA;AAAA,UACd,IAAA,EAAM,MAAA,CAAO,IAAA,IAAQ,SAAA,CAAU,IAAA;AAAA,UAC/B,SAAA,EAAW,GAAA;AAAA,UACX,SAAA,EAAW,GAAA;AAAA,UACX,EAAA,EAAI,GAAA;AAAA,UACJ,IAAA,EAAM;AAAA,YACJ,SAAS,MAAA,CAAO,IAAA;AAAA,YAChB,GAAI,MAAA,CAAO;AAAA;AACb,SACF;AAEA,QAAA,MAAM,MAAM,QAAA,CAAS,EAAA,EAAI,MAAA,CAAO,IAAA,EAAM,MAAM,EAAE,CAAA;AAC9C,QAAA,KAAA,CAAM,MAAA,CAAO,GAAA,CAAI,GAAA,EAAK,KAAK,CAAA;AAE3B,QAAA,OAAO,KAAA;AAAA,MACT,CAAA;AAAA,MAEA,MAAM,OAAO,MAAA,EAAkE;AAC7E,QAAA,MAAM,MAAM,OAAO,CAAA;AACnB,QAAA,GAAA,CAAI,gBAAgB,MAAM,CAAA;AAE1B,QAAA,MAAM,EAAA,GAAK,OAAO,EAAA,IAAM,SAAA;AACxB,QAAA,MAAM,MAAM,QAAA,CAAS,EAAA,EAAI,MAAA,CAAO,IAAA,EAAM,OAAO,EAAE,CAAA;AAE/C,QAAA,MAAM,QAAA,GAAW,KAAA,CAAM,MAAA,CAAO,GAAA,CAAI,GAAG,CAAA;AACrC,QAAA,IAAI,CAAC,QAAA,IAAY,KAAA,CAAM,aAAA,CAAc,GAAA,CAAI,GAAG,CAAA,EAAG;AAC7C,UAAA,MAAM,IAAI,KAAA,CAAM,CAAA,iBAAA,EAAoB,GAAG,CAAA,CAAE,CAAA;AAAA,QAC3C;AAEA,QAAA,MAAM,GAAA,uBAAU,IAAA,EAAK;AACrB,QAAA,MAAM,OAAA,GAAiB;AAAA,UACrB,GAAG,QAAA;AAAA,UACH,SAAA,EAAW,GAAA;AAAA,UACX,EAAA,EAAI,GAAA;AAAA,UACJ,IAAA,EAAM;AAAA,YACJ,GAAG,QAAA,CAAS,IAAA;AAAA,YACZ,GAAI,MAAA,CAAO;AAAA;AACb,SACF;AAEA,QAAA,KAAA,CAAM,MAAA,CAAO,GAAA,CAAI,GAAA,EAAK,OAAO,CAAA;AAE7B,QAAA,OAAO,OAAA;AAAA,MACT,CAAA;AAAA,MAEA,MAAM,OAAO,MAAA,EAAmE;AAC9E,QAAA,MAAM,MAAM,OAAO,CAAA;AACnB,QAAA,GAAA,CAAI,gBAAgB,MAAM,CAAA;AAE1B,QAAA,MAAM,EAAA,GAAK,OAAO,EAAA,IAAM,SAAA;AACxB,QAAA,MAAM,MAAM,QAAA,CAAS,EAAA,EAAI,MAAA,CAAO,IAAA,EAAM,OAAO,EAAE,CAAA;AAE/C,QAAA,IAAI,OAAO,IAAA,EAAM;AACf,UAAA,KAAA,CAAM,MAAA,CAAO,OAAO,GAAG,CAAA;AAAA,QACzB,CAAA,MAAO;AACL,UAAA,KAAA,CAAM,aAAA,CAAc,IAAI,GAAG,CAAA;AAAA,QAC7B;AAEA,QAAA,OAAO,EAAE,SAAS,IAAA,EAAK;AAAA,MACzB,CAAA;AAAA,MAEA,MAAM,SAAS,OAAA,EAAoD;AACjE,QAAA,MAAM,MAAM,OAAO,CAAA;AACnB,QAAA,GAAA,CAAI,kBAAkB,OAAO,CAAA;AAG7B,QAAA,OAAO,EAAC;AAAA,MACV,CAAA;AAAA,MAEA,MAAM,MAAM,OAAA,EAAyC;AACnD,QAAA,MAAM,MAAM,OAAO,CAAA;AACnB,QAAA,GAAA,CAAI,eAAe,OAAO,CAAA;AAE1B,QAAA,MAAM,SAAiC,EAAC;AACxC,QAAA,IAAI,KAAA,GAAQ,CAAA;AAEZ,QAAA,KAAA,MAAW,KAAA,IAAS,KAAA,CAAM,MAAA,CAAO,MAAA,EAAO,EAAG;AACzC,UAAA,MAAM,MAAM,QAAA,CAAS,KAAA,CAAM,IAAI,KAAA,CAAM,IAAA,EAAM,MAAM,EAAE,CAAA;AACnD,UAAA,IAAI,KAAA,CAAM,aAAA,CAAc,GAAA,CAAI,GAAG,CAAA,EAAG;AAClC,UAAA,IAAI,OAAA,CAAQ,EAAA,IAAM,KAAA,CAAM,EAAA,KAAO,QAAQ,EAAA,EAAI;AAC3C,UAAA,IAAI,OAAA,CAAQ,IAAA,IAAQ,KAAA,CAAM,IAAA,KAAS,QAAQ,IAAA,EAAM;AAEjD,UAAA,MAAA,CAAO,MAAM,IAAI,CAAA,GAAA,CAAK,OAAO,KAAA,CAAM,IAAI,KAAK,CAAA,IAAK,CAAA;AACjD,UAAA,KAAA,EAAA;AAAA,QACF;AAEA,QAAA,OAAO,EAAE,OAAO,MAAA,EAAO;AAAA,MACzB;AAAA,KACF;AAAA;AAAA;AAAA;AAAA,IAKA,GAAA,EAAK;AAAA,MACH,MAAM,QAAQ,MAAA,EAA+C;AAC3D,QAAA,MAAM,MAAM,OAAO,CAAA;AACnB,QAAA,GAAA,CAAI,aAAA,EAAe,OAAO,KAAK,CAAA;AAG/B,QAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,WAAA,GAAc,IAAA,EAAK;AAE9C,QAAA,IAAI,KAAA,CAAM,UAAA,CAAW,QAAQ,CAAA,EAAG;AAE9B,UAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,KAAA,CAAM,6BAA6B,CAAA;AACvD,UAAA,IAAI,KAAA,EAAO;AACT,YAAA,MAAM,IAAA,GAAO,MAAM,CAAC,CAAA;AACpB,YAAA,MAAM,SAAS,KAAA,CAAM,IAAA,CAAK,MAAM,MAAA,CAAO,MAAA,EAAQ,CAAA,CAAE,MAAA;AAAA,cAC/C,CAAC,CAAA,KAAM,CAAA,CAAE,KAAK,WAAA,EAAY,KAAM,KAAK,WAAA;AAAY,aACnD;AAEA,YAAA,MAAM,IAAA,GAAO,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,cAC9B,IAAI,CAAA,CAAE,EAAA;AAAA,cACN,IAAI,CAAA,CAAE,EAAA;AAAA,cACN,MAAM,CAAA,CAAE,IAAA;AAAA,cACR,MAAM,CAAA,CAAE,IAAA;AAAA,cACR,WAAW,CAAA,CAAE,SAAA;AAAA,cACb,WAAW,CAAA,CAAE,SAAA;AAAA,cACb,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,CAAA,CAAE,IAAI;AAAA,aAC7B,CAAE,CAAA;AAEF,YAAA,OAAO;AAAA,cACL,IAAA;AAAA,cACA,OAAA,EAAS;AAAA,gBACP,EAAE,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,QAAA,EAAS;AAAA,gBAC7B,EAAE,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,QAAA,EAAS;AAAA,gBAC7B,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,QAAA,EAAS;AAAA,gBAC/B,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,QAAA,EAAS;AAAA,gBAC/B,EAAE,IAAA,EAAM,WAAA,EAAa,IAAA,EAAM,UAAA,EAAW;AAAA,gBACtC,EAAE,IAAA,EAAM,WAAA,EAAa,IAAA,EAAM,UAAA,EAAW;AAAA,gBACtC,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,MAAA;AAAO,eAC/B;AAAA,cACA,cAAc,IAAA,CAAK,MAAA;AAAA,cACnB,eAAA,EAAiB;AAAA,aACnB;AAAA,UACF;AAAA,QACF;AAGA,QAAA,OAAO;AAAA,UACL,MAAM,EAAC;AAAA,UACP,SAAS,EAAC;AAAA,UACV,YAAA,EAAc,CAAA;AAAA,UACd,eAAA,EAAiB;AAAA,SACnB;AAAA,MACF;AAAA,KACF;AAAA;AAAA,IAGA,GAAA,EAAK,MAAM,gBAAA,CAAiB,OAAO,CAAA;AAAA,IACnC,WAAA,EAAa,CAAC,SAAA,KAAwC;AAAA,IAEtD,CAAA;AAAA,IACA,CAAC,MAAA,CAAO,OAAO,GAAG,MAAM;AAAA,IAExB,CAAA;AAAA;AAAA,IAGA,MAAA,EAAQ,KAAA;AAAA,IACR,QAAQ,MAAM;AACZ,MAAA,KAAA,CAAM,OAAO,KAAA,EAAM;AACnB,MAAA,KAAA,CAAM,cAAc,KAAA,EAAM;AAC1B,MAAA,MAAM,SAAA,GAAY,eAAe,uBAAA,EAAwB;AACzD,MAAA,KAAA,MAAW,SAAS,SAAA,EAAW;AAC7B,QAAA,MAAM,MAAM,QAAA,CAAS,KAAA,CAAM,IAAI,KAAA,CAAM,IAAA,EAAM,MAAM,EAAE,CAAA;AACnD,QAAA,KAAA,CAAM,MAAA,CAAO,GAAA,CAAI,GAAA,EAAK,KAAK,CAAA;AAAA,MAC7B;AAAA,IACF;AAAA,GACF;AACF;AAKO,SAAS,aAAa,OAAA,EAA6B;AACxD,EAAA,OAAO,iBAAiB,OAAO,CAAA;AACjC;;;AC5YO,IAAM,uBAAA,GAA0B;AAyCvC,eAAsB,gBAAA,CACpB,GAAA,EACA,OAAA,GAAmC,EAAC,EACjB;AACnB,EAAA,MAAM,EAAE,OAAA,GAAU,uBAAA,EAAyB,QAAQ,cAAA,EAAgB,GAAG,cAAa,GAAI,OAAA;AAEvF,EAAA,MAAM,UAAA,GAAa,IAAI,eAAA,EAAgB;AACvC,EAAA,MAAM,YAAY,UAAA,CAAW,MAAM,UAAA,CAAW,KAAA,IAAS,OAAO,CAAA;AAG9D,EAAA,MAAM,uBAAuB,cAAA,GACzB,MAAM,WAAW,KAAA,CAAM,cAAA,CAAe,MAAM,CAAA,GAC5C,IAAA;AAEJ,EAAA,IAAI,cAAA,EAAgB;AAClB,IAAA,IAAI,eAAe,OAAA,EAAS;AAC1B,MAAA,YAAA,CAAa,SAAS,CAAA;AACtB,MAAA,UAAA,CAAW,KAAA,CAAM,eAAe,MAAM,CAAA;AAAA,IACxC,CAAA,MAAO;AACL,MAAA,cAAA,CAAe,gBAAA,CAAiB,SAAS,oBAAqB,CAAA;AAAA,IAChE;AAAA,EACF;AAEA,EAAA,IAAI;AACF,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,GAAA,EAAK;AAAA,MAChC,GAAG,YAAA;AAAA,MACH,QAAQ,UAAA,CAAW;AAAA,KACpB,CAAA;AACD,IAAA,OAAO,QAAA;AAAA,EACT,CAAA,SAAE;AACA,IAAA,YAAA,CAAa,SAAS,CAAA;AACtB,IAAA,IAAI,kBAAkB,oBAAA,EAAsB;AAC1C,MAAA,cAAA,CAAe,mBAAA,CAAoB,SAAS,oBAAoB,CAAA;AAAA,IAClE;AAAA,EACF;AACF;AAyBO,SAAS,uBAAuB,cAAA,EAAwB;AAC7D,EAAA,OAAO,CAAC,GAAA,EAAa,OAAA,GAAmC,EAAC,KACvD,gBAAA,CAAiB,GAAA,EAAK,EAAE,OAAA,EAAS,cAAA,EAAgB,GAAG,OAAA,EAAS,CAAA;AACjE","file":"chunk-KLN5OTQH.js","sourcesContent":["/**\n * @dotdo/do SDK Client Adapter\n *\n * Wraps the @dotdo/do SDK to provide a DOClient-compatible interface.\n * This allows seamless migration from capnweb to the official SDK.\n *\n * ## Type Mapping\n *\n * The adapter normalizes between three type systems:\n *\n * 1. **API Response** (what the server returns):\n * ```json\n * { \"id\": \"...\", \"$type\": \"Customer\", \"email\": \"...\", \"industry\": \"...\" }\n * ```\n *\n * 2. **UI Types** (what current @mdxui/do components expect):\n * ```typescript\n * { id, ns, type, name, createdAt: Date, updatedAt: Date, data: {...} }\n * ```\n *\n * 3. **Canonical Types** (from @dotdo/types - the source of truth):\n * ```typescript\n * { $id, $type, name, data, createdAt: Timestamp, updatedAt: Timestamp }\n * ```\n *\n * This adapter currently normalizes API -> UI format. Future work will\n * align UI components with canonical types directly.\n *\n * @module\n */\n\nimport { createDOApiClient } from \"@dotdo/do/sdk\";\nimport type { Noun } from \"@dotdo/types/things\";\n\n// =============================================================================\n// Types\n// =============================================================================\n\ninterface ListResponse<T> {\n\tdata?: T[];\n\titems?: T[];\n\tresult?: T[];\n\tcount?: number;\n\ttotal?: number;\n}\n\n/**\n * Raw item from API (flat structure with $type)\n *\n * Note: API currently uses `id` but canonical @dotdo/types uses `$id`.\n * This interface represents what the API actually returns.\n */\ninterface RawApiItem {\n\tid?: string;\n\t$id?: string; // Canonical format (may be returned by newer endpoints)\n\t$type?: string;\n\tname?: string;\n\tcreatedAt?: string;\n\tupdatedAt?: string;\n\t[key: string]: unknown;\n}\n\n/**\n * Normalized Thing structure for UI\n *\n * This bridges between API response and current UI expectations.\n * Eventually this should be replaced with canonical Noun type from @dotdo/types.\n *\n * @see Noun from @dotdo/types for canonical structure\n */\ninterface NormalizedThing {\n\tid: string;\n\tns: string;\n\ttype: string;\n\tname: string;\n\tcreatedAt: Date;\n\tupdatedAt: Date;\n\tdata: Record<string, unknown>;\n}\n\n// Re-export Noun type for consumers who want to use canonical types\nexport type { Noun };\n\n/**\n * Normalize a raw API item to the expected Thing structure\n *\n * Handles both current API format and canonical @dotdo/types format:\n * - Current API: { id, $type, email, industry, ... }\n * - Canonical: { $id, $type, name, data: {...} }\n *\n * Output matches current UI expectations:\n * { id, ns, type, name, createdAt, updatedAt, data }\n */\nfunction normalizeApiItem(\n\titem: RawApiItem | null | undefined,\n\tdefaultNs: string,\n): NormalizedThing | null {\n\t// Guard against null/undefined items\n\tif (!item || typeof item !== \"object\") {\n\t\treturn null;\n\t}\n\n\t// Extract known fields, supporting both current and canonical formats\n\tconst {\n\t\tid,\n\t\t$id, // Canonical format\n\t\t$type,\n\t\tname,\n\t\tcreatedAt,\n\t\tupdatedAt,\n\t\tdata, // Canonical format has nested data\n\t\t...restData\n\t} = item;\n\n\t// Use $id (canonical) or id (current) for identifier\n\tconst entityId = $id ?? id ?? crypto.randomUUID();\n\n\t// Extract type from $type field or fallback\n\tconst type =\n\t\t$type ?? ((item as Record<string, unknown>).type as string) ?? \"Unknown\";\n\n\t// Use nested data if present (canonical format), otherwise use rest fields\n\tconst entityData = (\n\t\tdata && typeof data === \"object\" ? data : restData\n\t) as Record<string, unknown>;\n\n\t// Try to derive a name from common fields\n\tconst derivedName =\n\t\tname ??\n\t\t(entityData.title as string) ??\n\t\t(entityData.label as string) ??\n\t\t(entityData.displayName as string) ??\n\t\t(entityData.email as string) ??\n\t\t(entityData.username as string) ??\n\t\t`${type} ${entityId.slice(0, 8)}`;\n\n\treturn {\n\t\tid: entityId,\n\t\tns: defaultNs,\n\t\ttype,\n\t\tname: derivedName,\n\t\tcreatedAt: createdAt ? new Date(createdAt) : new Date(),\n\t\tupdatedAt: updatedAt ? new Date(updatedAt) : new Date(),\n\t\tdata: entityData,\n\t};\n}\n\n/** SQL execution result */\nexport interface SQLResult {\n\trows: Record<string, unknown>[];\n\tcolumns: { name: string; type: string }[];\n\trowsAffected?: number;\n\texecutionTimeMs?: number;\n}\n\nexport interface DOContextOptions {\n\t/** Auth token for API requests */\n\tauthToken?: string;\n\t/** Transport type: 'http' | 'ws' | 'capnweb' | 'auto' */\n\ttransport?: \"http\" | \"ws\" | \"capnweb\" | \"auto\";\n}\n\n/** Type for the RPC client from @dotdo/do */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype RPCClient = any;\n\n// =============================================================================\n// @dotdo/do SDK Client Adapter\n// =============================================================================\n\n/**\n * Create a DOClient-compatible adapter using @dotdo/do SDK\n *\n * @param baseUrl - The base URL for the DO endpoint (e.g., https://crm.example.com.ai)\n * @param options - Client options including auth token and transport\n * @returns DOClient-compatible interface\n *\n * @example\n * ```typescript\n * import { $DOContext } from '@mdxui/do/client'\n *\n * const client = $DOContext('https://crm.example.com.ai', {\n * authToken: 'my-token',\n * transport: 'http',\n * })\n *\n * // Use like any DOClient\n * const things = await client.Thing.list({ type: 'User' })\n * ```\n */\nexport function createDOClient(\n\tbaseUrl: string,\n\toptions: DOContextOptions = {},\n) {\n\t// Create the @dotdo/do SDK client\n\tconst rpc: RPCClient = createDOApiClient({\n\t\tbaseURL: baseUrl,\n\t\ttoken: options.authToken,\n\t\ttransport: options.transport ?? \"http\",\n\t});\n\n\t// Return a client object that matches the DOClient interface\n\treturn {\n\t\t/**\n\t\t * Namespace operations\n\t\t */\n\t\tNamespace: {\n\t\t\tasync list(_params?: { includeSystem?: boolean }) {\n\t\t\t\ttry {\n\t\t\t\t\t// Try to get namespaces from SDK\n\t\t\t\t\tconst result = await rpc.namespaces?.list?.();\n\t\t\t\t\tif (Array.isArray(result)) {\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t}\n\t\t\t\t\tif (result?.items) {\n\t\t\t\t\t\treturn result.items;\n\t\t\t\t\t}\n\t\t\t\t\t// Fallback to default namespace\n\t\t\t\t\treturn [{ id: \"default\", name: \"default\" }];\n\t\t\t\t} catch {\n\t\t\t\t\treturn [{ id: \"default\", name: \"default\" }];\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\n\t\t/**\n\t\t * Schema operations\n\t\t */\n\t\tSchema: {\n\t\t\tasync discover(_params?: { ns?: string }) {\n\t\t\t\ttry {\n\t\t\t\t\t// Try SDK schemas collection\n\t\t\t\t\tconst result = await rpc.schemas?.list?.();\n\t\t\t\t\tconst types = Array.isArray(result)\n\t\t\t\t\t\t? result\n\t\t\t\t\t\t: (result?.items ?? result?.data ?? []);\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tnamespaces: [\"default\"],\n\t\t\t\t\t\ttypes: types.map((t: unknown) =>\n\t\t\t\t\t\t\ttypeof t === \"string\" ? t : ((t as { name?: string })?.name ?? t),\n\t\t\t\t\t\t),\n\t\t\t\t\t\tschemas: types,\n\t\t\t\t\t};\n\t\t\t\t} catch (error) {\n\t\t\t\t\tconsole.error(\"[@mdxui/do] Failed to discover schemas:\", error);\n\t\t\t\t\treturn { namespaces: [\"default\"], types: [], schemas: [] };\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tasync get(params: { ns?: string; type: string }) {\n\t\t\t\ttry {\n\t\t\t\t\tconst result = await rpc.schemas?.get?.(params.type);\n\t\t\t\t\treturn result;\n\t\t\t\t} catch {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\n\t\t/**\n\t\t * Thing operations\n\t\t */\n\t\tThing: {\n\t\t\tasync types(params: { ns?: string; includeSystem?: boolean }) {\n\t\t\t\tconst ns = params.ns ?? \"default\";\n\t\t\t\ttry {\n\t\t\t\t\t// Try to get types from SDK types.list endpoint\n\t\t\t\t\tconst result = await rpc.types?.list?.();\n\t\t\t\t\tconst types = Array.isArray(result)\n\t\t\t\t\t\t? result\n\t\t\t\t\t\t: (result?.items ?? result?.data ?? []);\n\n\t\t\t\t\t// If types endpoint returns data, use it\n\t\t\t\t\tif (types.length > 0) {\n\t\t\t\t\t\treturn types.map((t: unknown) => {\n\t\t\t\t\t\t\tif (typeof t === \"string\") {\n\t\t\t\t\t\t\t\treturn { name: t, ns };\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn { name: (t as { name?: string })?.name ?? t, ns };\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\t// Fallback: Extract unique types from things.list\n\t\t\t\t\t// This handles APIs that don't have a types endpoint\n\t\t\t\t\tconst thingsResult = (await rpc.things?.list?.({ limit: 1000 })) as\n\t\t\t\t\t\t| ListResponse<RawApiItem>\n\t\t\t\t\t\t| RawApiItem[]\n\t\t\t\t\t\t| undefined;\n\t\t\t\t\tlet rawItems: RawApiItem[] = [];\n\n\t\t\t\t\tif (Array.isArray(thingsResult)) {\n\t\t\t\t\t\trawItems = thingsResult;\n\t\t\t\t\t} else if (thingsResult) {\n\t\t\t\t\t\trawItems = (thingsResult.data ||\n\t\t\t\t\t\t\tthingsResult.items ||\n\t\t\t\t\t\t\tthingsResult.result ||\n\t\t\t\t\t\t\t[]) as RawApiItem[];\n\t\t\t\t\t}\n\n\t\t\t\t\t// Extract unique types from $type field\n\t\t\t\t\tconst uniqueTypes = new Set<string>();\n\t\t\t\t\tfor (const item of rawItems) {\n\t\t\t\t\t\tconst type =\n\t\t\t\t\t\t\titem.$type ?? ((item as Record<string, unknown>).type as string);\n\t\t\t\t\t\tif (type) {\n\t\t\t\t\t\t\tuniqueTypes.add(type);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn Array.from(uniqueTypes).map((typeName) => ({\n\t\t\t\t\t\tname: typeName,\n\t\t\t\t\t\tns,\n\t\t\t\t\t}));\n\t\t\t\t} catch (error) {\n\t\t\t\t\tconsole.error(\"[@mdxui/do] Failed to get types:\", error);\n\t\t\t\t\treturn [];\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tasync list(params: {\n\t\t\t\tns?: string;\n\t\t\t\ttype?: string;\n\t\t\t\tlimit?: number;\n\t\t\t\toffset?: number;\n\t\t\t}) {\n\t\t\t\ttry {\n\t\t\t\t\tconst ns = params.ns ?? \"default\";\n\t\t\t\t\tconst options: Record<string, unknown> = {};\n\t\t\t\t\tif (params.type) options.type = params.type;\n\t\t\t\t\tif (params.type) options.$type = params.type; // SDK might use $type\n\t\t\t\t\tif (params.limit !== undefined) options.limit = params.limit;\n\t\t\t\t\tif (params.offset !== undefined) options.offset = params.offset;\n\n\t\t\t\t\tconst result = (await rpc.things?.list?.(options)) as\n\t\t\t\t\t\t| ListResponse<RawApiItem>\n\t\t\t\t\t\t| RawApiItem[]\n\t\t\t\t\t\t| undefined;\n\n\t\t\t\t\tlet rawItems: RawApiItem[] = [];\n\t\t\t\t\tlet total = 0;\n\n\t\t\t\t\tif (Array.isArray(result)) {\n\t\t\t\t\t\trawItems = result;\n\t\t\t\t\t\ttotal = result.length;\n\t\t\t\t\t} else if (result) {\n\t\t\t\t\t\trawItems = (result.data ||\n\t\t\t\t\t\t\tresult.items ||\n\t\t\t\t\t\t\tresult.result ||\n\t\t\t\t\t\t\t[]) as RawApiItem[];\n\t\t\t\t\t\ttotal = result.total ?? result.count ?? rawItems.length;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Normalize items to expected Thing structure\n\t\t\t\t\tconst normalizedItems = rawItems.map((item) =>\n\t\t\t\t\t\tnormalizeApiItem(item, ns),\n\t\t\t\t\t);\n\n\t\t\t\t\treturn { data: normalizedItems, total };\n\t\t\t\t} catch (error) {\n\t\t\t\t\tconsole.error(\"[@mdxui/do] Failed to list things:\", error);\n\t\t\t\t\treturn { data: [], total: 0 };\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tasync get(params: { ns?: string; type?: string; id: string }) {\n\t\t\t\ttry {\n\t\t\t\t\tconst ns = params.ns ?? \"default\";\n\n\t\t\t\t\t// Try simple ID lookup first (most APIs support this)\n\t\t\t\t\tlet result = await rpc.things?.get?.(params.id);\n\n\t\t\t\t\t// If simple get returns null/undefined and type is provided, try with type filter\n\t\t\t\t\tif (!result && params.type) {\n\t\t\t\t\t\tresult = await rpc.things?.get?.({\n\t\t\t\t\t\t\tid: params.id,\n\t\t\t\t\t\t\ttype: params.type,\n\t\t\t\t\t\t\t$type: params.type,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tif (result) {\n\t\t\t\t\t\treturn normalizeApiItem(result as RawApiItem, ns);\n\t\t\t\t\t}\n\t\t\t\t\treturn null;\n\t\t\t\t} catch {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tasync create(params: { ns?: string; type: string; data: unknown }) {\n\t\t\t\tconst payload = {\n\t\t\t\t\t$type: params.type,\n\t\t\t\t\t...(params.data as object),\n\t\t\t\t};\n\t\t\t\tconst result = await rpc.things?.create?.(payload);\n\t\t\t\treturn result;\n\t\t\t},\n\n\t\t\tasync update(params: {\n\t\t\t\tns?: string;\n\t\t\t\ttype: string;\n\t\t\t\tid: string;\n\t\t\t\tdata: unknown;\n\t\t\t}) {\n\t\t\t\tconst payload = {\n\t\t\t\t\t$type: params.type,\n\t\t\t\t\tid: params.id,\n\t\t\t\t\t...(params.data as object),\n\t\t\t\t};\n\t\t\t\tconst result = await rpc.things?.update?.(params.id, payload);\n\t\t\t\treturn result;\n\t\t\t},\n\n\t\t\tasync delete(params: {\n\t\t\t\tns?: string;\n\t\t\t\ttype: string;\n\t\t\t\tid: string;\n\t\t\t\thard?: boolean;\n\t\t\t}) {\n\t\t\t\tawait rpc.things?.delete?.(params.id);\n\t\t\t\treturn { success: true };\n\t\t\t},\n\n\t\t\tasync versions(_params: { ns?: string; type: string; id: string }) {\n\t\t\t\t// Version history not yet supported by SDK\n\t\t\t\treturn [];\n\t\t\t},\n\n\t\t\tasync stats(_params: { ns?: string; type?: string }) {\n\t\t\t\ttry {\n\t\t\t\t\tconst options: Record<string, unknown> = {};\n\t\t\t\t\tif (_params.type) options.type = _params.type;\n\n\t\t\t\t\t// Try SDK stats endpoint\n\t\t\t\t\tconst result = await rpc.things?.stats?.(options);\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttotal: result?.total ?? 0,\n\t\t\t\t\t\tbyType: result?.byType ?? {},\n\t\t\t\t\t};\n\t\t\t\t} catch (error) {\n\t\t\t\t\tconsole.error(\"[@mdxui/do] Failed to get stats:\", error);\n\t\t\t\t\treturn { total: 0, byType: {} };\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Subscribe to real-time Thing updates\n\t\t\t * @returns Subscription object with unsubscribe method\n\t\t\t */\n\t\t\tsubscribe(\n\t\t\t\t_params: { ns?: string; type?: string; id?: string },\n\t\t\t\t_callbacks: {\n\t\t\t\t\tonCreated?: (thing: unknown) => void;\n\t\t\t\t\tonUpdated?: (thing: unknown) => void;\n\t\t\t\t\tonDeleted?: (id: string) => void;\n\t\t\t\t\tonError?: (error: unknown) => void;\n\t\t\t\t},\n\t\t\t) {\n\t\t\t\t// Real-time subscriptions require WebSocket transport\n\t\t\t\t// This is a stub - actual implementation would use SDK's subscribe method\n\t\t\t\tconsole.warn(\n\t\t\t\t\t'[@mdxui/do] Thing.subscribe() requires WebSocket transport. Use transport: \"ws\" for real-time updates.',\n\t\t\t\t);\n\t\t\t\treturn {\n\t\t\t\t\tunsubscribe: () => {\n\t\t\t\t\t\t// No-op for HTTP transport\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t},\n\t\t},\n\n\t\t/**\n\t\t * SQL operations\n\t\t */\n\t\tSQL: {\n\t\t\tasync execute(params: {\n\t\t\t\tquery: string;\n\t\t\t\tparams?: unknown[];\n\t\t\t}): Promise<SQLResult> {\n\t\t\t\ttry {\n\t\t\t\t\t// Try SDK SQL endpoint if available\n\t\t\t\t\tconst result = await rpc.sql?.execute?.(params.query, params.params);\n\t\t\t\t\treturn {\n\t\t\t\t\t\trows: result?.rows ?? [],\n\t\t\t\t\t\tcolumns: result?.columns ?? [],\n\t\t\t\t\t\trowsAffected: result?.rowsAffected,\n\t\t\t\t\t\texecutionTimeMs: result?.executionTimeMs,\n\t\t\t\t\t};\n\t\t\t\t} catch {\n\t\t\t\t\tthrow new Error(\"SQL execution is not supported by this server\");\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\n\t\t/**\n\t\t * Create a duplicate client instance\n\t\t */\n\t\tdup: () => createDOClient(baseUrl, options),\n\n\t\t/**\n\t\t * Register callback for RPC connection errors\n\t\t */\n\t\tonRpcBroken: (_callback: (error: unknown) => void) => {\n\t\t\t// SDK handles reconnection internally\n\t\t\t// Could hook into transport events if needed\n\t\t},\n\n\t\t/**\n\t\t * Cleanup/dispose the client\n\t\t */\n\t\t[Symbol.dispose]: () => {\n\t\t\t// SDK client cleanup\n\t\t\tif (rpc.close && typeof rpc.close === \"function\") {\n\t\t\t\trpc.close();\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Raw SDK access for advanced usage\n\t\t */\n\t\t$rpc: rpc,\n\t};\n}\n\n/**\n * Factory function for creating DOClient via @dotdo/do SDK\n *\n * This is the main export for the adapter, matching the naming pattern\n * of $CapnwebContext for easy migration.\n *\n * @example\n * ```typescript\n * // In do-provider.tsx\n * if (clientType === 'dotdo') {\n * return $DOContext(config.apiEndpoint, { authToken })\n * }\n * ```\n */\nexport function $DOContext(url: string, options?: DOContextOptions) {\n\treturn createDOClient(url, options);\n}\n\n// Type export for the client\nexport type DOContextClient = ReturnType<typeof $DOContext>;\n","/**\n * Mock Data Generators for DO Admin\n *\n * Generates realistic mock data for Things, Schemas, and other entities.\n * Used by the mock client for demo/development mode.\n *\n * @module\n */\n\nimport type { Thing, SemanticType, SemanticProperty } from '../types'\n\n// =============================================================================\n// ID Generation\n// =============================================================================\n\nlet idCounter = 0\n\nfunction generateId(prefix = 'mock'): string {\n return `${prefix}_${Date.now().toString(36)}_${(++idCounter).toString(36)}`\n}\n\n// =============================================================================\n// Mock Types / Schemas\n// =============================================================================\n\nconst mockProperties: Record<string, SemanticProperty[]> = {\n User: [\n { name: 'email', label: 'Email', description: 'Email address', rangeIncludes: ['string'], domainIncludes: ['User'], required: true, isArray: false },\n { name: 'role', label: 'Role', description: 'User role', rangeIncludes: ['string'], domainIncludes: ['User'], required: false, isArray: false },\n { name: 'avatar', label: 'Avatar', description: 'Profile picture URL', rangeIncludes: ['string'], domainIncludes: ['User'], required: false, isArray: false },\n { name: 'status', label: 'Status', description: 'Account status', rangeIncludes: ['string'], domainIncludes: ['User'], required: false, isArray: false },\n ],\n Project: [\n { name: 'description', label: 'Description', description: 'Project description', rangeIncludes: ['string'], domainIncludes: ['Project'], required: false, isArray: false },\n { name: 'status', label: 'Status', description: 'Project status', rangeIncludes: ['string'], domainIncludes: ['Project'], required: true, isArray: false },\n { name: 'owner', label: 'Owner', description: 'Project owner', rangeIncludes: ['User'], domainIncludes: ['Project'], required: true, isArray: false },\n { name: 'tags', label: 'Tags', description: 'Project tags', rangeIncludes: ['string'], domainIncludes: ['Project'], required: false, isArray: true },\n ],\n Task: [\n { name: 'description', label: 'Description', description: 'Task description', rangeIncludes: ['string'], domainIncludes: ['Task'], required: false, isArray: false },\n { name: 'status', label: 'Status', description: 'Task status', rangeIncludes: ['string'], domainIncludes: ['Task'], required: true, isArray: false },\n { name: 'priority', label: 'Priority', description: 'Task priority', rangeIncludes: ['string'], domainIncludes: ['Task'], required: false, isArray: false },\n { name: 'assignee', label: 'Assignee', description: 'Assigned user', rangeIncludes: ['User'], domainIncludes: ['Task'], required: false, isArray: false },\n { name: 'project', label: 'Project', description: 'Parent project', rangeIncludes: ['Project'], domainIncludes: ['Task'], required: false, isArray: false },\n { name: 'dueDate', label: 'Due Date', description: 'Task due date', rangeIncludes: ['date'], domainIncludes: ['Task'], required: false, isArray: false },\n ],\n Document: [\n { name: 'content', label: 'Content', description: 'Document content', rangeIncludes: ['string'], domainIncludes: ['Document'], required: true, isArray: false },\n { name: 'format', label: 'Format', description: 'Content format', rangeIncludes: ['string'], domainIncludes: ['Document'], required: false, isArray: false },\n { name: 'author', label: 'Author', description: 'Document author', rangeIncludes: ['User'], domainIncludes: ['Document'], required: false, isArray: false },\n { name: 'tags', label: 'Tags', description: 'Document tags', rangeIncludes: ['string'], domainIncludes: ['Document'], required: false, isArray: true },\n ],\n Function: [\n { name: 'description', label: 'Description', description: 'Function description', rangeIncludes: ['string'], domainIncludes: ['Function'], required: false, isArray: false },\n { name: 'code', label: 'Code', description: 'Function code', rangeIncludes: ['string'], domainIncludes: ['Function'], required: true, isArray: false },\n { name: 'runtime', label: 'Runtime', description: 'Execution runtime', rangeIncludes: ['string'], domainIncludes: ['Function'], required: true, isArray: false },\n { name: 'triggers', label: 'Triggers', description: 'Event triggers', rangeIncludes: ['string'], domainIncludes: ['Function'], required: false, isArray: true },\n ],\n Workflow: [\n { name: 'description', label: 'Description', description: 'Workflow description', rangeIncludes: ['string'], domainIncludes: ['Workflow'], required: false, isArray: false },\n { name: 'steps', label: 'Steps', description: 'Workflow steps', rangeIncludes: ['object'], domainIncludes: ['Workflow'], required: true, isArray: true },\n { name: 'status', label: 'Status', description: 'Workflow status', rangeIncludes: ['string'], domainIncludes: ['Workflow'], required: true, isArray: false },\n ],\n Agent: [\n { name: 'description', label: 'Description', description: 'Agent description', rangeIncludes: ['string'], domainIncludes: ['Agent'], required: false, isArray: false },\n { name: 'model', label: 'Model', description: 'AI model', rangeIncludes: ['string'], domainIncludes: ['Agent'], required: true, isArray: false },\n { name: 'systemPrompt', label: 'System Prompt', description: 'Agent system prompt', rangeIncludes: ['string'], domainIncludes: ['Agent'], required: false, isArray: false },\n { name: 'tools', label: 'Tools', description: 'Available tools', rangeIncludes: ['string'], domainIncludes: ['Agent'], required: false, isArray: true },\n ],\n}\n\nexport const MOCK_TYPES = Object.keys(mockProperties)\n\nexport function generateMockSchema(typeName: string): SemanticType {\n const properties = mockProperties[typeName] || []\n return {\n namespace: 'default',\n name: typeName,\n id: `default/${typeName}`,\n label: typeName,\n description: `${typeName} entity type`,\n parentTypes: ['Thing'],\n properties,\n subtypes: [],\n }\n}\n\n// =============================================================================\n// Mock Thing Generators\n// =============================================================================\n\nconst firstNames = ['Alice', 'Bob', 'Charlie', 'Diana', 'Eve', 'Frank', 'Grace', 'Henry', 'Iris', 'Jack']\nconst lastNames = ['Smith', 'Johnson', 'Williams', 'Brown', 'Jones', 'Garcia', 'Miller', 'Davis', 'Rodriguez', 'Martinez']\nconst projectNames = ['Apollo', 'Mercury', 'Gemini', 'Voyager', 'Pioneer', 'Horizon', 'Nebula', 'Cosmos', 'Atlas', 'Phoenix']\nconst taskPrefixes = ['Implement', 'Fix', 'Update', 'Review', 'Design', 'Test', 'Deploy', 'Document', 'Refactor', 'Optimize']\nconst statuses = ['active', 'pending', 'completed', 'archived']\nconst priorities = ['low', 'medium', 'high', 'critical']\nconst roles = ['admin', 'editor', 'viewer', 'developer']\n\nfunction randomItem<T>(arr: T[]): T {\n return arr[Math.floor(Math.random() * arr.length)]\n}\n\nfunction randomDate(daysBack = 30): Date {\n const date = new Date()\n date.setDate(date.getDate() - Math.floor(Math.random() * daysBack))\n return date\n}\n\nfunction generateMockUser(id?: string): Thing {\n const firstName = randomItem(firstNames)\n const lastName = randomItem(lastNames)\n const name = `${firstName} ${lastName}`\n const now = new Date()\n const created = randomDate(60)\n\n return {\n ns: 'default',\n type: 'User',\n id: id || generateId('user'),\n ts: now,\n name,\n createdAt: created,\n updatedAt: now,\n createdBy: 'system',\n data: {\n '@type': 'User',\n email: `${firstName.toLowerCase()}.${lastName.toLowerCase()}@example.com`,\n role: randomItem(roles),\n avatar: `https://api.dicebear.com/7.x/avataaars/svg?seed=${firstName}`,\n status: randomItem(['active', 'inactive']),\n },\n }\n}\n\nfunction generateMockProject(id?: string): Thing {\n const name = `Project ${randomItem(projectNames)}`\n const now = new Date()\n const created = randomDate(90)\n\n return {\n ns: 'default',\n type: 'Project',\n id: id || generateId('proj'),\n ts: now,\n name,\n createdAt: created,\n updatedAt: now,\n createdBy: 'system',\n data: {\n '@type': 'Project',\n description: `A ${randomItem(['web', 'mobile', 'API', 'data', 'ML'])} project focused on ${randomItem(['performance', 'scalability', 'user experience', 'automation', 'analytics'])}`,\n status: randomItem(statuses),\n owner: `user_${Math.floor(Math.random() * 10)}`,\n tags: [randomItem(['frontend', 'backend', 'fullstack']), randomItem(['react', 'node', 'python', 'go'])],\n },\n }\n}\n\nfunction generateMockTask(id?: string): Thing {\n const action = randomItem(taskPrefixes)\n const target = randomItem(['authentication', 'dashboard', 'API endpoint', 'database schema', 'user flow', 'notification system', 'search feature', 'export functionality'])\n const name = `${action} ${target}`\n const now = new Date()\n const created = randomDate(14)\n\n return {\n ns: 'default',\n type: 'Task',\n id: id || generateId('task'),\n ts: now,\n name,\n createdAt: created,\n updatedAt: now,\n createdBy: 'system',\n data: {\n '@type': 'Task',\n description: `${action} the ${target} to improve ${randomItem(['performance', 'reliability', 'usability', 'security'])}`,\n status: randomItem(['todo', 'in_progress', 'review', 'done']),\n priority: randomItem(priorities),\n assignee: `user_${Math.floor(Math.random() * 10)}`,\n dueDate: new Date(Date.now() + Math.random() * 14 * 24 * 60 * 60 * 1000).toISOString(),\n },\n }\n}\n\nfunction generateMockDocument(id?: string): Thing {\n const docTypes = ['README', 'API Documentation', 'Architecture Guide', 'User Manual', 'Release Notes', 'Meeting Notes', 'Technical Spec', 'Design Document']\n const name = randomItem(docTypes)\n const now = new Date()\n const created = randomDate(30)\n\n return {\n ns: 'default',\n type: 'Document',\n id: id || generateId('doc'),\n ts: now,\n name,\n createdAt: created,\n updatedAt: now,\n createdBy: 'system',\n data: {\n '@type': 'Document',\n content: `# ${name}\\n\\nThis is a sample document with mock content.\\n\\n## Overview\\n\\nLorem ipsum dolor sit amet, consectetur adipiscing elit.`,\n format: 'markdown',\n author: `user_${Math.floor(Math.random() * 10)}`,\n tags: [randomItem(['documentation', 'guide', 'reference']), randomItem(['v1', 'v2', 'draft'])],\n },\n }\n}\n\nfunction generateMockFunction(id?: string): Thing {\n const funcNames = ['processOrder', 'sendNotification', 'validateInput', 'transformData', 'generateReport', 'syncData', 'handleWebhook', 'calculateMetrics']\n const name = randomItem(funcNames)\n const now = new Date()\n const created = randomDate(45)\n\n return {\n ns: 'default',\n type: 'Function',\n id: id || generateId('fn'),\n ts: now,\n name,\n createdAt: created,\n updatedAt: now,\n createdBy: 'system',\n data: {\n '@type': 'Function',\n description: `Handles ${name.replace(/([A-Z])/g, ' $1').toLowerCase().trim()} operations`,\n code: `export default async function ${name}(ctx, args) {\\n // Implementation\\n return { success: true }\\n}`,\n runtime: randomItem(['typescript', 'javascript', 'python']),\n triggers: [randomItem(['http', 'schedule', 'event', 'queue'])],\n },\n }\n}\n\nfunction generateMockWorkflow(id?: string): Thing {\n const workflowNames = ['Order Processing', 'User Onboarding', 'Content Approval', 'Data Pipeline', 'Release Deploy', 'Support Ticket']\n const name = randomItem(workflowNames)\n const now = new Date()\n const created = randomDate(60)\n\n return {\n ns: 'default',\n type: 'Workflow',\n id: id || generateId('wf'),\n ts: now,\n name,\n createdAt: created,\n updatedAt: now,\n createdBy: 'system',\n data: {\n '@type': 'Workflow',\n description: `Automated workflow for ${name.toLowerCase()}`,\n steps: [\n { id: 'step1', name: 'Initialize', type: 'function' },\n { id: 'step2', name: 'Process', type: 'function' },\n { id: 'step3', name: 'Notify', type: 'notification' },\n ],\n status: randomItem(['active', 'paused', 'draft']),\n },\n }\n}\n\nfunction generateMockAgent(id?: string): Thing {\n const agentNames = ['Code Assistant', 'Data Analyst', 'Support Bot', 'Content Writer', 'Research Agent', 'QA Tester']\n const name = randomItem(agentNames)\n const now = new Date()\n const created = randomDate(30)\n\n return {\n ns: 'default',\n type: 'Agent',\n id: id || generateId('agent'),\n ts: now,\n name,\n createdAt: created,\n updatedAt: now,\n createdBy: 'system',\n data: {\n '@type': 'Agent',\n description: `AI agent specialized in ${name.toLowerCase()} tasks`,\n model: randomItem(['claude-3-opus', 'claude-3-sonnet', 'gpt-4', 'gpt-4-turbo']),\n systemPrompt: `You are a helpful ${name.toLowerCase()} assistant.`,\n tools: [randomItem(['search', 'code', 'browse', 'analyze'])],\n },\n }\n}\n\n// =============================================================================\n// Unified Generator\n// =============================================================================\n\nconst generators: Record<string, (id?: string) => Thing> = {\n User: generateMockUser,\n Project: generateMockProject,\n Task: generateMockTask,\n Document: generateMockDocument,\n Function: generateMockFunction,\n Workflow: generateMockWorkflow,\n Agent: generateMockAgent,\n}\n\nexport function generateMockThing(type: string, id?: string): Thing {\n const generator = generators[type]\n if (generator) {\n return generator(id)\n }\n\n // Generic fallback for unknown types\n const now = new Date()\n return {\n ns: 'default',\n type,\n id: id || generateId(type.toLowerCase()),\n ts: now,\n name: `${type} ${Math.floor(Math.random() * 1000)}`,\n createdAt: randomDate(30),\n updatedAt: now,\n createdBy: 'system',\n data: {\n '@type': type,\n },\n }\n}\n\nexport function generateMockThings(type: string, count: number): Thing[] {\n return Array.from({ length: count }, () => generateMockThing(type))\n}\n\n/**\n * Generate initial mock data set with various types\n */\nexport function generateInitialMockData(): Thing[] {\n return [\n ...generateMockThings('User', 8),\n ...generateMockThings('Project', 5),\n ...generateMockThings('Task', 15),\n ...generateMockThings('Document', 6),\n ...generateMockThings('Function', 4),\n ...generateMockThings('Workflow', 3),\n ...generateMockThings('Agent', 3),\n ]\n}\n","/**\n * Mock Client for DO Admin\n *\n * Provides a mock implementation of the DOClient interface for demo/development mode.\n * All data is stored in memory and persists for the session.\n *\n * @module\n */\n\nimport type { Thing } from '../types'\nimport {\n MOCK_TYPES,\n generateMockSchema,\n generateMockThing,\n generateInitialMockData,\n} from './mock-data'\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface MockClientOptions {\n /** Initial data to populate the store */\n initialData?: Thing[]\n /** Simulated network delay in ms (default: 100) */\n delay?: number\n /** Whether to log operations (default: false) */\n verbose?: boolean\n}\n\ninterface MockStore {\n things: Map<string, Thing>\n deletedThings: Set<string>\n}\n\n// =============================================================================\n// Utility Functions\n// =============================================================================\n\nfunction thingKey(ns: string, type: string, id: string): string {\n return `${ns}:${type}:${id}`\n}\n\nasync function delay(ms: number): Promise<void> {\n if (ms > 0) {\n await new Promise((resolve) => setTimeout(resolve, ms))\n }\n}\n\n// =============================================================================\n// Mock Client Implementation\n// =============================================================================\n\n/**\n * Create a mock client that matches the DOClient interface\n */\nexport function createMockClient(options: MockClientOptions = {}) {\n const { delay: delayMs = 100, verbose = false, initialData } = options\n\n // Initialize store\n const store: MockStore = {\n things: new Map(),\n deletedThings: new Set(),\n }\n\n // Populate with initial data\n const data = initialData ?? generateInitialMockData()\n for (const thing of data) {\n const key = thingKey(thing.ns, thing.type, thing.id)\n store.things.set(key, thing)\n }\n\n if (verbose) {\n console.log(`[MockClient] Initialized with ${store.things.size} things`)\n }\n\n // Helper to log operations\n function log(operation: string, ...args: unknown[]) {\n if (verbose) {\n console.log(`[MockClient] ${operation}`, ...args)\n }\n }\n\n return {\n /**\n * Namespace operations\n */\n Namespace: {\n async list(_params?: { includeSystem?: boolean }) {\n await delay(delayMs)\n log('Namespace.list')\n\n // Get unique namespaces from things\n const namespaces = new Set<string>()\n for (const thing of store.things.values()) {\n namespaces.add(thing.ns)\n }\n\n // Always include default\n namespaces.add('default')\n\n return Array.from(namespaces).map((ns) => ({\n id: ns,\n name: ns,\n }))\n },\n },\n\n /**\n * Schema operations\n */\n Schema: {\n async discover(_params?: { ns?: string }) {\n await delay(delayMs)\n log('Schema.discover')\n\n // Get unique types from things\n const types = new Set<string>()\n for (const thing of store.things.values()) {\n types.add(thing.type)\n }\n\n // Add standard mock types\n for (const type of MOCK_TYPES) {\n types.add(type)\n }\n\n const typeList = Array.from(types).sort()\n\n return {\n namespaces: ['default'],\n types: typeList,\n schemas: typeList,\n }\n },\n\n async get(params: { ns?: string; type: string }) {\n await delay(delayMs)\n log('Schema.get', params.type)\n\n return generateMockSchema(params.type)\n },\n },\n\n /**\n * Thing operations\n */\n Thing: {\n async types(params: { ns?: string; includeSystem?: boolean }) {\n await delay(delayMs)\n log('Thing.types')\n\n // Get unique types from things in namespace\n const types = new Set<string>()\n for (const thing of store.things.values()) {\n if (!params.ns || thing.ns === params.ns) {\n types.add(thing.type)\n }\n }\n\n // Add standard mock types\n for (const type of MOCK_TYPES) {\n types.add(type)\n }\n\n return Array.from(types)\n .sort()\n .map((name) => ({\n name,\n ns: params.ns || 'default',\n }))\n },\n\n async list(params: { ns?: string; type?: string; limit?: number; offset?: number }) {\n await delay(delayMs)\n log('Thing.list', params)\n\n let things = Array.from(store.things.values())\n\n // Filter by namespace\n if (params.ns) {\n things = things.filter((t) => t.ns === params.ns)\n }\n\n // Filter by type\n if (params.type) {\n things = things.filter((t) => t.type === params.type)\n }\n\n // Filter out deleted\n things = things.filter((t) => {\n const key = thingKey(t.ns, t.type, t.id)\n return !store.deletedThings.has(key)\n })\n\n // Sort by updatedAt descending\n things.sort((a, b) => new Date(b.updatedAt).getTime() - new Date(a.updatedAt).getTime())\n\n const total = things.length\n\n // Apply pagination\n const offset = params.offset || 0\n const limit = params.limit || 50\n things = things.slice(offset, offset + limit)\n\n return { data: things, total }\n },\n\n async get(params: { ns?: string; type: string; id: string }) {\n await delay(delayMs)\n log('Thing.get', params)\n\n const key = thingKey(params.ns || 'default', params.type, params.id)\n\n if (store.deletedThings.has(key)) {\n return null\n }\n\n return store.things.get(key) || null\n },\n\n async create(params: { ns?: string; type: string; name?: string; data: unknown }) {\n await delay(delayMs)\n log('Thing.create', params)\n\n const ns = params.ns || 'default'\n const now = new Date()\n\n // Generate a new thing with provided data\n const baseThing = generateMockThing(params.type)\n const thing: Thing = {\n ...baseThing,\n ns,\n id: baseThing.id,\n name: params.name || baseThing.name,\n createdAt: now,\n updatedAt: now,\n ts: now,\n data: {\n '@type': params.type,\n ...(params.data as Record<string, unknown>),\n },\n }\n\n const key = thingKey(ns, params.type, thing.id)\n store.things.set(key, thing)\n\n return thing\n },\n\n async update(params: { ns?: string; type: string; id: string; data: unknown }) {\n await delay(delayMs)\n log('Thing.update', params)\n\n const ns = params.ns || 'default'\n const key = thingKey(ns, params.type, params.id)\n\n const existing = store.things.get(key)\n if (!existing || store.deletedThings.has(key)) {\n throw new Error(`Thing not found: ${key}`)\n }\n\n const now = new Date()\n const updated: Thing = {\n ...existing,\n updatedAt: now,\n ts: now,\n data: {\n ...existing.data,\n ...(params.data as Record<string, unknown>),\n },\n }\n\n store.things.set(key, updated)\n\n return updated\n },\n\n async delete(params: { ns?: string; type: string; id: string; hard?: boolean }) {\n await delay(delayMs)\n log('Thing.delete', params)\n\n const ns = params.ns || 'default'\n const key = thingKey(ns, params.type, params.id)\n\n if (params.hard) {\n store.things.delete(key)\n } else {\n store.deletedThings.add(key)\n }\n\n return { success: true }\n },\n\n async versions(_params: { ns?: string; type: string; id: string }) {\n await delay(delayMs)\n log('Thing.versions', _params)\n\n // Mock: return empty versions (version history not implemented in mock)\n return []\n },\n\n async stats(_params: { ns?: string; type?: string }) {\n await delay(delayMs)\n log('Thing.stats', _params)\n\n const byType: Record<string, number> = {}\n let total = 0\n\n for (const thing of store.things.values()) {\n const key = thingKey(thing.ns, thing.type, thing.id)\n if (store.deletedThings.has(key)) continue\n if (_params.ns && thing.ns !== _params.ns) continue\n if (_params.type && thing.type !== _params.type) continue\n\n byType[thing.type] = (byType[thing.type] || 0) + 1\n total++\n }\n\n return { total, byType }\n },\n },\n\n /**\n * SQL operations (mock implementation)\n */\n SQL: {\n async execute(params: { query: string; params?: unknown[] }) {\n await delay(delayMs)\n log('SQL.execute', params.query)\n\n // Simple mock SQL that returns things as rows\n const query = params.query.toLowerCase().trim()\n\n if (query.startsWith('select')) {\n // Parse simple SELECT * FROM <type> queries\n const match = query.match(/select\\s+\\*\\s+from\\s+(\\w+)/i)\n if (match) {\n const type = match[1]\n const things = Array.from(store.things.values()).filter(\n (t) => t.type.toLowerCase() === type.toLowerCase()\n )\n\n const rows = things.map((t) => ({\n id: t.id,\n ns: t.ns,\n type: t.type,\n name: t.name,\n createdAt: t.createdAt,\n updatedAt: t.updatedAt,\n data: JSON.stringify(t.data),\n }))\n\n return {\n rows,\n columns: [\n { name: 'id', type: 'string' },\n { name: 'ns', type: 'string' },\n { name: 'type', type: 'string' },\n { name: 'name', type: 'string' },\n { name: 'createdAt', type: 'datetime' },\n { name: 'updatedAt', type: 'datetime' },\n { name: 'data', type: 'json' },\n ],\n rowsAffected: rows.length,\n executionTimeMs: delayMs,\n }\n }\n }\n\n // Default: return empty result\n return {\n rows: [],\n columns: [],\n rowsAffected: 0,\n executionTimeMs: delayMs,\n }\n },\n },\n\n // Required for interface compatibility\n dup: () => createMockClient(options),\n onRpcBroken: (_callback: (error: unknown) => void) => {\n // Mock client never breaks\n },\n [Symbol.dispose]: () => {\n // Nothing to dispose\n },\n\n // Mock-specific methods for testing\n _store: store,\n _reset: () => {\n store.things.clear()\n store.deletedThings.clear()\n const freshData = initialData ?? generateInitialMockData()\n for (const thing of freshData) {\n const key = thingKey(thing.ns, thing.type, thing.id)\n store.things.set(key, thing)\n }\n },\n }\n}\n\n/**\n * Create a mock client context - factory function matching DOClient interface\n */\nexport function $MockContext(options?: MockClientOptions) {\n return createMockClient(options)\n}\n","/**\n * Fetch wrapper with configurable timeout\n *\n * Prevents indefinite hangs on slow networks or unresponsive servers\n * by wrapping fetch with AbortController-based timeout.\n *\n * @module\n */\n\n/**\n * Default timeout in milliseconds (30 seconds)\n */\nexport const DEFAULT_REQUEST_TIMEOUT = 30000\n\n/**\n * Extended RequestInit that includes optional timeout\n */\nexport interface FetchWithTimeoutOptions extends RequestInit {\n /** Timeout in milliseconds. Defaults to 30000 (30 seconds) */\n timeout?: number\n}\n\n/**\n * Fetch wrapper with configurable timeout\n *\n * Uses AbortController to cancel requests that exceed the timeout.\n * If the request already has a signal, a composite abort will be used\n * that respects both the existing signal and the timeout.\n *\n * @param url - The URL to fetch\n * @param options - Fetch options including optional timeout\n * @returns Promise resolving to the Response\n * @throws {DOMException} AbortError if the request times out\n *\n * @example\n * ```typescript\n * // Basic usage with default 30s timeout\n * const response = await fetchWithTimeout('https://api.example.com/data')\n *\n * // Custom timeout\n * const response = await fetchWithTimeout('https://api.example.com/data', {\n * timeout: 5000, // 5 seconds\n * })\n *\n * // With other fetch options\n * const response = await fetchWithTimeout('https://api.example.com/data', {\n * method: 'POST',\n * headers: { 'Content-Type': 'application/json' },\n * body: JSON.stringify({ key: 'value' }),\n * timeout: 10000,\n * })\n * ```\n */\nexport async function fetchWithTimeout(\n url: string,\n options: FetchWithTimeoutOptions = {}\n): Promise<Response> {\n const { timeout = DEFAULT_REQUEST_TIMEOUT, signal: existingSignal, ...fetchOptions } = options\n\n const controller = new AbortController()\n const timeoutId = setTimeout(() => controller.abort(), timeout)\n\n // If there's an existing signal, listen for its abort\n const existingAbortHandler = existingSignal\n ? () => controller.abort(existingSignal.reason)\n : null\n\n if (existingSignal) {\n if (existingSignal.aborted) {\n clearTimeout(timeoutId)\n controller.abort(existingSignal.reason)\n } else {\n existingSignal.addEventListener('abort', existingAbortHandler!)\n }\n }\n\n try {\n const response = await fetch(url, {\n ...fetchOptions,\n signal: controller.signal,\n })\n return response\n } finally {\n clearTimeout(timeoutId)\n if (existingSignal && existingAbortHandler) {\n existingSignal.removeEventListener('abort', existingAbortHandler)\n }\n }\n}\n\n/**\n * Create a fetch wrapper with a default timeout from config\n *\n * Useful for creating a configured fetch function that can be shared\n * across multiple hooks/components with consistent timeout behavior.\n *\n * @param defaultTimeout - Default timeout in milliseconds\n * @returns A fetch function with the default timeout applied\n *\n * @example\n * ```typescript\n * // Create a configured fetch\n * const configuredFetch = createFetchWithTimeout(5000)\n *\n * // Use it (timeout defaults to 5000ms)\n * const response = await configuredFetch('https://api.example.com/data')\n *\n * // Override the default timeout\n * const response = await configuredFetch('https://api.example.com/data', {\n * timeout: 10000,\n * })\n * ```\n */\nexport function createFetchWithTimeout(defaultTimeout: number) {\n return (url: string, options: FetchWithTimeoutOptions = {}): Promise<Response> =>\n fetchWithTimeout(url, { timeout: defaultTimeout, ...options })\n}\n"]}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
|
|
3
|
+
// src/schemas/errors.ts
|
|
4
|
+
var BaseErrorSchema = z.object({
|
|
5
|
+
/** Error code identifier */
|
|
6
|
+
code: z.string(),
|
|
7
|
+
/** Human-readable error message */
|
|
8
|
+
message: z.string(),
|
|
9
|
+
/** Additional error details */
|
|
10
|
+
details: z.record(z.unknown()).optional()
|
|
11
|
+
});
|
|
12
|
+
var FieldErrorSchema = z.object({
|
|
13
|
+
/** Field that failed validation */
|
|
14
|
+
field: z.string(),
|
|
15
|
+
/** Validation error message */
|
|
16
|
+
message: z.string(),
|
|
17
|
+
/** Validation error code */
|
|
18
|
+
code: z.string()
|
|
19
|
+
});
|
|
20
|
+
var ValidationErrorDataSchema = BaseErrorSchema.extend({
|
|
21
|
+
/** Error code - always 'VALIDATION_ERROR' */
|
|
22
|
+
code: z.literal("VALIDATION_ERROR"),
|
|
23
|
+
/** Specific field that failed (optional) */
|
|
24
|
+
field: z.string().optional(),
|
|
25
|
+
/** Array of field-level errors */
|
|
26
|
+
errors: z.array(FieldErrorSchema)
|
|
27
|
+
});
|
|
28
|
+
var NotFoundErrorSchema = BaseErrorSchema.extend({
|
|
29
|
+
/** Error code - always 'NOT_FOUND' */
|
|
30
|
+
code: z.literal("NOT_FOUND"),
|
|
31
|
+
/** Type of resource that was not found */
|
|
32
|
+
resourceType: z.string(),
|
|
33
|
+
/** ID of resource that was not found */
|
|
34
|
+
resourceId: z.string()
|
|
35
|
+
});
|
|
36
|
+
var PermissionErrorSchema = BaseErrorSchema.extend({
|
|
37
|
+
/** Error code - always 'PERMISSION_DENIED' */
|
|
38
|
+
code: z.literal("PERMISSION_DENIED"),
|
|
39
|
+
/** Permission that was required */
|
|
40
|
+
requiredPermission: z.string(),
|
|
41
|
+
/** Resource that access was denied to */
|
|
42
|
+
resource: z.string().optional()
|
|
43
|
+
});
|
|
44
|
+
var RateLimitErrorSchema = BaseErrorSchema.extend({
|
|
45
|
+
/** Error code - always 'RATE_LIMITED' */
|
|
46
|
+
code: z.literal("RATE_LIMITED"),
|
|
47
|
+
/** Seconds until retry is allowed */
|
|
48
|
+
retryAfter: z.number(),
|
|
49
|
+
/** Rate limit ceiling */
|
|
50
|
+
limit: z.number(),
|
|
51
|
+
/** Remaining requests in window */
|
|
52
|
+
remaining: z.number()
|
|
53
|
+
});
|
|
54
|
+
var AppErrorSchema = z.union([
|
|
55
|
+
ValidationErrorDataSchema,
|
|
56
|
+
NotFoundErrorSchema,
|
|
57
|
+
PermissionErrorSchema,
|
|
58
|
+
RateLimitErrorSchema,
|
|
59
|
+
BaseErrorSchema
|
|
60
|
+
]);
|
|
61
|
+
function isValidationErrorData(error) {
|
|
62
|
+
return error.code === "VALIDATION_ERROR";
|
|
63
|
+
}
|
|
64
|
+
function isNotFoundError(error) {
|
|
65
|
+
return error.code === "NOT_FOUND";
|
|
66
|
+
}
|
|
67
|
+
function isPermissionError(error) {
|
|
68
|
+
return error.code === "PERMISSION_DENIED";
|
|
69
|
+
}
|
|
70
|
+
function isRateLimitError(error) {
|
|
71
|
+
return error.code === "RATE_LIMITED";
|
|
72
|
+
}
|
|
73
|
+
function isAppError(error) {
|
|
74
|
+
return typeof error === "object" && error !== null && "code" in error && typeof error.code === "string" && "message" in error && typeof error.message === "string";
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
export { AppErrorSchema, BaseErrorSchema, FieldErrorSchema, NotFoundErrorSchema, PermissionErrorSchema, RateLimitErrorSchema, ValidationErrorDataSchema, isAppError, isNotFoundError, isPermissionError, isRateLimitError, isValidationErrorData };
|
|
78
|
+
//# sourceMappingURL=chunk-LCYBQR35.js.map
|
|
79
|
+
//# sourceMappingURL=chunk-LCYBQR35.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/schemas/errors.ts"],"names":[],"mappings":";;;AAoBO,IAAM,eAAA,GAAkB,EAAE,MAAA,CAAO;AAAA;AAAA,EAEtC,IAAA,EAAM,EAAE,MAAA,EAAO;AAAA;AAAA,EAEf,OAAA,EAAS,EAAE,MAAA,EAAO;AAAA;AAAA,EAElB,SAAS,CAAA,CAAE,MAAA,CAAO,EAAE,OAAA,EAAS,EAAE,QAAA;AACjC,CAAC;AAcM,IAAM,gBAAA,GAAmB,EAAE,MAAA,CAAO;AAAA;AAAA,EAEvC,KAAA,EAAO,EAAE,MAAA,EAAO;AAAA;AAAA,EAEhB,OAAA,EAAS,EAAE,MAAA,EAAO;AAAA;AAAA,EAElB,IAAA,EAAM,EAAE,MAAA;AACV,CAAC;AAKM,IAAM,yBAAA,GAA4B,gBAAgB,MAAA,CAAO;AAAA;AAAA,EAE9D,IAAA,EAAM,CAAA,CAAE,OAAA,CAAQ,kBAAkB,CAAA;AAAA;AAAA,EAElC,KAAA,EAAO,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA;AAAA,EAE3B,MAAA,EAAQ,CAAA,CAAE,KAAA,CAAM,gBAAgB;AAClC,CAAC;AAkBM,IAAM,mBAAA,GAAsB,gBAAgB,MAAA,CAAO;AAAA;AAAA,EAExD,IAAA,EAAM,CAAA,CAAE,OAAA,CAAQ,WAAW,CAAA;AAAA;AAAA,EAE3B,YAAA,EAAc,EAAE,MAAA,EAAO;AAAA;AAAA,EAEvB,UAAA,EAAY,EAAE,MAAA;AAChB,CAAC;AAcM,IAAM,qBAAA,GAAwB,gBAAgB,MAAA,CAAO;AAAA;AAAA,EAE1D,IAAA,EAAM,CAAA,CAAE,OAAA,CAAQ,mBAAmB,CAAA;AAAA;AAAA,EAEnC,kBAAA,EAAoB,EAAE,MAAA,EAAO;AAAA;AAAA,EAE7B,QAAA,EAAU,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AACvB,CAAC;AAcM,IAAM,oBAAA,GAAuB,gBAAgB,MAAA,CAAO;AAAA;AAAA,EAEzD,IAAA,EAAM,CAAA,CAAE,OAAA,CAAQ,cAAc,CAAA;AAAA;AAAA,EAE9B,UAAA,EAAY,EAAE,MAAA,EAAO;AAAA;AAAA,EAErB,KAAA,EAAO,EAAE,MAAA,EAAO;AAAA;AAAA,EAEhB,SAAA,EAAW,EAAE,MAAA;AACf,CAAC;AAcM,IAAM,cAAA,GAAiB,EAAE,KAAA,CAAM;AAAA,EACpC,yBAAA;AAAA,EACA,mBAAA;AAAA,EACA,qBAAA;AAAA,EACA,oBAAA;AAAA,EACA;AACF,CAAC;AAwBM,SAAS,sBAAsB,KAAA,EAA+C;AACnF,EAAA,OAAO,MAAM,IAAA,KAAS,kBAAA;AACxB;AAcO,SAAS,gBAAgB,KAAA,EAAyC;AACvE,EAAA,OAAO,MAAM,IAAA,KAAS,WAAA;AACxB;AAKO,SAAS,kBAAkB,KAAA,EAA2C;AAC3E,EAAA,OAAO,MAAM,IAAA,KAAS,mBAAA;AACxB;AAKO,SAAS,iBAAiB,KAAA,EAA0C;AACzE,EAAA,OAAO,MAAM,IAAA,KAAS,cAAA;AACxB;AAmBO,SAAS,WAAW,KAAA,EAAmC;AAC5D,EAAA,OACE,OAAO,KAAA,KAAU,QAAA,IACjB,KAAA,KAAU,QACV,MAAA,IAAU,KAAA,IACV,OAAQ,KAAA,CAAmB,SAAS,QAAA,IACpC,SAAA,IAAa,KAAA,IACb,OAAQ,MAAmB,OAAA,KAAY,QAAA;AAE3C","file":"chunk-LCYBQR35.js","sourcesContent":["/**\n * Error Schemas - Zod Schemas for Error Types\n *\n * This file contains Zod schemas for all error types used in the application.\n * Types are derived from schemas to ensure a single source of truth.\n *\n * @remarks\n * Use these schemas for validating error responses from APIs.\n * Use type guards for runtime error discrimination.\n */\n\nimport { z } from 'zod'\n\n// =============================================================================\n// Base Error\n// =============================================================================\n\n/**\n * Schema for base error structure.\n */\nexport const BaseErrorSchema = z.object({\n /** Error code identifier */\n code: z.string(),\n /** Human-readable error message */\n message: z.string(),\n /** Additional error details */\n details: z.record(z.unknown()).optional(),\n})\n\n/**\n * Base error type - all errors extend this.\n */\nexport type BaseError = z.infer<typeof BaseErrorSchema>\n\n// =============================================================================\n// Validation Error\n// =============================================================================\n\n/**\n * Schema for individual field validation error.\n */\nexport const FieldErrorSchema = z.object({\n /** Field that failed validation */\n field: z.string(),\n /** Validation error message */\n message: z.string(),\n /** Validation error code */\n code: z.string(),\n})\n\n/**\n * Schema for validation error data.\n */\nexport const ValidationErrorDataSchema = BaseErrorSchema.extend({\n /** Error code - always 'VALIDATION_ERROR' */\n code: z.literal('VALIDATION_ERROR'),\n /** Specific field that failed (optional) */\n field: z.string().optional(),\n /** Array of field-level errors */\n errors: z.array(FieldErrorSchema),\n})\n\n/**\n * Validation error data structure (interface).\n *\n * This interface represents validation error data in API responses.\n * For throwing validation errors in code, use the `ValidationError` class\n * from the utils module.\n */\nexport type ValidationErrorData = z.infer<typeof ValidationErrorDataSchema>\n\n// =============================================================================\n// Not Found Error\n// =============================================================================\n\n/**\n * Schema for not found error.\n */\nexport const NotFoundErrorSchema = BaseErrorSchema.extend({\n /** Error code - always 'NOT_FOUND' */\n code: z.literal('NOT_FOUND'),\n /** Type of resource that was not found */\n resourceType: z.string(),\n /** ID of resource that was not found */\n resourceId: z.string(),\n})\n\n/**\n * Not found error - resource does not exist.\n */\nexport type NotFoundError = z.infer<typeof NotFoundErrorSchema>\n\n// =============================================================================\n// Permission Error\n// =============================================================================\n\n/**\n * Schema for permission error.\n */\nexport const PermissionErrorSchema = BaseErrorSchema.extend({\n /** Error code - always 'PERMISSION_DENIED' */\n code: z.literal('PERMISSION_DENIED'),\n /** Permission that was required */\n requiredPermission: z.string(),\n /** Resource that access was denied to */\n resource: z.string().optional(),\n})\n\n/**\n * Permission error - access denied.\n */\nexport type PermissionError = z.infer<typeof PermissionErrorSchema>\n\n// =============================================================================\n// Rate Limit Error\n// =============================================================================\n\n/**\n * Schema for rate limit error.\n */\nexport const RateLimitErrorSchema = BaseErrorSchema.extend({\n /** Error code - always 'RATE_LIMITED' */\n code: z.literal('RATE_LIMITED'),\n /** Seconds until retry is allowed */\n retryAfter: z.number(),\n /** Rate limit ceiling */\n limit: z.number(),\n /** Remaining requests in window */\n remaining: z.number(),\n})\n\n/**\n * Rate limit error - too many requests.\n */\nexport type RateLimitError = z.infer<typeof RateLimitErrorSchema>\n\n// =============================================================================\n// Union Type\n// =============================================================================\n\n/**\n * Schema for any application error.\n */\nexport const AppErrorSchema = z.union([\n ValidationErrorDataSchema,\n NotFoundErrorSchema,\n PermissionErrorSchema,\n RateLimitErrorSchema,\n BaseErrorSchema,\n])\n\n/**\n * Union of all error types.\n */\nexport type AppError = ValidationErrorData | NotFoundError | PermissionError | RateLimitError | BaseError\n\n// =============================================================================\n// Type Guards\n// =============================================================================\n\n/**\n * Type guard for ValidationErrorData.\n *\n * @example\n * ```typescript\n * function handleError(error: AppError) {\n * if (isValidationErrorData(error)) {\n * // TypeScript knows error.errors exists here\n * console.log(error.errors)\n * }\n * }\n * ```\n */\nexport function isValidationErrorData(error: AppError): error is ValidationErrorData {\n return error.code === 'VALIDATION_ERROR'\n}\n\n/**\n * Type guard for NotFoundError.\n *\n * @example\n * ```typescript\n * function handleError(error: AppError) {\n * if (isNotFoundError(error)) {\n * console.log(`${error.resourceType}/${error.resourceId} not found`)\n * }\n * }\n * ```\n */\nexport function isNotFoundError(error: AppError): error is NotFoundError {\n return error.code === 'NOT_FOUND'\n}\n\n/**\n * Type guard for PermissionError.\n */\nexport function isPermissionError(error: AppError): error is PermissionError {\n return error.code === 'PERMISSION_DENIED'\n}\n\n/**\n * Type guard for RateLimitError.\n */\nexport function isRateLimitError(error: AppError): error is RateLimitError {\n return error.code === 'RATE_LIMITED'\n}\n\n/**\n * Generic type guard to check if an unknown value is an AppError.\n *\n * Useful for catch blocks where the error type is unknown:\n *\n * @example\n * ```typescript\n * try {\n * await someOperation()\n * } catch (error) {\n * if (isAppError(error)) {\n * // TypeScript knows error is AppError here\n * console.log(error.code, error.message)\n * }\n * }\n * ```\n */\nexport function isAppError(error: unknown): error is AppError {\n return (\n typeof error === 'object' &&\n error !== null &&\n 'code' in error &&\n typeof (error as AppError).code === 'string' &&\n 'message' in error &&\n typeof (error as AppError).message === 'string'\n )\n}\n"]}
|
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
import { Breadcrumbs } from './chunk-SX4IIE2R.js';
|
|
2
|
+
import { useDOConfig, useDORoutes, UserMenu, AuthGate } from './chunk-7J3RSIG4.js';
|
|
3
|
+
import { useBreadcrumbs } from './chunk-7TFHUKS7.js';
|
|
4
|
+
import { useWebLocation, WebLink } from '@mdxui/navigation/web';
|
|
5
|
+
import { Sidebar, SidebarHeader, SidebarMenu, SidebarMenuItem, SidebarMenuButton, SidebarContent, SidebarGroup, SidebarGroupLabel, SidebarFooter, SidebarProvider, SidebarInset, SidebarTrigger, Separator, Toaster } from '@mdxui/primitives';
|
|
6
|
+
import { Database, Home, Bot, Code, GitBranch, Shapes, BookOpen, Zap, Play, Network, Activity, Users, CreditCard, Plug, Building, Shield, UserCog, Key, Settings } from 'lucide-react';
|
|
7
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
8
|
+
|
|
9
|
+
var navGroups = {
|
|
10
|
+
main: [{ title: "Overview", url: "/", icon: Home, routeKey: "overview" }],
|
|
11
|
+
development: [
|
|
12
|
+
{ title: "Agents", url: "/agents", icon: Bot, routeKey: "agents" },
|
|
13
|
+
{
|
|
14
|
+
title: "Functions",
|
|
15
|
+
url: "/functions",
|
|
16
|
+
icon: Code,
|
|
17
|
+
routeKey: "functions"
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
title: "Workflows",
|
|
21
|
+
url: "/workflows",
|
|
22
|
+
icon: GitBranch,
|
|
23
|
+
routeKey: "workflows"
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
title: "Databases",
|
|
27
|
+
url: "/databases",
|
|
28
|
+
icon: Database,
|
|
29
|
+
routeKey: "databases"
|
|
30
|
+
}
|
|
31
|
+
],
|
|
32
|
+
dataModel: [
|
|
33
|
+
{ title: "Things", url: "/things", icon: Shapes, routeKey: "things" },
|
|
34
|
+
{ title: "Nouns", url: "/nouns", icon: BookOpen, routeKey: "nouns" },
|
|
35
|
+
{ title: "Verbs", url: "/verbs", icon: Zap, routeKey: "verbs" },
|
|
36
|
+
{ title: "Actions", url: "/actions", icon: Play, routeKey: "actions" },
|
|
37
|
+
{
|
|
38
|
+
title: "Relationships",
|
|
39
|
+
url: "/relationships",
|
|
40
|
+
icon: Network,
|
|
41
|
+
routeKey: "relationships"
|
|
42
|
+
},
|
|
43
|
+
{ title: "Events", url: "/events", icon: Activity, routeKey: "events" }
|
|
44
|
+
],
|
|
45
|
+
saas: [
|
|
46
|
+
{
|
|
47
|
+
title: "Customers",
|
|
48
|
+
url: "/customers",
|
|
49
|
+
icon: Users,
|
|
50
|
+
routeKey: "customers"
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
title: "Subscriptions",
|
|
54
|
+
url: "/subscriptions",
|
|
55
|
+
icon: CreditCard,
|
|
56
|
+
routeKey: "subscriptions"
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
title: "Integrations",
|
|
60
|
+
url: "/integrations",
|
|
61
|
+
icon: Plug,
|
|
62
|
+
routeKey: "integrations"
|
|
63
|
+
}
|
|
64
|
+
],
|
|
65
|
+
admin: [
|
|
66
|
+
{ title: "Organizations", url: "/orgs", icon: Building, routeKey: "orgs" },
|
|
67
|
+
{ title: "Roles", url: "/roles", icon: Shield, routeKey: "roles" },
|
|
68
|
+
{ title: "Users", url: "/users", icon: UserCog, routeKey: "users" },
|
|
69
|
+
{ title: "API Keys", url: "/api-keys", icon: Key, routeKey: "apiKeys" },
|
|
70
|
+
{
|
|
71
|
+
title: "Settings",
|
|
72
|
+
url: "/settings",
|
|
73
|
+
icon: Settings,
|
|
74
|
+
routeKey: "settings"
|
|
75
|
+
}
|
|
76
|
+
]
|
|
77
|
+
};
|
|
78
|
+
function DOShellNav({ headerContent, ...props }) {
|
|
79
|
+
const location = useWebLocation();
|
|
80
|
+
const { config } = useDOConfig();
|
|
81
|
+
const routesConfig = useDORoutes();
|
|
82
|
+
const branding = config.branding;
|
|
83
|
+
const pathname = location.pathname;
|
|
84
|
+
const isActive = (url) => {
|
|
85
|
+
if (url === "/") {
|
|
86
|
+
return pathname === "/" || pathname === "";
|
|
87
|
+
}
|
|
88
|
+
return pathname.startsWith(url);
|
|
89
|
+
};
|
|
90
|
+
const isRouteEnabled = (routeKey) => {
|
|
91
|
+
if (!routeKey) return true;
|
|
92
|
+
if (routesConfig[routeKey] === false) return false;
|
|
93
|
+
return true;
|
|
94
|
+
};
|
|
95
|
+
const filterNavItems = (items) => {
|
|
96
|
+
return items.filter((item) => isRouteEnabled(item.routeKey));
|
|
97
|
+
};
|
|
98
|
+
return /* @__PURE__ */ jsxs(Sidebar, { variant: "inset", ...props, children: [
|
|
99
|
+
/* @__PURE__ */ jsxs(SidebarHeader, { children: [
|
|
100
|
+
/* @__PURE__ */ jsx(SidebarMenu, { children: /* @__PURE__ */ jsx(SidebarMenuItem, { children: /* @__PURE__ */ jsx(SidebarMenuButton, { size: "lg", asChild: true, children: /* @__PURE__ */ jsxs(WebLink, { to: "/", children: [
|
|
101
|
+
/* @__PURE__ */ jsx("div", { className: "bg-sidebar-primary text-sidebar-primary-foreground flex aspect-square size-8 items-center justify-center rounded-(--radius)", children: branding?.logo ?? /* @__PURE__ */ jsx(Database, { className: "size-4" }) }),
|
|
102
|
+
/* @__PURE__ */ jsxs("div", { className: "grid flex-1 text-left text-sm leading-tight", children: [
|
|
103
|
+
/* @__PURE__ */ jsx("span", { className: "truncate font-medium", children: branding?.name ?? "DO Admin" }),
|
|
104
|
+
/* @__PURE__ */ jsx("span", { className: "truncate text-xs", children: "Dashboard" })
|
|
105
|
+
] })
|
|
106
|
+
] }) }) }) }),
|
|
107
|
+
headerContent
|
|
108
|
+
] }),
|
|
109
|
+
/* @__PURE__ */ jsxs(SidebarContent, { children: [
|
|
110
|
+
/* @__PURE__ */ jsx(SidebarGroup, { children: /* @__PURE__ */ jsx(SidebarMenu, { children: filterNavItems(navGroups.main).map((item) => /* @__PURE__ */ jsx(SidebarMenuItem, { children: /* @__PURE__ */ jsx(
|
|
111
|
+
SidebarMenuButton,
|
|
112
|
+
{
|
|
113
|
+
asChild: true,
|
|
114
|
+
isActive: isActive(item.url),
|
|
115
|
+
tooltip: item.title,
|
|
116
|
+
children: /* @__PURE__ */ jsxs(WebLink, { to: item.url, children: [
|
|
117
|
+
/* @__PURE__ */ jsx(item.icon, { className: "size-4" }),
|
|
118
|
+
/* @__PURE__ */ jsx("span", { children: item.title })
|
|
119
|
+
] })
|
|
120
|
+
}
|
|
121
|
+
) }, item.title)) }) }),
|
|
122
|
+
filterNavItems(navGroups.development).length > 0 && /* @__PURE__ */ jsxs(SidebarGroup, { children: [
|
|
123
|
+
/* @__PURE__ */ jsx(SidebarGroupLabel, { children: "Development" }),
|
|
124
|
+
/* @__PURE__ */ jsx(SidebarMenu, { children: filterNavItems(navGroups.development).map((item) => /* @__PURE__ */ jsx(SidebarMenuItem, { children: /* @__PURE__ */ jsx(
|
|
125
|
+
SidebarMenuButton,
|
|
126
|
+
{
|
|
127
|
+
asChild: true,
|
|
128
|
+
isActive: isActive(item.url),
|
|
129
|
+
tooltip: item.title,
|
|
130
|
+
children: /* @__PURE__ */ jsxs(WebLink, { to: item.url, children: [
|
|
131
|
+
/* @__PURE__ */ jsx(item.icon, { className: "size-4" }),
|
|
132
|
+
/* @__PURE__ */ jsx("span", { children: item.title })
|
|
133
|
+
] })
|
|
134
|
+
}
|
|
135
|
+
) }, item.title)) })
|
|
136
|
+
] }),
|
|
137
|
+
filterNavItems(navGroups.dataModel).length > 0 && /* @__PURE__ */ jsxs(SidebarGroup, { children: [
|
|
138
|
+
/* @__PURE__ */ jsx(SidebarGroupLabel, { children: "Data Model" }),
|
|
139
|
+
/* @__PURE__ */ jsx(SidebarMenu, { children: filterNavItems(navGroups.dataModel).map((item) => /* @__PURE__ */ jsx(SidebarMenuItem, { children: /* @__PURE__ */ jsx(
|
|
140
|
+
SidebarMenuButton,
|
|
141
|
+
{
|
|
142
|
+
asChild: true,
|
|
143
|
+
isActive: isActive(item.url),
|
|
144
|
+
tooltip: item.title,
|
|
145
|
+
children: /* @__PURE__ */ jsxs(WebLink, { to: item.url, children: [
|
|
146
|
+
/* @__PURE__ */ jsx(item.icon, { className: "size-4" }),
|
|
147
|
+
/* @__PURE__ */ jsx("span", { children: item.title })
|
|
148
|
+
] })
|
|
149
|
+
}
|
|
150
|
+
) }, item.title)) })
|
|
151
|
+
] }),
|
|
152
|
+
filterNavItems(navGroups.saas).length > 0 && /* @__PURE__ */ jsxs(SidebarGroup, { children: [
|
|
153
|
+
/* @__PURE__ */ jsx(SidebarGroupLabel, { children: "SaaS" }),
|
|
154
|
+
/* @__PURE__ */ jsx(SidebarMenu, { children: filterNavItems(navGroups.saas).map((item) => /* @__PURE__ */ jsx(SidebarMenuItem, { children: /* @__PURE__ */ jsx(
|
|
155
|
+
SidebarMenuButton,
|
|
156
|
+
{
|
|
157
|
+
asChild: true,
|
|
158
|
+
isActive: isActive(item.url),
|
|
159
|
+
tooltip: item.title,
|
|
160
|
+
children: /* @__PURE__ */ jsxs(WebLink, { to: item.url, children: [
|
|
161
|
+
/* @__PURE__ */ jsx(item.icon, { className: "size-4" }),
|
|
162
|
+
/* @__PURE__ */ jsx("span", { children: item.title })
|
|
163
|
+
] })
|
|
164
|
+
}
|
|
165
|
+
) }, item.title)) })
|
|
166
|
+
] }),
|
|
167
|
+
filterNavItems(navGroups.admin).length > 0 && /* @__PURE__ */ jsxs(SidebarGroup, { children: [
|
|
168
|
+
/* @__PURE__ */ jsx(SidebarGroupLabel, { children: "Admin" }),
|
|
169
|
+
/* @__PURE__ */ jsx(SidebarMenu, { children: filterNavItems(navGroups.admin).map((item) => /* @__PURE__ */ jsx(SidebarMenuItem, { children: /* @__PURE__ */ jsx(
|
|
170
|
+
SidebarMenuButton,
|
|
171
|
+
{
|
|
172
|
+
asChild: true,
|
|
173
|
+
isActive: isActive(item.url),
|
|
174
|
+
tooltip: item.title,
|
|
175
|
+
children: /* @__PURE__ */ jsxs(WebLink, { to: item.url, children: [
|
|
176
|
+
/* @__PURE__ */ jsx(item.icon, { className: "size-4" }),
|
|
177
|
+
/* @__PURE__ */ jsx("span", { children: item.title })
|
|
178
|
+
] })
|
|
179
|
+
}
|
|
180
|
+
) }, item.title)) })
|
|
181
|
+
] })
|
|
182
|
+
] }),
|
|
183
|
+
/* @__PURE__ */ jsx(SidebarFooter, { children: /* @__PURE__ */ jsx(SidebarMenu, { children: /* @__PURE__ */ jsx(SidebarMenuItem, { children: /* @__PURE__ */ jsx(UserMenu, {}) }) }) })
|
|
184
|
+
] });
|
|
185
|
+
}
|
|
186
|
+
function RouterLink({ href, children, className }) {
|
|
187
|
+
return /* @__PURE__ */ jsx(WebLink, { to: href, className, children });
|
|
188
|
+
}
|
|
189
|
+
function DOShell({
|
|
190
|
+
children,
|
|
191
|
+
sidebarHeaderContent,
|
|
192
|
+
headerContent,
|
|
193
|
+
breadcrumbs: breadcrumbsProp
|
|
194
|
+
}) {
|
|
195
|
+
const autoBreadcrumbs = useBreadcrumbs();
|
|
196
|
+
const breadcrumbs = breadcrumbsProp ?? autoBreadcrumbs;
|
|
197
|
+
return /* @__PURE__ */ jsx(AuthGate, { children: /* @__PURE__ */ jsxs(SidebarProvider, { className: "h-svh!", children: [
|
|
198
|
+
/* @__PURE__ */ jsx(DOShellNav, { headerContent: sidebarHeaderContent }),
|
|
199
|
+
/* @__PURE__ */ jsxs(SidebarInset, { className: "overflow-hidden", children: [
|
|
200
|
+
/* @__PURE__ */ jsxs("header", { className: "relative flex h-16 shrink-0 items-center gap-2 border-b bg-background transition-[width,height] ease-linear group-has-data-[collapsible=icon]/sidebar-wrapper:h-12", children: [
|
|
201
|
+
/* @__PURE__ */ jsxs("div", { className: "z-10 flex shrink-0 items-center gap-2 bg-background px-4", children: [
|
|
202
|
+
/* @__PURE__ */ jsx(SidebarTrigger, { className: "-ml-1" }),
|
|
203
|
+
/* @__PURE__ */ jsx(Separator, { orientation: "vertical", className: "mr-2 h-4" }),
|
|
204
|
+
breadcrumbs.length > 0 && /* @__PURE__ */ jsx(Breadcrumbs, { items: breadcrumbs, LinkComponent: RouterLink })
|
|
205
|
+
] }),
|
|
206
|
+
headerContent && /* @__PURE__ */ jsx("div", { className: "flex flex-1 items-center px-4 xl:absolute xl:inset-0 xl:justify-center", children: /* @__PURE__ */ jsx("div", { className: "w-full max-w-md", children: headerContent }) })
|
|
207
|
+
] }),
|
|
208
|
+
/* @__PURE__ */ jsx("main", { className: "flex-1 overflow-auto", children })
|
|
209
|
+
] }),
|
|
210
|
+
/* @__PURE__ */ jsx(Toaster, { closeButton: true, position: "top-right" })
|
|
211
|
+
] }) });
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
export { DOShell, DOShellNav };
|
|
215
|
+
//# sourceMappingURL=chunk-PJYGRD7N.js.map
|
|
216
|
+
//# sourceMappingURL=chunk-PJYGRD7N.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/features/shell/do-shell-nav.tsx","../src/features/shell/do-shell.tsx"],"names":["Link","jsx","jsxs"],"mappings":"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","file":"chunk-PJYGRD7N.js","sourcesContent":["\"use client\"\n\nimport { WebLink as Link, useWebLocation } from \"@mdxui/navigation/web\"\nimport {\n Sidebar,\n SidebarContent,\n SidebarFooter,\n SidebarGroup,\n SidebarGroupLabel,\n SidebarHeader,\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n} from \"@mdxui/primitives\"\nimport {\n Activity,\n // Additional icons for missing routes\n BookOpen,\n Bot,\n Building,\n Code,\n CreditCard,\n Database,\n GitBranch,\n Home,\n Key,\n Network,\n Play,\n Plug,\n Settings,\n Shapes,\n Shield,\n UserCog,\n Users,\n Zap,\n} from \"lucide-react\"\nimport type * as React from \"react\"\nimport { UserMenu } from \"../auth/user-menu\"\nimport { useDOConfig, useDORoutes } from \"./config-context\"\n\n/**\n * Navigation item definition\n */\ninterface NavItem {\n title: string\n url: string\n icon: React.ComponentType<{ className?: string }>\n routeKey?: string // Key in routes config for enable/disable\n}\n\n/**\n * Navigation structure for the DO Shell.\n * Organized into logical groups.\n */\nconst navGroups: Record<string, NavItem[]> = {\n main: [{ title: \"Overview\", url: \"/\", icon: Home, routeKey: \"overview\" }],\n development: [\n { title: \"Agents\", url: \"/agents\", icon: Bot, routeKey: \"agents\" },\n {\n title: \"Functions\",\n url: \"/functions\",\n icon: Code,\n routeKey: \"functions\",\n },\n {\n title: \"Workflows\",\n url: \"/workflows\",\n icon: GitBranch,\n routeKey: \"workflows\",\n },\n {\n title: \"Databases\",\n url: \"/databases\",\n icon: Database,\n routeKey: \"databases\",\n },\n ],\n dataModel: [\n { title: \"Things\", url: \"/things\", icon: Shapes, routeKey: \"things\" },\n { title: \"Nouns\", url: \"/nouns\", icon: BookOpen, routeKey: \"nouns\" },\n { title: \"Verbs\", url: \"/verbs\", icon: Zap, routeKey: \"verbs\" },\n { title: \"Actions\", url: \"/actions\", icon: Play, routeKey: \"actions\" },\n {\n title: \"Relationships\",\n url: \"/relationships\",\n icon: Network,\n routeKey: \"relationships\",\n },\n { title: \"Events\", url: \"/events\", icon: Activity, routeKey: \"events\" },\n ],\n saas: [\n {\n title: \"Customers\",\n url: \"/customers\",\n icon: Users,\n routeKey: \"customers\",\n },\n {\n title: \"Subscriptions\",\n url: \"/subscriptions\",\n icon: CreditCard,\n routeKey: \"subscriptions\",\n },\n {\n title: \"Integrations\",\n url: \"/integrations\",\n icon: Plug,\n routeKey: \"integrations\",\n },\n ],\n admin: [\n { title: \"Organizations\", url: \"/orgs\", icon: Building, routeKey: \"orgs\" },\n { title: \"Roles\", url: \"/roles\", icon: Shield, routeKey: \"roles\" },\n { title: \"Users\", url: \"/users\", icon: UserCog, routeKey: \"users\" },\n { title: \"API Keys\", url: \"/api-keys\", icon: Key, routeKey: \"apiKeys\" },\n {\n title: \"Settings\",\n url: \"/settings\",\n icon: Settings,\n routeKey: \"settings\",\n },\n ],\n}\n\nexport interface DOShellNavProps extends React.ComponentProps<typeof Sidebar> {\n /** Optional header content to display at the top of the sidebar */\n headerContent?: React.ReactNode\n}\n\n/**\n * DOShellNav - Sidebar navigation component for the DO Shell.\n *\n * Features:\n * - Highlights active route based on current location\n * - Uses lucide-react icons for each navigation item\n * - Collapsible on mobile via the Sidebar component\n * - Supports custom header content\n * - Routes can be enabled/disabled via config\n */\nexport function DOShellNav({ headerContent, ...props }: DOShellNavProps) {\n const location = useWebLocation()\n const { config } = useDOConfig()\n const routesConfig = useDORoutes()\n\n const branding = config.branding\n const pathname = location.pathname\n\n /**\n * Determines if a navigation item is active based on the current route.\n * For the overview page, requires exact match. For other pages, uses prefix matching.\n */\n const isActive = (url: string): boolean => {\n if (url === \"/\") {\n return pathname === \"/\" || pathname === \"\"\n }\n return pathname.startsWith(url)\n }\n\n /**\n * Check if a route is enabled\n */\n const isRouteEnabled = (routeKey: string | undefined): boolean => {\n if (!routeKey) return true\n // If explicitly set to false, hide it\n if (routesConfig[routeKey] === false) return false\n return true\n }\n\n /**\n * Filter nav items by enabled routes\n */\n const filterNavItems = (items: NavItem[]): NavItem[] => {\n return items.filter((item) => isRouteEnabled(item.routeKey))\n }\n\n return (\n <Sidebar variant=\"inset\" {...props}>\n <SidebarHeader>\n <SidebarMenu>\n <SidebarMenuItem>\n <SidebarMenuButton size=\"lg\" asChild>\n <Link to=\"/\">\n <div className=\"bg-sidebar-primary text-sidebar-primary-foreground flex aspect-square size-8 items-center justify-center rounded-(--radius)\">\n {branding?.logo ?? <Database className=\"size-4\" />}\n </div>\n <div className=\"grid flex-1 text-left text-sm leading-tight\">\n <span className=\"truncate font-medium\">\n {branding?.name ?? \"DO Admin\"}\n </span>\n <span className=\"truncate text-xs\">Dashboard</span>\n </div>\n </Link>\n </SidebarMenuButton>\n </SidebarMenuItem>\n </SidebarMenu>\n {headerContent}\n </SidebarHeader>\n\n <SidebarContent>\n {/* Main navigation - no label */}\n <SidebarGroup>\n <SidebarMenu>\n {filterNavItems(navGroups.main).map((item) => (\n <SidebarMenuItem key={item.title}>\n <SidebarMenuButton\n asChild\n isActive={isActive(item.url)}\n tooltip={item.title}\n >\n <Link to={item.url}>\n <item.icon className=\"size-4\" />\n <span>{item.title}</span>\n </Link>\n </SidebarMenuButton>\n </SidebarMenuItem>\n ))}\n </SidebarMenu>\n </SidebarGroup>\n\n {/* Development group */}\n {filterNavItems(navGroups.development).length > 0 && (\n <SidebarGroup>\n <SidebarGroupLabel>Development</SidebarGroupLabel>\n <SidebarMenu>\n {filterNavItems(navGroups.development).map((item) => (\n <SidebarMenuItem key={item.title}>\n <SidebarMenuButton\n asChild\n isActive={isActive(item.url)}\n tooltip={item.title}\n >\n <Link to={item.url}>\n <item.icon className=\"size-4\" />\n <span>{item.title}</span>\n </Link>\n </SidebarMenuButton>\n </SidebarMenuItem>\n ))}\n </SidebarMenu>\n </SidebarGroup>\n )}\n\n {/* Data Model group */}\n {filterNavItems(navGroups.dataModel).length > 0 && (\n <SidebarGroup>\n <SidebarGroupLabel>Data Model</SidebarGroupLabel>\n <SidebarMenu>\n {filterNavItems(navGroups.dataModel).map((item) => (\n <SidebarMenuItem key={item.title}>\n <SidebarMenuButton\n asChild\n isActive={isActive(item.url)}\n tooltip={item.title}\n >\n <Link to={item.url}>\n <item.icon className=\"size-4\" />\n <span>{item.title}</span>\n </Link>\n </SidebarMenuButton>\n </SidebarMenuItem>\n ))}\n </SidebarMenu>\n </SidebarGroup>\n )}\n\n {/* SaaS group */}\n {filterNavItems(navGroups.saas).length > 0 && (\n <SidebarGroup>\n <SidebarGroupLabel>SaaS</SidebarGroupLabel>\n <SidebarMenu>\n {filterNavItems(navGroups.saas).map((item) => (\n <SidebarMenuItem key={item.title}>\n <SidebarMenuButton\n asChild\n isActive={isActive(item.url)}\n tooltip={item.title}\n >\n <Link to={item.url}>\n <item.icon className=\"size-4\" />\n <span>{item.title}</span>\n </Link>\n </SidebarMenuButton>\n </SidebarMenuItem>\n ))}\n </SidebarMenu>\n </SidebarGroup>\n )}\n\n {/* Admin group */}\n {filterNavItems(navGroups.admin).length > 0 && (\n <SidebarGroup>\n <SidebarGroupLabel>Admin</SidebarGroupLabel>\n <SidebarMenu>\n {filterNavItems(navGroups.admin).map((item) => (\n <SidebarMenuItem key={item.title}>\n <SidebarMenuButton\n asChild\n isActive={isActive(item.url)}\n tooltip={item.title}\n >\n <Link to={item.url}>\n <item.icon className=\"size-4\" />\n <span>{item.title}</span>\n </Link>\n </SidebarMenuButton>\n </SidebarMenuItem>\n ))}\n </SidebarMenu>\n </SidebarGroup>\n )}\n </SidebarContent>\n\n <SidebarFooter>\n <SidebarMenu>\n <SidebarMenuItem>\n <UserMenu />\n </SidebarMenuItem>\n </SidebarMenu>\n </SidebarFooter>\n </Sidebar>\n )\n}\n","\"use client\"\n\nimport { WebLink as Link } from \"@mdxui/navigation/web\"\nimport {\n Separator,\n SidebarInset,\n SidebarProvider,\n SidebarTrigger,\n Toaster,\n} from \"@mdxui/primitives\"\nimport type * as React from \"react\"\nimport {\n type BreadcrumbItemConfig,\n type BreadcrumbLinkProps,\n Breadcrumbs,\n} from \"../../components/breadcrumbs\"\nimport { useBreadcrumbs } from \"../../hooks/use-breadcrumbs\"\nimport { AuthGate } from \"../auth/auth-gate\"\nimport { DOShellNav } from \"./do-shell-nav\"\n\n/**\n * TanStack Router Link adapter for Breadcrumbs\n */\nfunction RouterLink({ href, children, className }: BreadcrumbLinkProps) {\n return (\n <Link to={href} className={className}>\n {children}\n </Link>\n )\n}\n\nexport interface DOShellProps {\n /** Children to render in the main content area (typically TanStack Router Outlet) */\n children: React.ReactNode\n /** Optional header content for the sidebar */\n sidebarHeaderContent?: React.ReactNode\n /** Optional content to render in the header after breadcrumbs */\n headerContent?: React.ReactNode\n /**\n * Breadcrumb items to display.\n * If not provided, auto-generates from current route.\n * Pass empty array to disable breadcrumbs.\n */\n breadcrumbs?: BreadcrumbItemConfig[]\n}\n\n/**\n * DOShell - Main layout wrapper for the DO Admin Dashboard.\n *\n * This layout provides:\n * - Authentication gate (shows landing page if not authenticated)\n * - A collapsible sidebar with navigation on the left\n * - A main content area with a header containing breadcrumbs\n * - Toast notifications via Sonner\n * - Responsive design that works on mobile and desktop\n *\n * Uses TanStack Router for navigation.\n *\n * @example\n * ```tsx\n * <DOShell headerContent={<SearchBar />}>\n * <Outlet />\n * </DOShell>\n * ```\n */\nexport function DOShell({\n children,\n sidebarHeaderContent,\n headerContent,\n breadcrumbs: breadcrumbsProp,\n}: DOShellProps) {\n // Auto-generate breadcrumbs from route if not provided\n const autoBreadcrumbs = useBreadcrumbs()\n const breadcrumbs = breadcrumbsProp ?? autoBreadcrumbs\n\n return (\n <AuthGate>\n <SidebarProvider className=\"h-svh!\">\n <DOShellNav headerContent={sidebarHeaderContent} />\n <SidebarInset className=\"overflow-hidden\">\n <header className=\"relative flex h-16 shrink-0 items-center gap-2 border-b bg-background transition-[width,height] ease-linear group-has-data-[collapsible=icon]/sidebar-wrapper:h-12\">\n <div className=\"z-10 flex shrink-0 items-center gap-2 bg-background px-4\">\n <SidebarTrigger className=\"-ml-1\" />\n <Separator orientation=\"vertical\" className=\"mr-2 h-4\" />\n {breadcrumbs.length > 0 && (\n <Breadcrumbs items={breadcrumbs} LinkComponent={RouterLink} />\n )}\n </div>\n {headerContent && (\n <div className=\"flex flex-1 items-center px-4 xl:absolute xl:inset-0 xl:justify-center\">\n <div className=\"w-full max-w-md\">{headerContent}</div>\n </div>\n )}\n </header>\n <main className=\"flex-1 overflow-auto\">{children}</main>\n </SidebarInset>\n <Toaster closeButton position=\"top-right\" />\n </SidebarProvider>\n </AuthGate>\n )\n}\n"]}
|