@mp-lb/mdkit 0.2.3-main.20.1 → 0.2.3-main.21.1

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.
Files changed (40) hide show
  1. package/dist/core/checkpointPolicy.d.ts +25 -0
  2. package/dist/core/checkpointPolicy.js +45 -0
  3. package/dist/core/index.d.ts +2 -0
  4. package/dist/core/index.js +1 -0
  5. package/dist/index.d.ts +2 -0
  6. package/dist/index.js +1 -0
  7. package/dist/server.d.ts +2 -0
  8. package/dist/server.js +1 -0
  9. package/dist/transport/backend.d.ts +29 -0
  10. package/dist/transport/backend.js +93 -0
  11. package/dist/transport/trpcClient.d.ts +29 -8
  12. package/dist/trpc/client.d.ts +1 -1
  13. package/dist/trpc/server.d.ts +2 -0
  14. package/dist/trpc/server.js +1 -0
  15. package/dist/trpc.d.ts +1 -1
  16. package/docs/.vitepress/cache/deps/@theme_index.js +275 -0
  17. package/docs/.vitepress/cache/deps/@theme_index.js.map +7 -0
  18. package/docs/.vitepress/cache/deps/_metadata.json +40 -0
  19. package/docs/.vitepress/cache/deps/chunk-PM3I3KHC.js +9719 -0
  20. package/docs/.vitepress/cache/deps/chunk-PM3I3KHC.js.map +7 -0
  21. package/docs/.vitepress/cache/deps/chunk-VSHFF4ZG.js +13018 -0
  22. package/docs/.vitepress/cache/deps/chunk-VSHFF4ZG.js.map +7 -0
  23. package/docs/.vitepress/cache/deps/package.json +3 -0
  24. package/docs/.vitepress/cache/deps/vitepress___@vue_devtools-api.js +4505 -0
  25. package/docs/.vitepress/cache/deps/vitepress___@vue_devtools-api.js.map +7 -0
  26. package/docs/.vitepress/cache/deps/vitepress___@vueuse_core.js +583 -0
  27. package/docs/.vitepress/cache/deps/vitepress___@vueuse_core.js.map +7 -0
  28. package/docs/.vitepress/cache/deps/vue.js +347 -0
  29. package/docs/.vitepress/cache/deps/vue.js.map +7 -0
  30. package/docs/.vitepress/config.ts +11 -0
  31. package/docs/api.md +153 -18
  32. package/docs/architecture.md +24 -9
  33. package/docs/collaboration-persistence.md +147 -0
  34. package/docs/index.md +139 -65
  35. package/docs/permissions.md +139 -0
  36. package/docs/rest.md +98 -0
  37. package/docs/shadcn.md +6 -3
  38. package/docs/styling.md +11 -10
  39. package/docs/use-cases.md +148 -0
  40. package/package.json +6 -1
@@ -0,0 +1,25 @@
1
+ import type { MdKitDocumentVersionDetail, MdKitDocumentWriteInput, MdKitDocumentWriteResult } from "../document/documentTypes.js";
2
+ export type MdKitCheckpointPolicyInput = {
3
+ currentContent: string;
4
+ documentId: string;
5
+ editDistance: number;
6
+ previousCheckpoint: MdKitDocumentVersionDetail | null;
7
+ previousCheckpointContent: string | null;
8
+ timeSinceLastCheckpointMs: number | null;
9
+ writeInput: MdKitDocumentWriteInput;
10
+ writeResult: MdKitDocumentWriteResult;
11
+ };
12
+ export type MdKitCheckpointPolicy = {
13
+ shouldCheckpoint(input: MdKitCheckpointPolicyInput): boolean | Promise<boolean>;
14
+ };
15
+ export type MdKitSmartCheckpointPolicyOptions = {
16
+ minEditDistance?: number;
17
+ minIntervalMs?: number;
18
+ };
19
+ export declare const measureMdKitEditDistance: (left: string, right: string) => number;
20
+ export declare const CheckpointPolicy: {
21
+ readonly always: () => MdKitCheckpointPolicy;
22
+ readonly function: (shouldCheckpoint: MdKitCheckpointPolicy["shouldCheckpoint"]) => MdKitCheckpointPolicy;
23
+ readonly never: () => MdKitCheckpointPolicy;
24
+ readonly smart: (options?: MdKitSmartCheckpointPolicyOptions) => MdKitCheckpointPolicy;
25
+ };
@@ -0,0 +1,45 @@
1
+ const defaultMinEditDistance = 250;
2
+ const defaultMinIntervalMs = 5 * 60_000;
3
+ export const measureMdKitEditDistance = (left, right) => {
4
+ if (left === right) {
5
+ return 0;
6
+ }
7
+ if (left.length === 0) {
8
+ return right.length;
9
+ }
10
+ if (right.length === 0) {
11
+ return left.length;
12
+ }
13
+ let previous = Array.from({ length: right.length + 1 }, (_, index) => index);
14
+ let current = new Array(right.length + 1);
15
+ for (let leftIndex = 1; leftIndex <= left.length; leftIndex += 1) {
16
+ current[0] = leftIndex;
17
+ for (let rightIndex = 1; rightIndex <= right.length; rightIndex += 1) {
18
+ const cost = left[leftIndex - 1] === right[rightIndex - 1] ? 0 : 1;
19
+ current[rightIndex] = Math.min(current[rightIndex - 1] + 1, previous[rightIndex] + 1, previous[rightIndex - 1] + cost);
20
+ }
21
+ [previous, current] = [current, previous];
22
+ }
23
+ return previous[right.length] ?? 0;
24
+ };
25
+ export const CheckpointPolicy = {
26
+ always: () => ({
27
+ shouldCheckpoint: () => true,
28
+ }),
29
+ function: (shouldCheckpoint) => ({
30
+ shouldCheckpoint,
31
+ }),
32
+ never: () => ({
33
+ shouldCheckpoint: () => false,
34
+ }),
35
+ smart: (options = {}) => {
36
+ const minEditDistance = options.minEditDistance ?? defaultMinEditDistance;
37
+ const minIntervalMs = options.minIntervalMs ?? defaultMinIntervalMs;
38
+ return {
39
+ shouldCheckpoint: ({ editDistance, previousCheckpoint, timeSinceLastCheckpointMs, }) => !previousCheckpoint ||
40
+ editDistance >= minEditDistance ||
41
+ (timeSinceLastCheckpointMs !== null &&
42
+ timeSinceLastCheckpointMs >= minIntervalMs),
43
+ };
44
+ },
45
+ };
@@ -1,3 +1,5 @@
1
1
  export { createMdKitDocumentRecord, detectMdKitDocumentConflict, normalizeMdKitVersionToken, restoreMdKitDocumentVersion, writeMdKitDocumentRecord, } from "./documentEngine.js";
