jamdesk 1.1.0 → 1.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/deps.d.ts.map +1 -1
- package/dist/lib/deps.js +1 -0
- package/dist/lib/deps.js.map +1 -1
- package/dist/lib/docs-config.d.ts.map +1 -1
- package/dist/lib/docs-config.js +5 -1
- package/dist/lib/docs-config.js.map +1 -1
- package/package.json +2 -1
- package/vendored/app/api/og/route.tsx +5 -1
- package/vendored/app/layout.tsx +5 -0
- package/vendored/components/AIActionsMenu.tsx +2 -10
- package/vendored/components/chat/ChatPanel.tsx +4 -4
- package/vendored/components/layout/LayoutWrapper.tsx +1 -1
- package/vendored/components/mdx/ApiEndpoint.tsx +8 -8
- package/vendored/components/mdx/MDXComponents.tsx +8 -8
- package/vendored/components/mdx/OpenApiEndpoint.tsx +8 -8
- package/vendored/components/mdx/Tabs.tsx +2 -2
- package/vendored/components/mdx/View.tsx +2 -12
- package/vendored/components/navigation/Header.tsx +9 -19
- package/vendored/components/navigation/LanguageSelector.tsx +2 -12
- package/vendored/components/navigation/TableOfContents.tsx +2 -2
- package/vendored/components/snippets/generated/CodeLink.tsx +25 -0
- package/vendored/components/snippets/generated/HeaderAPI.tsx +44 -0
- package/vendored/components/snippets/generated/PlansAvailable.tsx +53 -0
- package/vendored/components/snippets/generated/SnippetIntro.tsx +43 -0
- package/vendored/components/ui/CodePanel.tsx +2 -2
- package/vendored/hooks/useOnClickOutside.ts +28 -0
- package/vendored/lib/validate-config.ts +7 -1
- package/vendored/themes/jam/variables.css +11 -9
- package/vendored/themes/nebula/variables.css +10 -3
- package/vendored/themes/pulsar/variables.css +4 -8
package/dist/lib/deps.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deps.d.ts","sourceRoot":"","sources":["../../src/lib/deps.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;
|
|
1
|
+
{"version":3,"file":"deps.d.ts","sourceRoot":"","sources":["../../src/lib/deps.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AA0GH,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAqF1E;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAExC"}
|
package/dist/lib/deps.js
CHANGED
package/dist/lib/deps.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deps.js","sourceRoot":"","sources":["../../src/lib/deps.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"deps.js","sourceRoot":"","sources":["../../src/lib/deps.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"docs-config.d.ts","sourceRoot":"","sources":["../../src/lib/docs-config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"docs-config.d.ts","sourceRoot":"","sources":["../../src/lib/docs-config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,KAAK,CAAC;AAkBvC,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,QAAQ,CAAC;IACpC,UAAU,EAAE,gBAAgB,CAAC;IAC7B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC7B,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC;IACjB,MAAM,CAAC,EAAE,eAAe,EAAE,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC;IACtB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,eAAe,EAAE,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,CAAC,MAAM,GAAG,eAAe,CAAC,EAAE,CAAC;IACrC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,KAAK,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAKtC;;GAEG;AACH,wBAAsB,SAAS,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAgCxD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,CAQvD;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAwCvF;AA8ED;;GAEG;AACH,wBAAsB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA0FlF;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAGnF;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,EAAE,CA4B5D"}
|
package/dist/lib/docs-config.js
CHANGED
|
@@ -4,6 +4,9 @@
|
|
|
4
4
|
* Validates and loads docs.json configuration.
|
|
5
5
|
* Supports JSON5 format for comments and trailing commas.
|
|
6
6
|
*/
|
|
7
|
+
import addFormatsModule from 'ajv-formats';
|
|
8
|
+
// ESM compatibility - ajv-formats exports differently under NodeNext resolution
|
|
9
|
+
const addFormats = addFormatsModule.default || addFormatsModule;
|
|
7
10
|
import JSON5 from 'json5';
|
|
8
11
|
import fs from 'fs';
|
|
9
12
|
import path from 'path';
|
|
@@ -232,7 +235,8 @@ export async function validateConfig(configPath) {
|
|
|
232
235
|
try {
|
|
233
236
|
const schema = await getSchema();
|
|
234
237
|
if (schema) {
|
|
235
|
-
const ajv = new Ajv({ allErrors: true, strict: false, logger: false });
|
|
238
|
+
const ajv = new Ajv({ allErrors: true, strict: false, logger: false, validateFormats: false });
|
|
239
|
+
addFormats(ajv);
|
|
236
240
|
const validate = ajv.compile(schema);
|
|
237
241
|
const valid = validate(config);
|
|
238
242
|
if (!valid) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"docs-config.js","sourceRoot":"","sources":["../../src/lib/docs-config.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"docs-config.js","sourceRoot":"","sources":["../../src/lib/docs-config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,gBAAgB,MAAM,aAAa,CAAC;AAC3C,gFAAgF;AAChF,MAAM,UAAU,GAAI,gBAAwB,CAAC,OAAO,IAAI,gBAAgB,CAAC;AACzE,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAEvC,4EAA4E;AAC5E,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,OAAO,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC;AAErD,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AA4C3C,mBAAmB;AACnB,IAAI,YAAY,GAAkB,IAAI,CAAC;AAEvC;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS;IAC7B,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,oDAAoD;IACpD,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,wCAAwC,CAAC,CAAC;IACzF,IAAI,EAAE,CAAC,UAAU,CAAC,iBAAiB,CAAC,EAAE,CAAC;QACrC,MAAM,aAAa,GAAG,EAAE,CAAC,YAAY,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;QAClE,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAW,CAAC;QACnD,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,qCAAqC;IACrC,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,CAAC;QAE3D,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,mCAAmC,EAAE;YAChE,MAAM,EAAE,UAAU,CAAC,MAAM;SAC1B,CAAC,CAAC;QACH,YAAY,CAAC,OAAO,CAAC,CAAC;QAEtB,IAAI,QAAQ,CAAC,EAAE,EAAE,CAAC;YAChB,YAAY,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAY,CAAC;YAC/C,OAAO,YAAY,CAAC;QACtB,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,gDAAgD;IAClD,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,OAAe;IACzC,IAAI,CAAC;QACH,uDAAuD;QACvD,OAAO,KAAK,CAAC,KAAK,CAAC,OAAO,CAAe,CAAC;IAC5C,CAAC;IAAC,MAAM,CAAC;QACP,4BAA4B;QAC5B,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAe,CAAC;IAC3C,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAAwC;IAC7E,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACnC,OAAO,0BAA0B,CAAC;IACpC,CAAC;IAED,+DAA+D;IAC/D,iGAAiG;IACjG,MAAM,cAAc,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAEhD,MAAM,SAAS,GAAG,EAAE,CAAC;IACrB,MAAM,QAAQ,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;QAC5D,MAAM,IAAI,GAAG,GAAG,CAAC,YAAY,IAAI,GAAG,CAAC;QAErC,QAAQ,GAAG,CAAC,OAAO,EAAE,CAAC;YACpB,KAAK,UAAU;gBACb,OAAO,+BAAgC,GAAG,CAAC,MAAuC,CAAC,eAAe,QAAQ,IAAI,EAAE,CAAC;YACnH,KAAK,MAAM;gBACT,OAAO,uBAAuB,IAAI,cAAe,GAAG,CAAC,MAA4B,CAAC,IAAI,EAAE,CAAC;YAC3F,KAAK,MAAM;gBACT,OAAO,wBAAwB,IAAI,oBAAqB,GAAG,CAAC,MAAuC,CAAC,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAClI,KAAK,OAAO;gBACV,OAAO,wBAAwB,IAAI,cAAe,GAAG,CAAC,MAAoC,CAAC,YAAY,GAAG,CAAC;YAC7G,KAAK,sBAAsB;gBACzB,OAAO,yBAA0B,GAAG,CAAC,MAA0C,CAAC,kBAAkB,QAAQ,IAAI,EAAE,CAAC;YACnH,KAAK,WAAW;gBACd,OAAO,gBAAgB,IAAI,oBAAoB,CAAC;YAClD,KAAK,SAAS;gBACZ,OAAO,yBAAyB,IAAI,EAAE,CAAC;YACzC,KAAK,OAAO;gBACV,OAAO,wBAAwB,IAAI,qCAAqC,CAAC;YAC3E;gBACE,OAAO,OAAO,GAAG,CAAC,OAAO,OAAO,IAAI,EAAE,CAAC;QAC3C,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,IAAI,cAAc,CAAC,MAAM,GAAG,SAAS,EAAE,CAAC;QACtC,QAAQ,CAAC,IAAI,CAAC,YAAY,cAAc,CAAC,MAAM,GAAG,SAAS,gBAAgB,CAAC,CAAC;IAC/E,CAAC;IAED,OAAO,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACpC,CAAC;AAED;;;;;GAKG;AACH,SAAS,gBAAgB,CAAC,MAAqB;IAC7C,sEAAsE;IACtE,yCAAyC;IACzC,MAAM,YAAY,GAAG,IAAI,GAAG,EAAyB,CAAC;IACtD,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;QACtD,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACxB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC9B,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YAC/B,CAAC;YACD,YAAY,CAAC,GAAG,CAAC,MAAM,CAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IAED,uEAAuE;IACvE,IAAI,cAAc,GAAkB,IAAI,CAAC;IACzC,KAAK,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,YAAY,EAAE,CAAC;QAC1C,MAAM,kBAAkB,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CACvC,CAAC,CAAC,OAAO,KAAK,OAAO,IAAI,CAAC,CAAC,YAAY,KAAK,QAAQ,CACrD,CAAC;QACF,IAAI,CAAC,kBAAkB,EAAE,CAAC;YACxB,cAAc,GAAG,MAAM,CAAC;YACxB,MAAM;QACR,CAAC;IACH,CAAC;IAED,sDAAsD;IACtD,kEAAkE;IAClE,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;QACnC,wEAAwE;QACxE,IAAI,GAAG,CAAC,OAAO,KAAK,OAAO,IAAI,GAAG,CAAC,YAAY,KAAK,QAAQ,EAAE,CAAC;YAC7D,OAAO,KAAK,CAAC;QACf,CAAC;QAED,+EAA+E;QAC/E,IAAI,GAAG,CAAC,OAAO,KAAK,OAAO,EAAE,CAAC;YAC5B,OAAO,KAAK,CAAC;QACf,CAAC;QAED,wEAAwE;QACxE,wCAAwC;QACxC,IAAI,cAAc,KAAK,IAAI,EAAE,CAAC;YAC5B,MAAM,KAAK,GAAG,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;YACtD,IAAI,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,cAAc,EAAE,CAAC;gBACzC,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;IAEH,OAAO,iBAAiB,CAAC,QAAQ,CAAC,CAAC;AACrC,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CAAC,MAAqB;IAC9C,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,OAAO,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;QACzB,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC,YAAY,IAAI,GAAG,CAAC,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QAC/E,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAClB,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACd,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,UAAkB;IACrD,oBAAoB;IACpB,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,KAAK,EAAE,kEAAkE;SAC1E,CAAC;IACJ,CAAC;IAED,sBAAsB;IACtB,IAAI,MAAkB,CAAC;IACvB,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACrD,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IAChC,CAAC;IAAC,OAAO,QAAQ,EAAE,CAAC;QAClB,MAAM,KAAK,GAAG,QAAiB,CAAC;QAChC,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,KAAK,EAAE,8BAA8B,KAAK,CAAC,OAAO,EAAE;SACrD,CAAC;IACJ,CAAC;IAED,mBAAmB;IACnB,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QACjB,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,KAAK,EAAE,4CAA4C;SACpD,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;QACvB,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,KAAK,EAAE,kDAAkD;SAC1D,CAAC;IACJ,CAAC;IAED,6BAA6B;IAC7B,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;QACrC,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,KAAK,EAAE,oKAAoK;SAC5K,CAAC;IACJ,CAAC;IAED,kCAAkC;IAClC,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC;IAC9B,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,KAAK;QACnD,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,SAAS,CAAC;IACjF,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,KAAK,EAAE,qEAAqE;SAC7E,CAAC;IACJ,CAAC;IAED,iBAAiB;IACjB,MAAM,WAAW,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAChD,IAAI,MAAM,CAAC,KAAK,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QACxD,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,KAAK,EAAE,UAAU,MAAM,CAAC,KAAK,8BAA8B,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;SACpF,CAAC;IACJ,CAAC;IAED,iCAAiC;IACjC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC;QACjC,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,CAAC,CAAC;YAC/F,UAAU,CAAC,GAAG,CAAC,CAAC;YAChB,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACrC,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;YAE/B,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,MAAM,YAAY,GAAG,sBAAsB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;gBAC7D,OAAO;oBACL,KAAK,EAAE,KAAK;oBACZ,KAAK,EAAE,YAAY;iBACpB,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,mCAAmC;IACrC,CAAC;IAED,OAAO;QACL,KAAK,EAAE,IAAI;QACX,MAAM;KACP,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,UAAkB;IACrD,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,UAAU,CAAC,CAAC;IAChD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACvD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,MAAkB;IAChD,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,SAAS,YAAY,CAAC,KAAc;QAClC,IAAI,CAAC,KAAK;YAAE,OAAO;QAEnB,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;oBAC7B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACnB,CAAC;qBAAM,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;oBACrD,MAAM,GAAG,GAAG,IAA+B,CAAC;oBAC5C,IAAI,GAAG,CAAC,KAAK;wBAAE,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;oBACvC,IAAI,GAAG,CAAC,MAAM;wBAAE,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;gBAC3C,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC;IAC9B,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC1B,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACvB,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACzB,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACxB,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC3B,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAE5B,OAAO,KAAK,CAAC;AACf,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "jamdesk",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.2",
|
|
4
4
|
"description": "CLI for Jamdesk — build, preview, and deploy documentation sites from MDX. Dev server with hot reload, 50+ components, OpenAPI support, AI search, and Mintlify migration",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"jamdesk",
|
|
@@ -94,6 +94,7 @@
|
|
|
94
94
|
"@apidevtools/swagger-parser": "^12.1.0",
|
|
95
95
|
"@inquirer/prompts": "^8.3.0",
|
|
96
96
|
"ajv": "^8.17.1",
|
|
97
|
+
"ajv-formats": "^3.0.1",
|
|
97
98
|
"chalk": "^5.3.0",
|
|
98
99
|
"commander": "^14.0.3",
|
|
99
100
|
"fastest-levenshtein": "^1.0.16",
|
|
@@ -49,8 +49,10 @@ export async function GET(request: NextRequest) {
|
|
|
49
49
|
// (Satori doesn't support webp and can fail on remote URLs)
|
|
50
50
|
let logo = '';
|
|
51
51
|
if (logoUrl) {
|
|
52
|
+
const controller = new AbortController();
|
|
53
|
+
const timeout = setTimeout(() => controller.abort(), 3000);
|
|
52
54
|
try {
|
|
53
|
-
const res = await fetch(logoUrl);
|
|
55
|
+
const res = await fetch(logoUrl, { signal: controller.signal });
|
|
54
56
|
if (res.ok) {
|
|
55
57
|
const contentType = res.headers.get('content-type') || 'image/png';
|
|
56
58
|
const buf = await res.arrayBuffer();
|
|
@@ -58,6 +60,8 @@ export async function GET(request: NextRequest) {
|
|
|
58
60
|
}
|
|
59
61
|
} catch {
|
|
60
62
|
// Skip logo on fetch failure
|
|
63
|
+
} finally {
|
|
64
|
+
clearTimeout(timeout);
|
|
61
65
|
}
|
|
62
66
|
}
|
|
63
67
|
|
package/vendored/app/layout.tsx
CHANGED
|
@@ -144,6 +144,7 @@ function generatePrimaryColorVariables(
|
|
|
144
144
|
--color-primary-dark: ${validDark || primaryColor.trim()};
|
|
145
145
|
--color-accent: ${primaryColor.trim()};
|
|
146
146
|
--color-accent-hover: ${validDark || primaryColor.trim()};
|
|
147
|
+
--color-accent-text: color-mix(in srgb, ${primaryColor.trim()} 85%, black);
|
|
147
148
|
}
|
|
148
149
|
|
|
149
150
|
.dark {
|
|
@@ -151,6 +152,7 @@ function generatePrimaryColorVariables(
|
|
|
151
152
|
--color-primary-dark: ${primaryColor.trim()};
|
|
152
153
|
--color-accent: ${darkModeColor};
|
|
153
154
|
--color-accent-hover: ${validLight || darkModeColor};
|
|
155
|
+
--color-accent-text: color-mix(in srgb, ${darkModeColor} 85%, white);
|
|
154
156
|
}`;
|
|
155
157
|
}
|
|
156
158
|
|
|
@@ -366,6 +368,9 @@ export default async function RootLayout({
|
|
|
366
368
|
href="/_jd/fonts/fontawesome/css/all.min.css"
|
|
367
369
|
as="style"
|
|
368
370
|
/>
|
|
371
|
+
{/* Preload FA font files to avoid waterfall: CSS → font discovery → download */}
|
|
372
|
+
<link rel="preload" href="/_jd/fonts/fontawesome/webfonts/fa-light-300.woff2" as="font" type="font/woff2" crossOrigin="anonymous" />
|
|
373
|
+
<link rel="preload" href="/_jd/fonts/fontawesome/webfonts/fa-brands-400.woff2" as="font" type="font/woff2" crossOrigin="anonymous" />
|
|
369
374
|
<script
|
|
370
375
|
dangerouslySetInnerHTML={{ __html:
|
|
371
376
|
"var l=document.createElement('link');l.rel='stylesheet';" +
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
|
|
3
3
|
import { useState, useEffect, useRef, useCallback, useMemo } from 'react';
|
|
4
|
+
import { useOnClickOutside } from '@/hooks/useOnClickOutside';
|
|
4
5
|
import { usePathname } from 'next/navigation';
|
|
5
6
|
import { useLinkPrefix } from '@/lib/link-prefix-context';
|
|
6
7
|
import { getIconClass } from '@/lib/icon-utils';
|
|
@@ -317,16 +318,7 @@ export function AIActionsMenu({ options, projectName }: AIActionsMenuProps) {
|
|
|
317
318
|
}, []);
|
|
318
319
|
|
|
319
320
|
// Close on click outside
|
|
320
|
-
|
|
321
|
-
if (!isOpen) return;
|
|
322
|
-
function handleMouseDown(e: MouseEvent) {
|
|
323
|
-
if (menuRef.current && !menuRef.current.contains(e.target as Node)) {
|
|
324
|
-
setIsOpen(false);
|
|
325
|
-
}
|
|
326
|
-
}
|
|
327
|
-
document.addEventListener('mousedown', handleMouseDown);
|
|
328
|
-
return () => document.removeEventListener('mousedown', handleMouseDown);
|
|
329
|
-
}, [isOpen]);
|
|
321
|
+
useOnClickOutside(menuRef, () => setIsOpen(false), isOpen);
|
|
330
322
|
|
|
331
323
|
// Close on Escape
|
|
332
324
|
useEffect(() => {
|
|
@@ -76,9 +76,9 @@ export function ChatPanel({ isOpen, onClose, starterQuestions, chatEndpoint, mod
|
|
|
76
76
|
}
|
|
77
77
|
};
|
|
78
78
|
|
|
79
|
-
vv.addEventListener('resize', update);
|
|
80
|
-
vv.addEventListener('scroll', update);
|
|
81
|
-
window.addEventListener('scroll', update);
|
|
79
|
+
vv.addEventListener('resize', update, { passive: true });
|
|
80
|
+
vv.addEventListener('scroll', update, { passive: true });
|
|
81
|
+
window.addEventListener('scroll', update, { passive: true });
|
|
82
82
|
|
|
83
83
|
return () => {
|
|
84
84
|
vv.removeEventListener('resize', update);
|
|
@@ -231,7 +231,7 @@ export function ChatPanel({ isOpen, onClose, starterQuestions, chatEndpoint, mod
|
|
|
231
231
|
ref={overlayPanelRef}
|
|
232
232
|
role="dialog"
|
|
233
233
|
aria-label="AI Chat"
|
|
234
|
-
|
|
234
|
+
inert={!isOpen ? true : undefined}
|
|
235
235
|
aria-modal={isOpen || undefined}
|
|
236
236
|
data-open={isOpen}
|
|
237
237
|
data-chat-panel
|
|
@@ -64,7 +64,7 @@ export function LayoutWrapper({ config, children }: LayoutWrapperProps) {
|
|
|
64
64
|
}
|
|
65
65
|
};
|
|
66
66
|
|
|
67
|
-
scrollTarget.addEventListener('scroll', handleScroll);
|
|
67
|
+
scrollTarget.addEventListener('scroll', handleScroll, { passive: true });
|
|
68
68
|
handleScroll(); // Check initial position
|
|
69
69
|
|
|
70
70
|
return () => scrollTarget.removeEventListener('scroll', handleScroll);
|
|
@@ -11,42 +11,42 @@ interface ApiEndpointProps {
|
|
|
11
11
|
const methodColors: Record<string, { bg: string; text: string; border: string }> = {
|
|
12
12
|
GET: {
|
|
13
13
|
bg: 'bg-emerald-500/10',
|
|
14
|
-
text: 'text-emerald-
|
|
14
|
+
text: 'text-emerald-700 dark:text-emerald-400',
|
|
15
15
|
border: 'border-emerald-500/20',
|
|
16
16
|
},
|
|
17
17
|
POST: {
|
|
18
18
|
bg: 'bg-blue-500/10',
|
|
19
|
-
text: 'text-blue-
|
|
19
|
+
text: 'text-blue-600 dark:text-blue-400',
|
|
20
20
|
border: 'border-blue-500/20',
|
|
21
21
|
},
|
|
22
22
|
PUT: {
|
|
23
23
|
bg: 'bg-amber-500/10',
|
|
24
|
-
text: 'text-amber-
|
|
24
|
+
text: 'text-amber-700 dark:text-amber-400',
|
|
25
25
|
border: 'border-amber-500/20',
|
|
26
26
|
},
|
|
27
27
|
PATCH: {
|
|
28
28
|
bg: 'bg-orange-500/10',
|
|
29
|
-
text: 'text-orange-
|
|
29
|
+
text: 'text-orange-700 dark:text-orange-400',
|
|
30
30
|
border: 'border-orange-500/20',
|
|
31
31
|
},
|
|
32
32
|
DELETE: {
|
|
33
33
|
bg: 'bg-red-500/10',
|
|
34
|
-
text: 'text-red-
|
|
34
|
+
text: 'text-red-700 dark:text-red-400',
|
|
35
35
|
border: 'border-red-500/20',
|
|
36
36
|
},
|
|
37
37
|
HEAD: {
|
|
38
38
|
bg: 'bg-purple-500/10',
|
|
39
|
-
text: 'text-purple-
|
|
39
|
+
text: 'text-purple-600 dark:text-purple-400',
|
|
40
40
|
border: 'border-purple-500/20',
|
|
41
41
|
},
|
|
42
42
|
OPTIONS: {
|
|
43
43
|
bg: 'bg-gray-500/10',
|
|
44
|
-
text: 'text-gray-
|
|
44
|
+
text: 'text-gray-600 dark:text-gray-400',
|
|
45
45
|
border: 'border-gray-500/20',
|
|
46
46
|
},
|
|
47
47
|
TRACE: {
|
|
48
48
|
bg: 'bg-gray-500/10',
|
|
49
|
-
text: 'text-gray-
|
|
49
|
+
text: 'text-gray-600 dark:text-gray-400',
|
|
50
50
|
border: 'border-gray-500/20',
|
|
51
51
|
},
|
|
52
52
|
};
|
|
@@ -100,14 +100,14 @@ function parseHttpRequest(text: string): { method: string; url: string } | null
|
|
|
100
100
|
* HTTP method colors for badges
|
|
101
101
|
*/
|
|
102
102
|
const httpMethodColors: Record<string, { bg: string; text: string }> = {
|
|
103
|
-
GET: { bg: 'bg-emerald-500/10', text: 'text-emerald-
|
|
104
|
-
POST: { bg: 'bg-blue-500/10', text: 'text-blue-
|
|
105
|
-
PUT: { bg: 'bg-amber-500/10', text: 'text-amber-
|
|
106
|
-
PATCH: { bg: 'bg-orange-500/10', text: 'text-orange-
|
|
107
|
-
DELETE: { bg: 'bg-red-500/10', text: 'text-red-
|
|
108
|
-
HEAD: { bg: 'bg-purple-500/10', text: 'text-purple-
|
|
109
|
-
OPTIONS: { bg: 'bg-gray-500/10', text: 'text-gray-
|
|
110
|
-
TRACE: { bg: 'bg-gray-500/10', text: 'text-gray-
|
|
103
|
+
GET: { bg: 'bg-emerald-500/10', text: 'text-emerald-700 dark:text-emerald-400' },
|
|
104
|
+
POST: { bg: 'bg-blue-500/10', text: 'text-blue-600 dark:text-blue-400' },
|
|
105
|
+
PUT: { bg: 'bg-amber-500/10', text: 'text-amber-700 dark:text-amber-400' },
|
|
106
|
+
PATCH: { bg: 'bg-orange-500/10', text: 'text-orange-700 dark:text-orange-400' },
|
|
107
|
+
DELETE: { bg: 'bg-red-500/10', text: 'text-red-700 dark:text-red-400' },
|
|
108
|
+
HEAD: { bg: 'bg-purple-500/10', text: 'text-purple-600 dark:text-purple-400' },
|
|
109
|
+
OPTIONS: { bg: 'bg-gray-500/10', text: 'text-gray-600 dark:text-gray-400' },
|
|
110
|
+
TRACE: { bg: 'bg-gray-500/10', text: 'text-gray-600 dark:text-gray-400' },
|
|
111
111
|
};
|
|
112
112
|
|
|
113
113
|
/**
|
|
@@ -224,9 +224,9 @@ function AuthorizationSection({ security }: { security: SecurityRequirement[] })
|
|
|
224
224
|
|
|
225
225
|
return (
|
|
226
226
|
<div className="mt-8">
|
|
227
|
-
<
|
|
227
|
+
<h2 id="authorizations" className="text-base font-semibold text-[var(--color-text-primary)] mb-4 scroll-mt-20">
|
|
228
228
|
Authorizations
|
|
229
|
-
</
|
|
229
|
+
</h2>
|
|
230
230
|
<div>
|
|
231
231
|
<div className="py-4 border-b border-[var(--color-border)]">
|
|
232
232
|
<div className="flex items-center gap-2 flex-wrap">
|
|
@@ -280,9 +280,9 @@ function ParameterSection({
|
|
|
280
280
|
|
|
281
281
|
return (
|
|
282
282
|
<div className="mt-8">
|
|
283
|
-
<
|
|
283
|
+
<h2 id={id} className="text-base font-semibold text-[var(--color-text-primary)] mb-4 scroll-mt-20">
|
|
284
284
|
{title}
|
|
285
|
-
</
|
|
285
|
+
</h2>
|
|
286
286
|
<div>
|
|
287
287
|
{parameters.map((param, index) => (
|
|
288
288
|
<div
|
|
@@ -350,9 +350,9 @@ function RequestBodySection({
|
|
|
350
350
|
|
|
351
351
|
return (
|
|
352
352
|
<div className="mt-8">
|
|
353
|
-
<
|
|
353
|
+
<h2 id="body" className="text-base font-semibold text-[var(--color-text-primary)] mb-4 scroll-mt-20">
|
|
354
354
|
Body
|
|
355
|
-
</
|
|
355
|
+
</h2>
|
|
356
356
|
{requestBody.description && (
|
|
357
357
|
<p className="text-sm text-[var(--color-text-secondary)] mb-3 whitespace-pre-line">
|
|
358
358
|
{requestBody.description}
|
|
@@ -487,9 +487,9 @@ function ResponseSection({
|
|
|
487
487
|
<div className="mt-8">
|
|
488
488
|
{/* Response Header - Mintlify style with status code and content type on same line */}
|
|
489
489
|
<div className="flex items-center justify-between border-b border-[var(--color-border)] pb-3 mb-4">
|
|
490
|
-
<
|
|
490
|
+
<h2 id="response" className="text-base font-semibold text-[var(--color-text-primary)] scroll-mt-20">
|
|
491
491
|
Response
|
|
492
|
-
</
|
|
492
|
+
</h2>
|
|
493
493
|
<div className="flex items-center gap-3">
|
|
494
494
|
{/* Status code - as tabs if multiple, or just display if single */}
|
|
495
495
|
{showTabs ? (
|
|
@@ -106,7 +106,7 @@ export const Tabs = memo(function Tabs({ children, borderBottom }: TabsProps) {
|
|
|
106
106
|
<TabsContext.Provider value={{ activeTab, setActiveTab }}>
|
|
107
107
|
<div className={`my-6 not-prose${borderBottom ? ' border-b border-[var(--color-border)] pb-4' : ''}`}>
|
|
108
108
|
{/* Tab bar */}
|
|
109
|
-
<div className="flex border-b border-[var(--color-border)] mb-4 overflow-x-auto">
|
|
109
|
+
<div className="flex border-b border-[var(--color-border)] mb-4 overflow-x-auto" role="tablist">
|
|
110
110
|
{tabs.map((tab, index) => {
|
|
111
111
|
const { title, icon } = tab.props;
|
|
112
112
|
const isActive = activeTab === index;
|
|
@@ -117,7 +117,7 @@ export const Tabs = memo(function Tabs({ children, borderBottom }: TabsProps) {
|
|
|
117
117
|
onClick={() => handleTabClick(index)}
|
|
118
118
|
className={`flex items-center gap-2 px-4 py-2.5 text-sm font-medium border-b-2 transition-colors whitespace-nowrap ${
|
|
119
119
|
isActive
|
|
120
|
-
? 'border-[var(--color-accent)] text-[var(--color-accent)]'
|
|
120
|
+
? 'border-[var(--color-accent)] text-[var(--color-accent-text)]'
|
|
121
121
|
: 'border-transparent text-[var(--color-text-muted)] hover:text-[var(--color-text-primary)] hover:border-[var(--color-border)]'
|
|
122
122
|
}`}
|
|
123
123
|
role="tab"
|
|
@@ -10,6 +10,7 @@ import React, {
|
|
|
10
10
|
useRef,
|
|
11
11
|
type ReactNode,
|
|
12
12
|
} from 'react';
|
|
13
|
+
import { useOnClickOutside } from '@/hooks/useOnClickOutside';
|
|
13
14
|
import { Icon } from './Icon';
|
|
14
15
|
|
|
15
16
|
// ============================================================================
|
|
@@ -120,18 +121,7 @@ export function ViewSelector({ className = '' }: ViewSelectorProps) {
|
|
|
120
121
|
const currentIndex = views.findIndex((v) => v.title === selectedView);
|
|
121
122
|
|
|
122
123
|
// Handle click outside to close
|
|
123
|
-
|
|
124
|
-
if (!isOpen) return;
|
|
125
|
-
|
|
126
|
-
const handleClickOutside = (e: MouseEvent) => {
|
|
127
|
-
if (containerRef.current && !containerRef.current.contains(e.target as Node)) {
|
|
128
|
-
setIsOpen(false);
|
|
129
|
-
}
|
|
130
|
-
};
|
|
131
|
-
|
|
132
|
-
document.addEventListener('mousedown', handleClickOutside);
|
|
133
|
-
return () => document.removeEventListener('mousedown', handleClickOutside);
|
|
134
|
-
}, [isOpen]);
|
|
124
|
+
useOnClickOutside(containerRef, () => setIsOpen(false), isOpen);
|
|
135
125
|
|
|
136
126
|
// Focus the item when focusedIndex changes
|
|
137
127
|
useEffect(() => {
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
|
|
3
3
|
import { useState, useEffect, useMemo, useRef } from 'react';
|
|
4
|
+
import { useOnClickOutside } from '@/hooks/useOnClickOutside';
|
|
4
5
|
import Link from 'next/link';
|
|
5
6
|
import { usePathname } from 'next/navigation';
|
|
6
7
|
// Icons use Font Awesome CSS classes for lightweight rendering
|
|
@@ -202,28 +203,17 @@ export function Header({ config, layout = 'header-logo', tabsPosition: tabsPosit
|
|
|
202
203
|
return () => document.removeEventListener('keydown', down);
|
|
203
204
|
}, [showLogoInHeader]);
|
|
204
205
|
|
|
205
|
-
// Close tabs dropdown when clicking outside
|
|
206
|
-
|
|
207
|
-
const handleClickOutside = (e: MouseEvent) => {
|
|
208
|
-
if (tabsDropdownRef.current && !tabsDropdownRef.current.contains(e.target as Node)) {
|
|
209
|
-
setIsTabsDropdownOpen(false);
|
|
210
|
-
}
|
|
211
|
-
};
|
|
206
|
+
// Close tabs dropdown when clicking outside
|
|
207
|
+
useOnClickOutside(tabsDropdownRef, () => setIsTabsDropdownOpen(false), isTabsDropdownOpen);
|
|
212
208
|
|
|
209
|
+
// Close tabs dropdown on Escape
|
|
210
|
+
useEffect(() => {
|
|
211
|
+
if (!isTabsDropdownOpen) return;
|
|
213
212
|
const handleKeyDown = (e: KeyboardEvent) => {
|
|
214
|
-
if (e.key === 'Escape')
|
|
215
|
-
setIsTabsDropdownOpen(false);
|
|
216
|
-
}
|
|
213
|
+
if (e.key === 'Escape') setIsTabsDropdownOpen(false);
|
|
217
214
|
};
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
document.addEventListener('mousedown', handleClickOutside);
|
|
221
|
-
document.addEventListener('keydown', handleKeyDown);
|
|
222
|
-
return () => {
|
|
223
|
-
document.removeEventListener('mousedown', handleClickOutside);
|
|
224
|
-
document.removeEventListener('keydown', handleKeyDown);
|
|
225
|
-
};
|
|
226
|
-
}
|
|
215
|
+
document.addEventListener('keydown', handleKeyDown);
|
|
216
|
+
return () => document.removeEventListener('keydown', handleKeyDown);
|
|
227
217
|
}, [isTabsDropdownOpen]);
|
|
228
218
|
|
|
229
219
|
// Split tabs into visible and overflow
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
|
|
3
3
|
import { useState, useEffect, useRef, useCallback } from 'react';
|
|
4
|
+
import { useOnClickOutside } from '@/hooks/useOnClickOutside';
|
|
4
5
|
import { useRouter, usePathname } from 'next/navigation';
|
|
5
6
|
import type { ResolvedLanguage } from '@/lib/navigation-resolver';
|
|
6
7
|
import type { LanguageCode } from '@/lib/docs-types';
|
|
@@ -64,18 +65,7 @@ export function LanguageSelector({
|
|
|
64
65
|
}, []); // Only run once on mount
|
|
65
66
|
|
|
66
67
|
// Handle click outside to close
|
|
67
|
-
|
|
68
|
-
if (!isOpen) return;
|
|
69
|
-
|
|
70
|
-
const handleClickOutside = (e: MouseEvent) => {
|
|
71
|
-
if (containerRef.current && !containerRef.current.contains(e.target as Node)) {
|
|
72
|
-
setIsOpen(false);
|
|
73
|
-
}
|
|
74
|
-
};
|
|
75
|
-
|
|
76
|
-
document.addEventListener('mousedown', handleClickOutside);
|
|
77
|
-
return () => document.removeEventListener('mousedown', handleClickOutside);
|
|
78
|
-
}, [isOpen]);
|
|
68
|
+
useOnClickOutside(containerRef, () => setIsOpen(false), isOpen);
|
|
79
69
|
|
|
80
70
|
// Handle keyboard navigation
|
|
81
71
|
const handleKeyDown = useCallback(
|
|
@@ -362,10 +362,10 @@ export function TableOfContents({ content, className = '' }: TableOfContentsProp
|
|
|
362
362
|
|
|
363
363
|
return (
|
|
364
364
|
<nav className={className}>
|
|
365
|
-
<
|
|
365
|
+
<p className="text-sm font-semibold text-[var(--color-text-tertiary)] mb-3 flex items-center gap-2">
|
|
366
366
|
<i className={`${getIconClass('bars-sort')} h-3.5 w-3.5`} aria-hidden="true" />
|
|
367
367
|
On this page
|
|
368
|
-
</
|
|
368
|
+
</p>
|
|
369
369
|
<div className="relative">
|
|
370
370
|
{/* SVG background line (grey) — rendered inline for perfect alignment */}
|
|
371
371
|
{svgPath && (
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
// Auto-generated file - do not edit manually
|
|
2
|
+
// @ts-nocheck
|
|
3
|
+
|
|
4
|
+
import React from 'react';
|
|
5
|
+
|
|
6
|
+
// Import built-in MDX components that snippets can use
|
|
7
|
+
import { Note, Info, Warning, Tip, Check, Danger, Callout } from '@/components/mdx/Callouts';
|
|
8
|
+
import { Card } from '@/components/mdx/Card';
|
|
9
|
+
import { CardGroup } from '@/components/mdx/CardGroup';
|
|
10
|
+
import { ParamField } from '@/components/mdx/ParamField';
|
|
11
|
+
import { ResponseField } from '@/components/mdx/ResponseField';
|
|
12
|
+
import { Accordion, AccordionGroup } from '@/components/mdx/Accordion';
|
|
13
|
+
import { CodeGroup } from '@/components/mdx/CodeGroup';
|
|
14
|
+
import { Steps, Step } from '@/components/mdx/Steps';
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
const CodeLink = ({ title, href }: any) => {
|
|
18
|
+
return (
|
|
19
|
+
<Card title={`${title}`} href={`${href}`} horizontal icon="code">
|
|
20
|
+
{" "}
|
|
21
|
+
</Card>
|
|
22
|
+
);
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
export default CodeLink;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
// Auto-generated file - do not edit manually
|
|
2
|
+
// @ts-nocheck
|
|
3
|
+
|
|
4
|
+
import React from 'react';
|
|
5
|
+
|
|
6
|
+
// Import built-in MDX components that snippets can use
|
|
7
|
+
import { Note, Info, Warning, Tip, Check, Danger, Callout } from '@/components/mdx/Callouts';
|
|
8
|
+
import { Card } from '@/components/mdx/Card';
|
|
9
|
+
import { CardGroup } from '@/components/mdx/CardGroup';
|
|
10
|
+
import { ParamField } from '@/components/mdx/ParamField';
|
|
11
|
+
import { ResponseField } from '@/components/mdx/ResponseField';
|
|
12
|
+
import { Accordion, AccordionGroup } from '@/components/mdx/Accordion';
|
|
13
|
+
import { CodeGroup } from '@/components/mdx/CodeGroup';
|
|
14
|
+
import { Steps, Step } from '@/components/mdx/Steps';
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
const HeaderAPI = ({ noProfileKey, profileKeyRequired }: any) => (
|
|
18
|
+
<>
|
|
19
|
+
<ParamField header="Authorization" type="string" required>
|
|
20
|
+
<a href="/apis/overview#authorization">API Key</a> of the Primary Profile.
|
|
21
|
+
<br />
|
|
22
|
+
<br />
|
|
23
|
+
Format: <code>Authorization: Bearer API_KEY</code>
|
|
24
|
+
</ParamField>
|
|
25
|
+
{!noProfileKey &&
|
|
26
|
+
(profileKeyRequired ? (
|
|
27
|
+
<ParamField header="Profile-Key" type="string" required>
|
|
28
|
+
<a href="/apis/overview#profile-key-format">Profile Key</a> of a User Profile.
|
|
29
|
+
<br />
|
|
30
|
+
<br />
|
|
31
|
+
Format: <code>Profile-Key: PROFILE_KEY</code>
|
|
32
|
+
</ParamField>
|
|
33
|
+
) : (
|
|
34
|
+
<ParamField header="Profile-Key" type="string">
|
|
35
|
+
<a href="/apis/overview#profile-key-format">Profile Key</a> of a User Profile.
|
|
36
|
+
<br />
|
|
37
|
+
<br />
|
|
38
|
+
Format: <code>Profile-Key: PROFILE_KEY</code>
|
|
39
|
+
</ParamField>
|
|
40
|
+
))}
|
|
41
|
+
</>
|
|
42
|
+
);
|
|
43
|
+
|
|
44
|
+
export default HeaderAPI;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
// Auto-generated file - do not edit manually
|
|
2
|
+
// @ts-nocheck
|
|
3
|
+
|
|
4
|
+
import React from 'react';
|
|
5
|
+
|
|
6
|
+
// Import built-in MDX components that snippets can use
|
|
7
|
+
import { Note, Info, Warning, Tip, Check, Danger, Callout } from '@/components/mdx/Callouts';
|
|
8
|
+
import { Card } from '@/components/mdx/Card';
|
|
9
|
+
import { CardGroup } from '@/components/mdx/CardGroup';
|
|
10
|
+
import { ParamField } from '@/components/mdx/ParamField';
|
|
11
|
+
import { ResponseField } from '@/components/mdx/ResponseField';
|
|
12
|
+
import { Accordion, AccordionGroup } from '@/components/mdx/Accordion';
|
|
13
|
+
import { CodeGroup } from '@/components/mdx/CodeGroup';
|
|
14
|
+
import { Steps, Step } from '@/components/mdx/Steps';
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
const PlansAvailable = ({ plans, maxPackRequired }: any) => {
|
|
18
|
+
let displayPlans = plans;
|
|
19
|
+
|
|
20
|
+
if (plans.length === 1) {
|
|
21
|
+
const lowerCasePlan = plans[0].toLowerCase();
|
|
22
|
+
if (lowerCasePlan === "basic") {
|
|
23
|
+
displayPlans = ["Basic", "Premium", "Business", "Enterprise"];
|
|
24
|
+
} else if (lowerCasePlan === "business") {
|
|
25
|
+
displayPlans = ["Business", "Enterprise"];
|
|
26
|
+
} else if (lowerCasePlan === "premium") {
|
|
27
|
+
displayPlans = ["Premium", "Business", "Enterprise"];
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
return (
|
|
32
|
+
|
|
33
|
+
<Note>
|
|
34
|
+
Available on {displayPlans.length === 1 ? "the " : ""}
|
|
35
|
+
{displayPlans.join(", ").replace(/\b\w/g, (l) => l.toUpperCase())}{" "}
|
|
36
|
+
{displayPlans.length > 1 ? "plans" : "plan"}.
|
|
37
|
+
|
|
38
|
+
{maxPackRequired && (
|
|
39
|
+
|
|
40
|
+
<a href="https://www.acme.com/docs/additional/maxpack"
|
|
41
|
+
className="flex items-center mt-2 cursor-pointer"
|
|
42
|
+
>
|
|
43
|
+
<span className="px-1.5 py-0.5 rounded text-sm" style={{backgroundColor: '#C264B6', color: 'white', fontSize: '12px'}}>
|
|
44
|
+
Max Pack required
|
|
45
|
+
</span>
|
|
46
|
+
</a>
|
|
47
|
+
)}
|
|
48
|
+
</Note>
|
|
49
|
+
|
|
50
|
+
);
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
export default PlansAvailable;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
// Auto-generated file - do not edit manually
|
|
2
|
+
// @ts-nocheck
|
|
3
|
+
|
|
4
|
+
import React from 'react';
|
|
5
|
+
|
|
6
|
+
// Import built-in MDX components that snippets can use
|
|
7
|
+
import { Note, Info, Warning, Tip, Check, Danger, Callout } from '@/components/mdx/Callouts';
|
|
8
|
+
import { Card } from '@/components/mdx/Card';
|
|
9
|
+
import { CardGroup } from '@/components/mdx/CardGroup';
|
|
10
|
+
import { ParamField } from '@/components/mdx/ParamField';
|
|
11
|
+
import { ResponseField } from '@/components/mdx/ResponseField';
|
|
12
|
+
import { Accordion, AccordionGroup } from '@/components/mdx/Accordion';
|
|
13
|
+
import { CodeGroup } from '@/components/mdx/CodeGroup';
|
|
14
|
+
import { Steps, Step } from '@/components/mdx/Steps';
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
// Helper component for rendering plain MDX snippets
|
|
18
|
+
// Content is from project snippets (controlled source), not user input
|
|
19
|
+
const PlainMdxSnippet = ({ content }: { content: string }) => {
|
|
20
|
+
const formattedContent = content
|
|
21
|
+
.split('\n\n')
|
|
22
|
+
.map((paragraph) => {
|
|
23
|
+
let html = paragraph.replace(/\*\*([^*]+)\*\*/g, '<strong>$1</strong>');
|
|
24
|
+
html = html.replace(/\*([^*]+)\*/g, '<em>$1</em>');
|
|
25
|
+
html = html.replace(/\`([^\`]+)\`/g, '<code>$1</code>');
|
|
26
|
+
return html;
|
|
27
|
+
})
|
|
28
|
+
.filter(p => p.trim());
|
|
29
|
+
|
|
30
|
+
return (
|
|
31
|
+
<div className="snippet-content">
|
|
32
|
+
{formattedContent.map((p, i) => (
|
|
33
|
+
<p key={i} dangerouslySetInnerHTML={{ __html: p }} />
|
|
34
|
+
))}
|
|
35
|
+
</div>
|
|
36
|
+
);
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
const SnippetIntro = () => {
|
|
40
|
+
return <PlainMdxSnippet content={"One of the core principles of software development is DRY (Don't Repeat\nYourself). This is a principle that apply to documentation as\nwell. If you find yourself repeating the same content in multiple places, you\nshould consider creating a custom snippet to keep your content in sync."} />;
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
export default SnippetIntro;
|
|
@@ -178,8 +178,8 @@ export function CodePanel({
|
|
|
178
178
|
setTimeout(checkOverflow, 100);
|
|
179
179
|
});
|
|
180
180
|
const el = tabsRef.current;
|
|
181
|
-
el?.addEventListener('scroll', checkOverflow);
|
|
182
|
-
window.addEventListener('resize', checkOverflow);
|
|
181
|
+
el?.addEventListener('scroll', checkOverflow, { passive: true });
|
|
182
|
+
window.addEventListener('resize', checkOverflow, { passive: true });
|
|
183
183
|
return () => {
|
|
184
184
|
el?.removeEventListener('scroll', checkOverflow);
|
|
185
185
|
window.removeEventListener('resize', checkOverflow);
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { useEffect, useRef, type RefObject } from 'react';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Calls `handler` when a mousedown occurs outside `ref`.
|
|
7
|
+
* Only active when `enabled` is true (defaults to true).
|
|
8
|
+
* Handler is stored in a ref — safe to pass inline functions.
|
|
9
|
+
*/
|
|
10
|
+
export function useOnClickOutside(
|
|
11
|
+
ref: RefObject<HTMLElement | null>,
|
|
12
|
+
handler: () => void,
|
|
13
|
+
enabled = true,
|
|
14
|
+
) {
|
|
15
|
+
const handlerRef = useRef(handler);
|
|
16
|
+
handlerRef.current = handler;
|
|
17
|
+
|
|
18
|
+
useEffect(() => {
|
|
19
|
+
if (!enabled) return;
|
|
20
|
+
function onMouseDown(e: MouseEvent) {
|
|
21
|
+
if (ref.current && !ref.current.contains(e.target as Node)) {
|
|
22
|
+
handlerRef.current();
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
document.addEventListener('mousedown', onMouseDown);
|
|
26
|
+
return () => document.removeEventListener('mousedown', onMouseDown);
|
|
27
|
+
}, [ref, enabled]);
|
|
28
|
+
}
|
|
@@ -10,6 +10,9 @@
|
|
|
10
10
|
*/
|
|
11
11
|
|
|
12
12
|
import AjvModule, { ErrorObject } from 'ajv';
|
|
13
|
+
import addFormatsModule from 'ajv-formats';
|
|
14
|
+
// ESM compatibility - ajv-formats exports differently under NodeNext resolution
|
|
15
|
+
const addFormats = (addFormatsModule as any).default || addFormatsModule;
|
|
13
16
|
// ESM compatibility - Ajv exports differently in Node.js ESM
|
|
14
17
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
15
18
|
const Ajv = (AjvModule as any).default || AjvModule;
|
|
@@ -240,7 +243,10 @@ export async function validateConfig(configPath: string, docsPath?: string): Pro
|
|
|
240
243
|
try {
|
|
241
244
|
const schema = await getSchema();
|
|
242
245
|
if (schema) {
|
|
243
|
-
|
|
246
|
+
// validateFormats: false registers format names (no "unknown format" warnings)
|
|
247
|
+
// without enforcing them — matches pre-ajv-formats behavior where formats were silently skipped
|
|
248
|
+
const ajv = new Ajv({ allErrors: true, strict: false, validateFormats: false });
|
|
249
|
+
addFormats(ajv);
|
|
244
250
|
const validate = ajv.compile(schema);
|
|
245
251
|
const valid = validate(config);
|
|
246
252
|
|
|
@@ -362,11 +362,6 @@ body[data-theme="jam"] [data-nav-anchor][data-active="false"]:hover::before {
|
|
|
362
362
|
background-color: var(--color-bg-tertiary);
|
|
363
363
|
}
|
|
364
364
|
|
|
365
|
-
/* Active nav anchor icons use solid variant for visual emphasis */
|
|
366
|
-
body[data-theme="jam"] [data-nav-anchor][data-active="true"] [class*="fa-"]:not(.fa-brands) {
|
|
367
|
-
font-weight: 900 !important;
|
|
368
|
-
}
|
|
369
|
-
|
|
370
365
|
/* Navigation page link styling for Jam theme */
|
|
371
366
|
body[data-theme="jam"] .sidebar-scroll ul li a,
|
|
372
367
|
body[data-theme="jam"] .sidebar-scroll .nav-group-l1 {
|
|
@@ -694,7 +689,7 @@ body[data-theme="jam"] .param-type-badge {
|
|
|
694
689
|
font-family: var(--font-mono, ui-monospace, monospace);
|
|
695
690
|
border-radius: var(--radius-sm);
|
|
696
691
|
background-color: var(--color-bg-tertiary);
|
|
697
|
-
color:
|
|
692
|
+
color: #6f6f6f;
|
|
698
693
|
}
|
|
699
694
|
|
|
700
695
|
/* Required badge styling - red tint to indicate importance */
|
|
@@ -828,11 +823,18 @@ body[data-theme="jam"] .prose video {
|
|
|
828
823
|
}
|
|
829
824
|
}
|
|
830
825
|
|
|
831
|
-
/*
|
|
826
|
+
/* Align header and content on mobile — zero out inline margin, use consistent padding */
|
|
827
|
+
/* Selector uses [data-has-tabs] to only target the nav header, not <header> inside articles */
|
|
832
828
|
@media (max-width: 1023px) {
|
|
833
|
-
body[data-theme="jam"] header > div {
|
|
834
|
-
margin
|
|
829
|
+
body[data-theme="jam"] header[data-has-tabs] > div {
|
|
830
|
+
margin: 0 !important;
|
|
835
831
|
padding-left: 0.5rem;
|
|
832
|
+
padding-right: 0.5rem;
|
|
833
|
+
}
|
|
834
|
+
|
|
835
|
+
body[data-theme="jam"] #main-content article {
|
|
836
|
+
padding-left: 0.5rem !important;
|
|
837
|
+
padding-right: 0.5rem !important;
|
|
836
838
|
}
|
|
837
839
|
}
|
|
838
840
|
|
|
@@ -261,11 +261,18 @@ body[data-theme="nebula"] .code-panels-sidebar {
|
|
|
261
261
|
padding-right: 1rem;
|
|
262
262
|
}
|
|
263
263
|
|
|
264
|
-
/*
|
|
264
|
+
/* Align header and content on mobile — zero out inline margin, use consistent padding */
|
|
265
|
+
/* Selector uses [data-has-tabs] to only target the nav header, not <header> inside articles */
|
|
265
266
|
@media (max-width: 1023px) {
|
|
266
|
-
body[data-theme="nebula"] header > div {
|
|
267
|
-
margin
|
|
267
|
+
body[data-theme="nebula"] header[data-has-tabs] > div {
|
|
268
|
+
margin: 0 !important;
|
|
268
269
|
padding-left: 0.5rem;
|
|
270
|
+
padding-right: 0.5rem;
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
body[data-theme="nebula"] #main-content article {
|
|
274
|
+
padding-left: 0.5rem !important;
|
|
275
|
+
padding-right: 0.5rem !important;
|
|
269
276
|
}
|
|
270
277
|
}
|
|
271
278
|
|
|
@@ -260,11 +260,6 @@ h1 {
|
|
|
260
260
|
background-color: var(--color-bg-tertiary);
|
|
261
261
|
}
|
|
262
262
|
|
|
263
|
-
/* Active nav anchor icons use solid variant for visual emphasis */
|
|
264
|
-
[data-nav-anchor][data-active="true"] [class*="fa-"]:not(.fa-brands) {
|
|
265
|
-
font-weight: 900 !important;
|
|
266
|
-
}
|
|
267
|
-
|
|
268
263
|
/* Navigation page link styling for Pulsar theme */
|
|
269
264
|
/* Uses left border line style matching TOC: border-l-2 -ml-px on links */
|
|
270
265
|
/* Link border overlaps container's 1px border (container has padding-left: 12px) */
|
|
@@ -640,7 +635,7 @@ aside {
|
|
|
640
635
|
font-family: var(--font-mono, ui-monospace, monospace);
|
|
641
636
|
border-radius: var(--radius-sm);
|
|
642
637
|
background-color: var(--color-bg-tertiary);
|
|
643
|
-
color:
|
|
638
|
+
color: #6f6f6f;
|
|
644
639
|
}
|
|
645
640
|
|
|
646
641
|
/* Required badge styling - red tint to indicate importance */
|
|
@@ -745,7 +740,8 @@ header nav span[class*="bg-[var(--color-accent)]"] {
|
|
|
745
740
|
}
|
|
746
741
|
|
|
747
742
|
/* Header full-width - for mobile view where header is still shown */
|
|
748
|
-
|
|
743
|
+
/* Scoped to [data-has-tabs] to avoid matching page content <header> elements */
|
|
744
|
+
body[data-theme="pulsar"] header[data-has-tabs] > div {
|
|
749
745
|
max-width: none !important;
|
|
750
746
|
margin: 0 24px !important;
|
|
751
747
|
}
|
|
@@ -892,7 +888,7 @@ body[data-theme="pulsar"] header [data-theme-toggle] {
|
|
|
892
888
|
|
|
893
889
|
/* Phase 2: Header Responsive Margins */
|
|
894
890
|
@media (max-width: 639px) {
|
|
895
|
-
body[data-theme="pulsar"] header > div {
|
|
891
|
+
body[data-theme="pulsar"] header[data-has-tabs] > div {
|
|
896
892
|
margin: 0 16px !important;
|
|
897
893
|
}
|
|
898
894
|
}
|