2
+ export { CheckpointPolicy, measureMdKitEditDistance, } from "./checkpointPolicy.js";
2
3
  export type { CreateMdKitDocumentRecordInput, MdKitDocumentRecord, RestoreMdKitDocumentVersionInput, RestoreMdKitDocumentVersionResult, WriteMdKitDocumentRecordInput, WriteMdKitDocumentRecordResult, } from "./documentEngine.js";
4
+ export type { MdKitCheckpointPolicy, MdKitCheckpointPolicyInput, MdKitSmartCheckpointPolicyOptions, } from "./checkpointPolicy.js";
3
5
  export type { MdKitDocumentSnapshot, MdKitDocumentVersionDetail, MdKitDocumentVersionSummary, MdKitDocumentVersionToken, MdKitDocumentWriteInput, MdKitDocumentWriteResult, } from "../document/documentTypes.js";
@@ -1 +1,2 @@
1
1
  export { createMdKitDocumentRecord, detectMdKitDocumentConflict, normalizeMdKitVersionToken, restoreMdKitDocumentVersion, writeMdKitDocumentRecord, } from "./documentEngine.js";
2
+ export { CheckpointPolicy, measureMdKitEditDistance, } from "./checkpointPolicy.js";
package/dist/index.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  export { useMdKitCollaboration } from "./collaboration/useMdKitCollaboration.js";
2
+ export { CheckpointPolicy, measureMdKitEditDistance, } from "./core/checkpointPolicy.js";
2
3
  export { createMdKitDocumentRecord, detectMdKitDocumentConflict, normalizeMdKitVersionToken, restoreMdKitDocumentVersion, writeMdKitDocumentRecord, } from "./core/documentEngine.js";
3
4
  export { useMdKitDocument } from "./document/useMdKitDocument.js";
4
5
  export { MdKitConflictPanel } from "./document/MdKitConflictPanel.js";
@@ -11,6 +12,7 @@ export { createMdKitEditorThemeStyle, darkMdKitEditorTheme, defaultMdKitEditorTh
11
12
  export { VersionHistoryPanel } from "./versioning/VersionHistoryPanel.js";
12
13
  export { useMdKitDocumentVersions } from "./versioning/useMdKitDocumentVersions.js";
13
14
  export { yjs } from "./yjs/index.js";
15
+ export type { MdKitCheckpointPolicy, MdKitCheckpointPolicyInput, MdKitSmartCheckpointPolicyOptions, } from "./core/checkpointPolicy.js";
14
16
  export type { CreateMdKitDocumentRecordInput, MdKitDocumentRecord, RestoreMdKitDocumentVersionInput, RestoreMdKitDocumentVersionResult, WriteMdKitDocumentRecordInput, WriteMdKitDocumentRecordResult, } from "./core/documentEngine.js";
15
17
  export type { MdKitCollaborationParticipant, MdKitCollaborationSession, MdKitCollaborationStatus, MdKitDocumentAdapter, MdKitDocumentSnapshot, MdKitDocumentVersionDetail, MdKitDocumentVersionSummary, MdKitDocumentVersionToken, MdKitDocumentWriteInput, MdKitDocumentWriteResult, } from "./document/documentTypes.js";
16
18
  export type { MdKitDocumentConflictDetails, MdKitDocumentController, } from "./document/useMdKitDocument.js";
package/dist/index.js CHANGED
@@ -1,4 +1,5 @@
1
1
  export { useMdKitCollaboration } from "./collaboration/useMdKitCollaboration.js";
2
+ export { CheckpointPolicy, measureMdKitEditDistance, } from "./core/checkpointPolicy.js";
2
3
  export { createMdKitDocumentRecord, detectMdKitDocumentConflict, normalizeMdKitVersionToken, restoreMdKitDocumentVersion, writeMdKitDocumentRecord, } from "./core/documentEngine.js";
3
4
  export { useMdKitDocument } from "./document/useMdKitDocument.js";
4
5
  export { MdKitConflictPanel } from "./document/MdKitConflictPanel.js";
@@ -0,0 +1,2 @@
1
+ export { createMdKitBackend } from "./transport/backend.js";
2
+ export type { CreateMdKitBackendOptions, MdKitBackendStore, MdKitCreateCheckpointInput, } from "./transport/backend.js";
package/dist/server.js ADDED
@@ -0,0 +1 @@
1
+ export { createMdKitBackend } from "./transport/backend.js";
@@ -0,0 +1,29 @@
1
+ import type { MdKitDocumentSnapshot, MdKitDocumentVersionDetail, MdKitDocumentVersionSummary, MdKitDocumentVersionToken, MdKitDocumentWriteInput, MdKitDocumentWriteResult } from "../document/documentTypes.js";
2
+ import { type MdKitCheckpointPolicy } from "../core/checkpointPolicy.js";
3
+ import type { MdKitRestoreDocumentVersionInput, MdKitTransportStore } from "./store.js";
4
+ export type MdKitCreateCheckpointInput = {
5
+ content: string;
6
+ documentId: string;
7
+ metadata?: unknown;
8
+ sourceRevision: MdKitDocumentVersionToken;
9
+ };
10
+ export type MdKitBackendStore = {
11
+ createCheckpoint?(input: MdKitCreateCheckpointInput): Promise<MdKitDocumentVersionSummary> | MdKitDocumentVersionSummary;
12
+ getLatestCheckpoint?(documentId: string): Promise<MdKitDocumentVersionDetail | null> | MdKitDocumentVersionDetail | null;
13
+ listDocumentVersions?(documentId: string): Promise<MdKitDocumentVersionSummary[]> | MdKitDocumentVersionSummary[];
14
+ readCollaborationState?(documentName: string): Promise<Uint8Array | null> | Uint8Array | null;
15
+ readDocument(documentId: string): Promise<MdKitDocumentSnapshot> | MdKitDocumentSnapshot;
16
+ readDocumentVersion?(input: {
17
+ documentId: string;
18
+ versionId: string;
19
+ }): Promise<MdKitDocumentVersionDetail | null> | MdKitDocumentVersionDetail | null;
20
+ resyncDocument?(documentId: string): Promise<MdKitDocumentSnapshot> | MdKitDocumentSnapshot;
21
+ restoreDocumentVersion?(input: MdKitRestoreDocumentVersionInput): Promise<MdKitDocumentWriteResult> | MdKitDocumentWriteResult;
22
+ writeCollaborationState?(documentName: string, state: Uint8Array): Promise<void> | void;
23
+ writeDocument(input: MdKitDocumentWriteInput): Promise<MdKitDocumentWriteResult> | MdKitDocumentWriteResult;
24
+ };
25
+ export type CreateMdKitBackendOptions = {
26
+ checkpointPolicy?: MdKitCheckpointPolicy;
27
+ store: MdKitBackendStore;
28
+ };
29
+ export declare const createMdKitBackend: ({ checkpointPolicy, store, }: CreateMdKitBackendOptions) => MdKitTransportStore;
@@ -0,0 +1,93 @@
1
+ import { CheckpointPolicy, measureMdKitEditDistance, } from "../core/checkpointPolicy.js";
2
+ const timestampMs = (value) => {
3
+ if (!value) {
4
+ return null;
5
+ }
6
+ const timestamp = Date.parse(value);
7
+ return Number.isFinite(timestamp) ? timestamp : null;
8
+ };
9
+ const successfulWriteRevision = (result) => "conflict" in result ? null : result.version;
10
+ const latestCheckpointFromList = async (store, documentId) => {
11
+ const versions = await store.listDocumentVersions?.(documentId);
12
+ const latestSummary = versions?.at(-1);
13
+ if (!latestSummary || !store.readDocumentVersion) {
14
+ return null;
15
+ }
16
+ return store.readDocumentVersion({
17
+ documentId,
18
+ versionId: latestSummary.id,
19
+ });
20
+ };
21
+ const readLatestCheckpoint = async (store, documentId) => (await store.getLatestCheckpoint?.(documentId)) ??
22
+ (await latestCheckpointFromList(store, documentId));
23
+ const maybeCreateCheckpoint = async (store, policy, input, result) => {
24
+ const sourceRevision = successfulWriteRevision(result);
25
+ if (!store.createCheckpoint || sourceRevision === null) {
26
+ return;
27
+ }
28
+ const previousCheckpoint = await readLatestCheckpoint(store, input.documentId);
29
+ const previousCheckpointContent = previousCheckpoint?.content ?? null;
30
+ const editDistance = measureMdKitEditDistance(previousCheckpointContent ?? "", input.content);
31
+ const checkpointTimestamp = timestampMs(previousCheckpoint?.createdAt);
32
+ const timeSinceLastCheckpointMs = checkpointTimestamp === null ? null : Date.now() - checkpointTimestamp;
33
+ const shouldCheckpoint = await policy.shouldCheckpoint({
34
+ currentContent: input.content,
35
+ documentId: input.documentId,
36
+ editDistance,
37
+ previousCheckpoint,
38
+ previousCheckpointContent,
39
+ timeSinceLastCheckpointMs,
40
+ writeInput: input,
41
+ writeResult: result,
42
+ });
43
+ if (!shouldCheckpoint) {
44
+ return;
45
+ }
46
+ await store.createCheckpoint({
47
+ content: input.content,
48
+ documentId: input.documentId,
49
+ sourceRevision,
50
+ });
51
+ };
52
+ const restoreWithStorePrimitives = async (store, input) => {
53
+ if (!store.readDocumentVersion) {
54
+ if (!store.restoreDocumentVersion) {
55
+ throw new Error("Version restore is not supported");
56
+ }
57
+ return store.restoreDocumentVersion(input);
58
+ }
59
+ const restoredVersion = await store.readDocumentVersion(input);
60
+ if (!restoredVersion) {
61
+ throw new Error(`Version not found: ${input.versionId}`);
62
+ }
63
+ const current = await store.readDocument(input.documentId);
64
+ const latestCheckpoint = await readLatestCheckpoint(store, input.documentId);
65
+ if (store.createCheckpoint &&
66
+ latestCheckpoint?.content !== current.content) {
67
+ await store.createCheckpoint({
68
+ content: current.content,
69
+ documentId: input.documentId,
70
+ sourceRevision: current.version,
71
+ });
72
+ }
73
+ return store.writeDocument({
74
+ baseVersion: current.version,
75
+ content: restoredVersion.content,
76
+ documentId: input.documentId,
77
+ force: true,
78
+ });
79
+ };
80
+ export const createMdKitBackend = ({ checkpointPolicy = CheckpointPolicy.never(), store, }) => ({
81
+ listDocumentVersions: (documentId) => store.listDocumentVersions?.(documentId) ?? [],
82
+ readCollaborationState: (documentName) => store.readCollaborationState?.(documentName) ?? null,
83
+ readDocument: (documentId) => store.readDocument(documentId),
84
+ readDocumentVersion: (input) => store.readDocumentVersion?.(input) ?? null,
85
+ resyncDocument: (documentId) => (store.resyncDocument ?? store.readDocument)(documentId),
86
+ restoreDocumentVersion: (input) => restoreWithStorePrimitives(store, input),
87
+ writeCollaborationState: (documentName, state) => store.writeCollaborationState?.(documentName, state),
88
+ writeDocument: async (input) => {
89
+ const result = await store.writeDocument(input);
90
+ await maybeCreateCheckpoint(store, checkpointPolicy, input, result);
91
+ return result;
92
+ },
93
+ });
@@ -1,11 +1,31 @@
1
- import { createTRPCProxyClient } from "@trpc/client";
2
- import type { MdKitDocumentAdapter } from "../document/documentTypes.js";
3
- import type { MdKitTrpcRouter } from "./trpcServer.js";
1
+ import type { MdKitDocumentAdapter, MdKitDocumentSnapshot, MdKitDocumentVersionDetail, MdKitDocumentVersionSummary, MdKitDocumentWriteInput, MdKitDocumentWriteResult } from "../document/documentTypes.js";
4
2
  export type CreateMdKitTrpcClientAdapterOptions = {
5
3
  url: string;
6
4
  };
5
+ type MdKitTrpcQuery<Input, Output> = {
6
+ query(input: Input): Promise<Output>;
7
+ };
8
+ type MdKitTrpcMutation<Input, Output> = {
9
+ mutate(input: Input): Promise<Output>;
10
+ };
11
+ type MdKitDocumentInput = {
12
+ documentId: string;
13
+ };
14
+ type MdKitVersionInput = {
15
+ documentId: string;
16
+ versionId: string;
17
+ };
18
+ export type MdKitTrpcClient = {
19
+ listDocumentVersions: MdKitTrpcQuery<MdKitDocumentInput, {
20
+ versions: MdKitDocumentVersionSummary[];
21
+ }>;
22
+ readDocument: MdKitTrpcQuery<MdKitDocumentInput, MdKitDocumentSnapshot>;
23
+ readDocumentVersion: MdKitTrpcQuery<MdKitVersionInput, MdKitDocumentVersionDetail | null>;
24
+ resyncDocument: MdKitTrpcMutation<MdKitDocumentInput, MdKitDocumentSnapshot>;
25
+ writeDocument: MdKitTrpcMutation<MdKitDocumentWriteInput, MdKitDocumentWriteResult>;
26
+ };
7
27
  export type CreateMdKitTrpcAdapterOptions = {
8
- client: ReturnType<typeof createTRPCProxyClient<MdKitTrpcRouter>>;
28
+ client: MdKitTrpcClient;
9
29
  };
10
30
  export declare const createMdKitTrpcAdapter: ({ client, }: CreateMdKitTrpcAdapterOptions) => MdKitDocumentAdapter;
11
31
  export declare const createMdKitTrpcClient: ({ url, }: CreateMdKitTrpcClientAdapterOptions) => import("@trpc/client").TRPCClient<import("@trpc/server").TRPCBuiltRouter<{
@@ -19,7 +39,7 @@ export declare const createMdKitTrpcClient: ({ url, }: CreateMdKitTrpcClientAdap
19
39
  documentId: string;
20
40
  };
21
41
  output: {
22
- versions: import("..").MdKitDocumentVersionSummary[];
42
+ versions: MdKitDocumentVersionSummary[];
23
43
  };
24
44
  meta: object;
25
45
  }>;
@@ -27,7 +47,7 @@ export declare const createMdKitTrpcClient: ({ url, }: CreateMdKitTrpcClientAdap
27
47
  input: {
28
48
  documentId: string;
29
49
  };
30
- output: import("..").MdKitDocumentSnapshot;
50
+ output: MdKitDocumentSnapshot;
31
51
  meta: object;
32
52
  }>;
33
53
  readDocumentVersion: import("@trpc/server").TRPCQueryProcedure<{
@@ -35,14 +55,14 @@ export declare const createMdKitTrpcClient: ({ url, }: CreateMdKitTrpcClientAdap
35
55
  documentId: string;
36
56
  versionId: string;
37
57
  };
38
- output: import("..").MdKitDocumentVersionDetail | null;
58
+ output: MdKitDocumentVersionDetail | null;
39
59
  meta: object;
40
60
  }>;
41
61
  resyncDocument: import("@trpc/server").TRPCMutationProcedure<{
42
62
  input: {
43
63
  documentId: string;
44
64
  };
45
- output: import("..").MdKitDocumentSnapshot;
65
+ output: MdKitDocumentSnapshot;
46
66
  meta: object;
47
67
  }>;
48
68
  restoreDocumentVersion: import("@trpc/server").TRPCMutationProcedure<{
@@ -79,3 +99,4 @@ export declare const createMdKitTrpcClient: ({ url, }: CreateMdKitTrpcClientAdap
79
99
  }>;
80
100
  }>>>;
81
101
  export declare const createMdKitTrpcClientAdapter: ({ url, }: CreateMdKitTrpcClientAdapterOptions) => MdKitDocumentAdapter;
102
+ export {};
@@ -1,3 +1,3 @@
1
1
  export { createMdKitTrpcAdapter, createMdKitTrpcClient, createMdKitTrpcClientAdapter, } from "../transport/trpcClient.js";
2
- export type { CreateMdKitTrpcAdapterOptions, CreateMdKitTrpcClientAdapterOptions, } from "../transport/trpcClient.js";
2
+ export type { CreateMdKitTrpcAdapterOptions, CreateMdKitTrpcClientAdapterOptions, MdKitTrpcClient, } from "../transport/trpcClient.js";
3
3
  export type { MdKitTrpcRouter } from "../transport/trpcServer.js";
@@ -1,3 +1,5 @@
1
+ export { createMdKitBackend } from "../transport/backend.js";
1
2
  export { createMdKitTrpcRouter } from "../transport/trpcServer.js";
3
+ export type { CreateMdKitBackendOptions, MdKitBackendStore, MdKitCreateCheckpointInput, } from "../transport/backend.js";
2
4
  export type { MdKitTrpcRouter } from "../transport/trpcServer.js";
3
5
  export type { MdKitRestoreDocumentVersionInput, MdKitTransportStore, } from "../transport/store.js";
@@ -1 +1,2 @@
1
+ export { createMdKitBackend } from "../transport/backend.js";
1
2
  export { createMdKitTrpcRouter } from "../transport/trpcServer.js";
package/dist/trpc.d.ts CHANGED
@@ -1,3 +1,3 @@
1
1
  export { createMdKitTrpcAdapter, createMdKitTrpcClient, createMdKitTrpcClientAdapter, } from "./transport/trpcClient.js";
2
- export type { CreateMdKitTrpcAdapterOptions, CreateMdKitTrpcClientAdapterOptions, } from "./transport/trpcClient.js";
2
+ export type { CreateMdKitTrpcAdapterOptions, CreateMdKitTrpcClientAdapterOptions, MdKitTrpcClient, } from "./transport/trpcClient.js";
3
3
  export type { MdKitTrpcRouter } from "./transport/trpcServer.js";
@@ -0,0 +1,275 @@
1
+ import {
2
+ useMediaQuery
3
+ } from "./chunk-PM3I3KHC.js";
4
+ import {
5
+ computed,
6
+ ref,
7
+ shallowRef,
8
+ watch
9
+ } from "./chunk-VSHFF4ZG.js";
10
+
11
+ // ../../node_modules/.pnpm/vitepress@1.6.4_@algolia+client-search@5.52.0_@types+node@25.6.0_@types+react@19.2.5_li_a6155559e07cf809c14da17cb379ee3a/node_modules/vitepress/dist/client/theme-default/index.js
12
+ import "/Users/felixsebastian/Code/mdkit/node_modules/.pnpm/vitepress@1.6.4_@algolia+client-search@5.52.0_@types+node@25.6.0_@types+react@19.2.5_li_a6155559e07cf809c14da17cb379ee3a/node_modules/vitepress/dist/client/theme-default/styles/fonts.css";
13
+
14
+ // ../../node_modules/.pnpm/vitepress@1.6.4_@algolia+client-search@5.52.0_@types+node@25.6.0_@types+react@19.2.5_li_a6155559e07cf809c14da17cb379ee3a/node_modules/vitepress/dist/client/theme-default/without-fonts.js
15
+ import "/Users/felixsebastian/Code/mdkit/node_modules/.pnpm/vitepress@1.6.4_@algolia+client-search@5.52.0_@types+node@25.6.0_@types+react@19.2.5_li_a6155559e07cf809c14da17cb379ee3a/node_modules/vitepress/dist/client/theme-default/styles/vars.css";
16
+ import "/Users/felixsebastian/Code/mdkit/node_modules/.pnpm/vitepress@1.6.4_@algolia+client-search@5.52.0_@types+node@25.6.0_@types+react@19.2.5_li_a6155559e07cf809c14da17cb379ee3a/node_modules/vitepress/dist/client/theme-default/styles/base.css";
17
+ import "/Users/felixsebastian/Code/mdkit/node_modules/.pnpm/vitepress@1.6.4_@algolia+client-search@5.52.0_@types+node@25.6.0_@types+react@19.2.5_li_a6155559e07cf809c14da17cb379ee3a/node_modules/vitepress/dist/client/theme-default/styles/icons.css";
18
+ import "/Users/felixsebastian/Code/mdkit/node_modules/.pnpm/vitepress@1.6.4_@algolia+client-search@5.52.0_@types+node@25.6.0_@types+react@19.2.5_li_a6155559e07cf809c14da17cb379ee3a/node_modules/vitepress/dist/client/theme-default/styles/utils.css";
19
+ import "/Users/felixsebastian/Code/mdkit/node_modules/.pnpm/vitepress@1.6.4_@algolia+client-search@5.52.0_@types+node@25.6.0_@types+react@19.2.5_li_a6155559e07cf809c14da17cb379ee3a/node_modules/vitepress/dist/client/theme-default/styles/components/custom-block.css";
20
+ import "/Users/felixsebastian/Code/mdkit/node_modules/.pnpm/vitepress@1.6.4_@algolia+client-search@5.52.0_@types+node@25.6.0_@types+react@19.2.5_li_a6155559e07cf809c14da17cb379ee3a/node_modules/vitepress/dist/client/theme-default/styles/components/vp-code.css";
21
+ import "/Users/felixsebastian/Code/mdkit/node_modules/.pnpm/vitepress@1.6.4_@algolia+client-search@5.52.0_@types+node@25.6.0_@types+react@19.2.5_li_a6155559e07cf809c14da17cb379ee3a/node_modules/vitepress/dist/client/theme-default/styles/components/vp-code-group.css";
22
+ import "/Users/felixsebastian/Code/mdkit/node_modules/.pnpm/vitepress@1.6.4_@algolia+client-search@5.52.0_@types+node@25.6.0_@types+react@19.2.5_li_a6155559e07cf809c14da17cb379ee3a/node_modules/vitepress/dist/client/theme-default/styles/components/vp-doc.css";
23
+ import "/Users/felixsebastian/Code/mdkit/node_modules/.pnpm/vitepress@1.6.4_@algolia+client-search@5.52.0_@types+node@25.6.0_@types+react@19.2.5_li_a6155559e07cf809c14da17cb379ee3a/node_modules/vitepress/dist/client/theme-default/styles/components/vp-sponsor.css";
24
+ import VPBadge from "/Users/felixsebastian/Code/mdkit/node_modules/.pnpm/vitepress@1.6.4_@algolia+client-search@5.52.0_@types+node@25.6.0_@types+react@19.2.5_li_a6155559e07cf809c14da17cb379ee3a/node_modules/vitepress/dist/client/theme-default/components/VPBadge.vue";
25
+ import Layout from "/Users/felixsebastian/Code/mdkit/node_modules/.pnpm/vitepress@1.6.4_@algolia+client-search@5.52.0_@types+node@25.6.0_@types+react@19.2.5_li_a6155559e07cf809c14da17cb379ee3a/node_modules/vitepress/dist/client/theme-default/Layout.vue";
26
+ import { default as default2 } from "/Users/felixsebastian/Code/mdkit/node_modules/.pnpm/vitepress@1.6.4_@algolia+client-search@5.52.0_@types+node@25.6.0_@types+react@19.2.5_li_a6155559e07cf809c14da17cb379ee3a/node_modules/vitepress/dist/client/theme-default/components/VPBadge.vue";
27
+ import { default as default3 } from "/Users/felixsebastian/Code/mdkit/node_modules/.pnpm/vitepress@1.6.4_@algolia+client-search@5.52.0_@types+node@25.6.0_@types+react@19.2.5_li_a6155559e07cf809c14da17cb379ee3a/node_modules/vitepress/dist/client/theme-default/components/VPButton.vue";
28
+ import { default as default4 } from "/Users/felixsebastian/Code/mdkit/node_modules/.pnpm/vitepress@1.6.4_@algolia+client-search@5.52.0_@types+node@25.6.0_@types+react@19.2.5_li_a6155559e07cf809c14da17cb379ee3a/node_modules/vitepress/dist/client/theme-default/components/VPDocAsideSponsors.vue";
29
+ import { default as default5 } from "/Users/felixsebastian/Code/mdkit/node_modules/.pnpm/vitepress@1.6.4_@algolia+client-search@5.52.0_@types+node@25.6.0_@types+react@19.2.5_li_a6155559e07cf809c14da17cb379ee3a/node_modules/vitepress/dist/client/theme-default/components/VPFeatures.vue";
30
+ import { default as default6 } from "/Users/felixsebastian/Code/mdkit/node_modules/.pnpm/vitepress@1.6.4_@algolia+client-search@5.52.0_@types+node@25.6.0_@types+react@19.2.5_li_a6155559e07cf809c14da17cb379ee3a/node_modules/vitepress/dist/client/theme-default/components/VPHomeContent.vue";
31
+ import { default as default7 } from "/Users/felixsebastian/Code/mdkit/node_modules/.pnpm/vitepress@1.6.4_@algolia+client-search@5.52.0_@types+node@25.6.0_@types+react@19.2.5_li_a6155559e07cf809c14da17cb379ee3a/node_modules/vitepress/dist/client/theme-default/components/VPHomeFeatures.vue";
32
+ import { default as default8 } from "/Users/felixsebastian/Code/mdkit/node_modules/.pnpm/vitepress@1.6.4_@algolia+client-search@5.52.0_@types+node@25.6.0_@types+react@19.2.5_li_a6155559e07cf809c14da17cb379ee3a/node_modules/vitepress/dist/client/theme-default/components/VPHomeHero.vue";
33
+ import { default as default9 } from "/Users/felixsebastian/Code/mdkit/node_modules/.pnpm/vitepress@1.6.4_@algolia+client-search@5.52.0_@types+node@25.6.0_@types+react@19.2.5_li_a6155559e07cf809c14da17cb379ee3a/node_modules/vitepress/dist/client/theme-default/components/VPHomeSponsors.vue";
34
+ import { default as default10 } from "/Users/felixsebastian/Code/mdkit/node_modules/.pnpm/vitepress@1.6.4_@algolia+client-search@5.52.0_@types+node@25.6.0_@types+react@19.2.5_li_a6155559e07cf809c14da17cb379ee3a/node_modules/vitepress/dist/client/theme-default/components/VPImage.vue";
35
+ import { default as default11 } from "/Users/felixsebastian/Code/mdkit/node_modules/.pnpm/vitepress@1.6.4_@algolia+client-search@5.52.0_@types+node@25.6.0_@types+react@19.2.5_li_a6155559e07cf809c14da17cb379ee3a/node_modules/vitepress/dist/client/theme-default/components/VPLink.vue";
36
+ import { default as default12 } from "/Users/felixsebastian/Code/mdkit/node_modules/.pnpm/vitepress@1.6.4_@algolia+client-search@5.52.0_@types+node@25.6.0_@types+react@19.2.5_li_a6155559e07cf809c14da17cb379ee3a/node_modules/vitepress/dist/client/theme-default/components/VPNavBarSearch.vue";
37
+ import { default as default13 } from "/Users/felixsebastian/Code/mdkit/node_modules/.pnpm/vitepress@1.6.4_@algolia+client-search@5.52.0_@types+node@25.6.0_@types+react@19.2.5_li_a6155559e07cf809c14da17cb379ee3a/node_modules/vitepress/dist/client/theme-default/components/VPSocialLink.vue";
38
+ import { default as default14 } from "/Users/felixsebastian/Code/mdkit/node_modules/.pnpm/vitepress@1.6.4_@algolia+client-search@5.52.0_@types+node@25.6.0_@types+react@19.2.5_li_a6155559e07cf809c14da17cb379ee3a/node_modules/vitepress/dist/client/theme-default/components/VPSocialLinks.vue";
39
+ import { default as default15 } from "/Users/felixsebastian/Code/mdkit/node_modules/.pnpm/vitepress@1.6.4_@algolia+client-search@5.52.0_@types+node@25.6.0_@types+react@19.2.5_li_a6155559e07cf809c14da17cb379ee3a/node_modules/vitepress/dist/client/theme-default/components/VPSponsors.vue";
40
+ import { default as default16 } from "/Users/felixsebastian/Code/mdkit/node_modules/.pnpm/vitepress@1.6.4_@algolia+client-search@5.52.0_@types+node@25.6.0_@types+react@19.2.5_li_a6155559e07cf809c14da17cb379ee3a/node_modules/vitepress/dist/client/theme-default/components/VPTeamMembers.vue";
41
+ import { default as default17 } from "/Users/felixsebastian/Code/mdkit/node_modules/.pnpm/vitepress@1.6.4_@algolia+client-search@5.52.0_@types+node@25.6.0_@types+react@19.2.5_li_a6155559e07cf809c14da17cb379ee3a/node_modules/vitepress/dist/client/theme-default/components/VPTeamPage.vue";
42
+ import { default as default18 } from "/Users/felixsebastian/Code/mdkit/node_modules/.pnpm/vitepress@1.6.4_@algolia+client-search@5.52.0_@types+node@25.6.0_@types+react@19.2.5_li_a6155559e07cf809c14da17cb379ee3a/node_modules/vitepress/dist/client/theme-default/components/VPTeamPageSection.vue";
43
+ import { default as default19 } from "/Users/felixsebastian/Code/mdkit/node_modules/.pnpm/vitepress@1.6.4_@algolia+client-search@5.52.0_@types+node@25.6.0_@types+react@19.2.5_li_a6155559e07cf809c14da17cb379ee3a/node_modules/vitepress/dist/client/theme-default/components/VPTeamPageTitle.vue";
44
+
45
+ // ../../node_modules/.pnpm/vitepress@1.6.4_@algolia+client-search@5.52.0_@types+node@25.6.0_@types+react@19.2.5_li_a6155559e07cf809c14da17cb379ee3a/node_modules/vitepress/dist/client/theme-default/composables/local-nav.js
46
+ import { onContentUpdated } from "vitepress";
47
+
48
+ // ../../node_modules/.pnpm/vitepress@1.6.4_@algolia+client-search@5.52.0_@types+node@25.6.0_@types+react@19.2.5_li_a6155559e07cf809c14da17cb379ee3a/node_modules/vitepress/dist/client/theme-default/composables/outline.js
49
+ import { getScrollOffset } from "vitepress";
50
+
51
+ // ../../node_modules/.pnpm/vitepress@1.6.4_@algolia+client-search@5.52.0_@types+node@25.6.0_@types+react@19.2.5_li_a6155559e07cf809c14da17cb379ee3a/node_modules/vitepress/dist/client/theme-default/support/utils.js
52
+ import { withBase } from "vitepress";
53
+
54
+ // ../../node_modules/.pnpm/vitepress@1.6.4_@algolia+client-search@5.52.0_@types+node@25.6.0_@types+react@19.2.5_li_a6155559e07cf809c14da17cb379ee3a/node_modules/vitepress/dist/client/theme-default/composables/data.js
55
+ import { useData as useData$ } from "vitepress";
56
+ var useData = useData$;
57
+
58
+ // ../../node_modules/.pnpm/vitepress@1.6.4_@algolia+client-search@5.52.0_@types+node@25.6.0_@types+react@19.2.5_li_a6155559e07cf809c14da17cb379ee3a/node_modules/vitepress/dist/client/theme-default/support/utils.js
59
+ function ensureStartingSlash(path) {
60
+ return path.startsWith("/") ? path : `/${path}`;
61
+ }
62
+
63
+ // ../../node_modules/.pnpm/vitepress@1.6.4_@algolia+client-search@5.52.0_@types+node@25.6.0_@types+react@19.2.5_li_a6155559e07cf809c14da17cb379ee3a/node_modules/vitepress/dist/client/theme-default/support/sidebar.js
64
+ function getSidebar(_sidebar, path) {
65
+ if (Array.isArray(_sidebar))
66
+ return addBase(_sidebar);
67
+ if (_sidebar == null)
68
+ return [];
69
+ path = ensureStartingSlash(path);
70
+ const dir = Object.keys(_sidebar).sort((a, b) => {
71
+ return b.split("/").length - a.split("/").length;
72
+ }).find((dir2) => {
73
+ return path.startsWith(ensureStartingSlash(dir2));
74
+ });
75
+ const sidebar = dir ? _sidebar[dir] : [];
76
+ return Array.isArray(sidebar) ? addBase(sidebar) : addBase(sidebar.items, sidebar.base);
77
+ }
78
+ function getSidebarGroups(sidebar) {
79
+ const groups = [];
80
+ let lastGroupIndex = 0;
81
+ for (const index in sidebar) {
82
+ const item = sidebar[index];
83
+ if (item.items) {
84
+ lastGroupIndex = groups.push(item);
85
+ continue;
86
+ }
87
+ if (!groups[lastGroupIndex]) {
88
+ groups.push({ items: [] });
89
+ }
90
+ groups[lastGroupIndex].items.push(item);
91
+ }
92
+ return groups;
93
+ }
94
+ function addBase(items, _base) {
95
+ return [...items].map((_item) => {
96
+ const item = { ..._item };
97
+ const base = item.base || _base;
98
+ if (base && item.link)
99
+ item.link = base + item.link;
100
+ if (item.items)
101
+ item.items = addBase(item.items, base);
102
+ return item;
103
+ });
104
+ }
105
+
106
+ // ../../node_modules/.pnpm/vitepress@1.6.4_@algolia+client-search@5.52.0_@types+node@25.6.0_@types+react@19.2.5_li_a6155559e07cf809c14da17cb379ee3a/node_modules/vitepress/dist/client/theme-default/composables/sidebar.js
107
+ function useSidebar() {
108
+ const { frontmatter, page, theme: theme2 } = useData();
109
+ const is960 = useMediaQuery("(min-width: 960px)");
110
+ const isOpen = ref(false);
111
+ const _sidebar = computed(() => {
112
+ const sidebarConfig = theme2.value.sidebar;
113
+ const relativePath = page.value.relativePath;
114
+ return sidebarConfig ? getSidebar(sidebarConfig, relativePath) : [];
115
+ });
116
+ const sidebar = ref(_sidebar.value);
117
+ watch(_sidebar, (next, prev) => {
118
+ if (JSON.stringify(next) !== JSON.stringify(prev))
119
+ sidebar.value = _sidebar.value;
120
+ });
121
+ const hasSidebar = computed(() => {
122
+ return frontmatter.value.sidebar !== false && sidebar.value.length > 0 && frontmatter.value.layout !== "home";
123
+ });
124
+ const leftAside = computed(() => {
125
+ if (hasAside)
126
+ return frontmatter.value.aside == null ? theme2.value.aside === "left" : frontmatter.value.aside === "left";
127
+ return false;
128
+ });
129
+ const hasAside = computed(() => {
130
+ if (frontmatter.value.layout === "home")
131
+ return false;
132
+ if (frontmatter.value.aside != null)
133
+ return !!frontmatter.value.aside;
134
+ return theme2.value.aside !== false;
135
+ });
136
+ const isSidebarEnabled = computed(() => hasSidebar.value && is960.value);
137
+ const sidebarGroups = computed(() => {
138
+ return hasSidebar.value ? getSidebarGroups(sidebar.value) : [];
139
+ });
140
+ function open() {
141
+ isOpen.value = true;
142
+ }
143
+ function close() {
144
+ isOpen.value = false;
145
+ }
146
+ function toggle() {
147
+ isOpen.value ? close() : open();
148
+ }
149
+ return {
150
+ isOpen,
151
+ sidebar,
152
+ sidebarGroups,
153
+ hasSidebar,
154
+ hasAside,
155
+ leftAside,
156
+ isSidebarEnabled,
157
+ open,
158
+ close,
159
+ toggle
160
+ };
161
+ }
162
+
163
+ // ../../node_modules/.pnpm/vitepress@1.6.4_@algolia+client-search@5.52.0_@types+node@25.6.0_@types+react@19.2.5_li_a6155559e07cf809c14da17cb379ee3a/node_modules/vitepress/dist/client/theme-default/composables/outline.js
164
+ var ignoreRE = /\b(?:VPBadge|header-anchor|footnote-ref|ignore-header)\b/;
165
+ var resolvedHeaders = [];
166
+ function getHeaders(range) {
167
+ const headers = [
168
+ ...document.querySelectorAll(".VPDoc :where(h1,h2,h3,h4,h5,h6)")
169
+ ].filter((el) => el.id && el.hasChildNodes()).map((el) => {
170
+ const level = Number(el.tagName[1]);
171
+ return {
172
+ element: el,
173
+ title: serializeHeader(el),
174
+ link: "#" + el.id,
175
+ level
176
+ };
177
+ });
178
+ return resolveHeaders(headers, range);
179
+ }
180
+ function serializeHeader(h) {
181
+ let ret = "";
182
+ for (const node of h.childNodes) {
183
+ if (node.nodeType === 1) {
184
+ if (ignoreRE.test(node.className))
185
+ continue;
186
+ ret += node.textContent;
187
+ } else if (node.nodeType === 3) {
188
+ ret += node.textContent;
189
+ }
190
+ }
191
+ return ret.trim();
192
+ }
193
+ function resolveHeaders(headers, range) {
194
+ if (range === false) {
195
+ return [];
196
+ }
197
+ const levelsRange = (typeof range === "object" && !Array.isArray(range) ? range.level : range) || 2;
198
+ const [high, low] = typeof levelsRange === "number" ? [levelsRange, levelsRange] : levelsRange === "deep" ? [2, 6] : levelsRange;
199
+ return buildTree(headers, high, low);
200
+ }
201
+ function buildTree(data, min, max) {
202
+ resolvedHeaders.length = 0;
203
+ const result = [];
204
+ const stack = [];
205
+ data.forEach((item) => {
206
+ const node = { ...item, children: [] };
207
+ let parent = stack[stack.length - 1];
208
+ while (parent && parent.level >= node.level) {
209
+ stack.pop();
210
+ parent = stack[stack.length - 1];
211
+ }
212
+ if (node.element.classList.contains("ignore-header") || parent && "shouldIgnore" in parent) {
213
+ stack.push({ level: node.level, shouldIgnore: true });
214
+ return;
215
+ }
216
+ if (node.level > max || node.level < min)
217
+ return;
218
+ resolvedHeaders.push({ element: node.element, link: node.link });
219
+ if (parent)
220
+ parent.children.push(node);
221
+ else
222
+ result.push(node);
223
+ stack.push(node);
224
+ });
225
+ return result;
226
+ }
227
+
228
+ // ../../node_modules/.pnpm/vitepress@1.6.4_@algolia+client-search@5.52.0_@types+node@25.6.0_@types+react@19.2.5_li_a6155559e07cf809c14da17cb379ee3a/node_modules/vitepress/dist/client/theme-default/composables/local-nav.js
229
+ function useLocalNav() {
230
+ const { theme: theme2, frontmatter } = useData();
231
+ const headers = shallowRef([]);
232
+ const hasLocalNav = computed(() => {
233
+ return headers.value.length > 0;
234
+ });
235
+ onContentUpdated(() => {
236
+ headers.value = getHeaders(frontmatter.value.outline ?? theme2.value.outline);
237
+ });
238
+ return {
239
+ headers,
240
+ hasLocalNav
241
+ };
242
+ }
243
+
244
+ // ../../node_modules/.pnpm/vitepress@1.6.4_@algolia+client-search@5.52.0_@types+node@25.6.0_@types+react@19.2.5_li_a6155559e07cf809c14da17cb379ee3a/node_modules/vitepress/dist/client/theme-default/without-fonts.js
245
+ var theme = {
246
+ Layout,
247
+ enhanceApp: ({ app }) => {
248
+ app.component("Badge", VPBadge);
249
+ }
250
+ };
251
+ var without_fonts_default = theme;
252
+ export {
253
+ default2 as VPBadge,
254
+ default3 as VPButton,
255
+ default4 as VPDocAsideSponsors,
256
+ default5 as VPFeatures,
257
+ default6 as VPHomeContent,
258
+ default7 as VPHomeFeatures,
259
+ default8 as VPHomeHero,
260
+ default9 as VPHomeSponsors,
261
+ default10 as VPImage,
262
+ default11 as VPLink,
263
+ default12 as VPNavBarSearch,
264
+ default13 as VPSocialLink,
265
+ default14 as VPSocialLinks,
266
+ default15 as VPSponsors,
267
+ default16 as VPTeamMembers,
268
+ default17 as VPTeamPage,
269
+ default18 as VPTeamPageSection,
270
+ default19 as VPTeamPageTitle,
271
+ without_fonts_default as default,
272
+ useLocalNav,
273
+ useSidebar
274
+ };
275
+ //# sourceMappingURL=@theme_index.js.map