@mdzip/editor 1.3.21 → 1.4.0

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 (51) hide show
  1. package/README.md +27 -0
  2. package/dist/archive-utils.d.ts.map +1 -1
  3. package/dist/archive-utils.js +16 -2
  4. package/dist/archive-utils.js.map +1 -1
  5. package/dist/asset-cache.d.ts +12 -0
  6. package/dist/asset-cache.d.ts.map +1 -1
  7. package/dist/asset-cache.js +45 -0
  8. package/dist/asset-cache.js.map +1 -1
  9. package/dist/image-edit.d.ts +26 -0
  10. package/dist/image-edit.d.ts.map +1 -0
  11. package/dist/image-edit.js +195 -0
  12. package/dist/image-edit.js.map +1 -0
  13. package/dist/index.d.ts +2 -0
  14. package/dist/index.d.ts.map +1 -1
  15. package/dist/index.js +2 -0
  16. package/dist/index.js.map +1 -1
  17. package/dist/library-info.d.ts +2 -2
  18. package/dist/library-info.js +2 -2
  19. package/dist/library-info.js.map +1 -1
  20. package/dist/mdz-archive-worker-protocol.d.ts +36 -0
  21. package/dist/mdz-archive-worker-protocol.d.ts.map +1 -0
  22. package/dist/mdz-archive-worker-protocol.js +2 -0
  23. package/dist/mdz-archive-worker-protocol.js.map +1 -0
  24. package/dist/mdz-archive.worker-client.d.ts +30 -0
  25. package/dist/mdz-archive.worker-client.d.ts.map +1 -0
  26. package/dist/mdz-archive.worker-client.js +97 -0
  27. package/dist/mdz-archive.worker-client.js.map +1 -0
  28. package/dist/mdz-archive.worker.d.ts +2 -0
  29. package/dist/mdz-archive.worker.d.ts.map +1 -0
  30. package/dist/mdz-archive.worker.js +8870 -0
  31. package/dist/mdz-archive.worker.js.map +1 -0
  32. package/dist/rendering.d.ts +44 -0
  33. package/dist/rendering.d.ts.map +1 -1
  34. package/dist/rendering.js +92 -0
  35. package/dist/rendering.js.map +1 -1
  36. package/dist/stats.d.ts +23 -0
  37. package/dist/stats.d.ts.map +1 -0
  38. package/dist/stats.js +31 -0
  39. package/dist/stats.js.map +1 -0
  40. package/dist/view-css.d.ts.map +1 -1
  41. package/dist/view-css.js +45 -0
  42. package/dist/view-css.js.map +1 -1
  43. package/dist/view.d.ts +319 -1
  44. package/dist/view.d.ts.map +1 -1
  45. package/dist/view.js +1371 -92
  46. package/dist/view.js.map +1 -1
  47. package/dist/workspace.d.ts +14 -0
  48. package/dist/workspace.d.ts.map +1 -1
  49. package/dist/workspace.js +53 -41
  50. package/dist/workspace.js.map +1 -1
  51. package/package.json +9 -5
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mdz-archive.worker.js","sourceRoot":"","sources":["../src/mdz-archive.worker.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,5 @@
1
+ import { type Token, type TokensList } from 'marked';
2
+ export type { Token, TokensList };
1
3
  import type { MdzManifest } from '@mdzip/core-js';
2
4
  import type { MdzipPathType, MdzipSourceFormat, MdzipWorkspaceMode, MdzipWorkspaceSnapshot } from './workspace.js';
3
5
  /**
@@ -170,6 +172,8 @@ export declare class MdzipRenderingService {
170
172
  private readonly renderer;
171
173
  private readonly extensions;
172
174
  constructor(renderer?: MdzipMarkdownRenderer, extensions?: readonly MdzipMarkdownRenderExtension[]);
175
+ /** Whether {@link tokenizeMarkdown}/{@link renderChunk} are usable — only with the default marked-based renderer. */
176
+ get supportsChunking(): boolean;
173
177
  /**
174
178
  * Legacy synchronous render. Behavior is unchanged: the configured
175
179
  * renderer's output is returned as-is (the default renderer sanitizes
@@ -189,5 +193,45 @@ export declare class MdzipRenderingService {
189
193
  * extension is registered.
190
194
  */
191
195
  renderMarkdown(markdown: string, context: MdzipMarkdownRenderContext): string | Promise<string>;
196
+ /**
197
+ * Lexes markdown into top-level block tokens without rendering or
198
+ * sanitizing anything, for callers that want to render/mount the result
199
+ * incrementally (see {@link renderChunk}) instead of all at once. Runs
200
+ * `transformMarkdown` extensions first, same as {@link renderMarkdown} —
201
+ * they still see the whole markdown string once; chunking is a
202
+ * post-transform concern.
203
+ *
204
+ * Only supported with {@link defaultSafeMarkdownRenderer}: a host-supplied
205
+ * custom renderer takes a markdown string and returns opaque HTML with no
206
+ * token structure to chunk by.
207
+ */
208
+ tokenizeMarkdown(markdown: string, context: MdzipMarkdownRenderContext): TokensList | Promise<TokensList>;
209
+ /**
210
+ * Renders a subset of tokens from {@link tokenizeMarkdown} through
211
+ * `transformHtml*` and sanitize — the back half of the pipeline documented
212
+ * on {@link MdzipMarkdownRenderExtension}, starting from tokens instead of
213
+ * a markdown string. Always sanitizes (unlike {@link renderMarkdown}, which
214
+ * can skip its pipeline pass when the renderer already sanitized
215
+ * internally): this deliberately calls the underlying `marked` parser
216
+ * directly rather than `defaultSafeMarkdownRenderer.render()`, so that
217
+ * internal sanitize pass never runs and this is the only one that will.
218
+ */
219
+ renderChunk(tokens: readonly Token[], context: MdzipMarkdownRenderContext): string | Promise<string>;
220
+ }
221
+ export interface MdzipChunkOptions {
222
+ /** Max tokens per chunk, whichever of this or `charBudget` is hit first. Default 40. */
223
+ tokenCap?: number;
224
+ /** Approximate max raw markdown chars per chunk (via each token's `.raw.length`). Default 2000. */
225
+ charBudget?: number;
192
226
  }
227
+ /**
228
+ * Groups top-level block tokens from {@link MdzipRenderingService.tokenizeMarkdown}
229
+ * into chunks suitable for incremental rendering — a token-count cap and a
230
+ * char-budget estimate, whichever is hit first, so a document made of many
231
+ * tiny tokens (e.g. a chat export's one-line-paragraph-per-message shape)
232
+ * doesn't end up with one chunk per token. A single token larger than the
233
+ * budget still gets its own chunk on its own (a chunk boundary can never
234
+ * split a token).
235
+ */
236
+ export declare function groupTokensIntoChunks(tokens: readonly Token[], options?: MdzipChunkOptions): Token[][];
193
237
  //# sourceMappingURL=rendering.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"rendering.d.ts","sourceRoot":"","sources":["../src/rendering.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rendering.d.ts","sourceRoot":"","sources":["../src/rendering.ts"],"names":[],"mappings":"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"}
package/dist/rendering.js CHANGED
@@ -142,6 +142,10 @@ export class MdzipRenderingService {
142
142
  this.renderer = renderer;
143
143
  this.extensions = extensions;
144
144
  }
145
+ /** Whether {@link tokenizeMarkdown}/{@link renderChunk} are usable — only with the default marked-based renderer. */
146
+ get supportsChunking() {
147
+ return this.renderer === defaultSafeMarkdownRenderer;
148
+ }
145
149
  /**
146
150
  * Legacy synchronous render. Behavior is unchanged: the configured
147
151
  * renderer's output is returned as-is (the default renderer sanitizes
@@ -197,6 +201,94 @@ export class MdzipRenderingService {
197
201
  }
198
202
  return value;
199
203
  }
204
+ /**
205
+ * Lexes markdown into top-level block tokens without rendering or
206
+ * sanitizing anything, for callers that want to render/mount the result
207
+ * incrementally (see {@link renderChunk}) instead of all at once. Runs
208
+ * `transformMarkdown` extensions first, same as {@link renderMarkdown} —
209
+ * they still see the whole markdown string once; chunking is a
210
+ * post-transform concern.
211
+ *
212
+ * Only supported with {@link defaultSafeMarkdownRenderer}: a host-supplied
213
+ * custom renderer takes a markdown string and returns opaque HTML with no
214
+ * token structure to chunk by.
215
+ */
216
+ tokenizeMarkdown(markdown, context) {
217
+ if (this.renderer !== defaultSafeMarkdownRenderer) {
218
+ throw new Error('tokenizeMarkdown() only supports the default marked-based renderer; a custom renderer has no token structure to chunk by.');
219
+ }
220
+ let value = markdown;
221
+ for (const ext of this.extensions) {
222
+ if (ext.transformMarkdown) {
223
+ value = chainRenderStage(value, (md) => ext.transformMarkdown(md, context), context.signal);
224
+ }
225
+ }
226
+ if (isThenable(value)) {
227
+ return Promise.resolve(value).then((resolved) => {
228
+ if (context.signal.aborted) {
229
+ throw createAbortError();
230
+ }
231
+ return marked.lexer(resolved);
232
+ });
233
+ }
234
+ return marked.lexer(value);
235
+ }
236
+ /**
237
+ * Renders a subset of tokens from {@link tokenizeMarkdown} through
238
+ * `transformHtml*` and sanitize — the back half of the pipeline documented
239
+ * on {@link MdzipMarkdownRenderExtension}, starting from tokens instead of
240
+ * a markdown string. Always sanitizes (unlike {@link renderMarkdown}, which
241
+ * can skip its pipeline pass when the renderer already sanitized
242
+ * internally): this deliberately calls the underlying `marked` parser
243
+ * directly rather than `defaultSafeMarkdownRenderer.render()`, so that
244
+ * internal sanitize pass never runs and this is the only one that will.
245
+ */
246
+ renderChunk(tokens, context) {
247
+ if (this.renderer !== defaultSafeMarkdownRenderer) {
248
+ throw new Error('renderChunk() only supports the default marked-based renderer; a custom renderer has no token structure to render from.');
249
+ }
250
+ let value = marked.parser(tokens);
251
+ for (const ext of this.extensions) {
252
+ if (ext.transformHtml) {
253
+ value = chainRenderStage(value, (html) => ext.transformHtml(html, context), context.signal);
254
+ }
255
+ }
256
+ const contributions = this.extensions
257
+ .map((ext) => ext.sanitize)
258
+ .filter((contribution) => contribution !== undefined);
259
+ return chainRenderStage(value, (html) => sanitizeMdzipHtml(html, contributions), context.signal);
260
+ }
261
+ }
262
+ const DEFAULT_CHUNK_TOKEN_CAP = 40;
263
+ const DEFAULT_CHUNK_CHAR_BUDGET = 2000;
264
+ /**
265
+ * Groups top-level block tokens from {@link MdzipRenderingService.tokenizeMarkdown}
266
+ * into chunks suitable for incremental rendering — a token-count cap and a
267
+ * char-budget estimate, whichever is hit first, so a document made of many
268
+ * tiny tokens (e.g. a chat export's one-line-paragraph-per-message shape)
269
+ * doesn't end up with one chunk per token. A single token larger than the
270
+ * budget still gets its own chunk on its own (a chunk boundary can never
271
+ * split a token).
272
+ */
273
+ export function groupTokensIntoChunks(tokens, options = {}) {
274
+ const tokenCap = options.tokenCap ?? DEFAULT_CHUNK_TOKEN_CAP;
275
+ const charBudget = options.charBudget ?? DEFAULT_CHUNK_CHAR_BUDGET;
276
+ const chunks = [];
277
+ let current = [];
278
+ let currentChars = 0;
279
+ for (const token of tokens) {
280
+ current.push(token);
281
+ currentChars += token.raw?.length ?? 0;
282
+ if (current.length >= tokenCap || currentChars >= charBudget) {
283
+ chunks.push(current);
284
+ current = [];
285
+ currentChars = 0;
286
+ }
287
+ }
288
+ if (current.length > 0) {
289
+ chunks.push(current);
290
+ }
291
+ return chunks;
200
292
  }
201
293
  function rewriteAssetSources(markdown, resolver) {
202
294
  return markdown.replace(/!\[([^\]]*)\]\(([^)\s]+)(?:\s+"([^"]*)")?\)/g, (match, alt, rawPath, title) => {
@@ -1 +1 @@
1
- {"version":3,"file":"rendering.js","sourceRoot":"","sources":["../src/rendering.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,WAAW,CAAC;AAClC,OAAO,IAAI,MAAM,cAAc,CAAC;AAChC,OAAO,EAAE,MAAM,EAAe,MAAM,QAAQ,CAAC;AAS7C,0EAA0E;AAC1E,8EAA8E;AAC9E,2DAA2D;AAC3D,IAAI,QAAQ,GAA4B,IAAI,CAAC;AAE7C,SAAS,eAAe;IACtB,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,IAAI,OAAO,SAAS,CAAC,QAAQ,KAAK,UAAU,EAAE,CAAC;QAC7C,QAAQ,GAAG,SAAS,CAAC;QACrB,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,MAAM,YAAY,GAAI,UAAmC,CAAC,MAAM,CAAC;IACjE,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CACb,qIAAqI,CACtI,CAAC;IACJ,CAAC;IACD,QAAQ,GAAG,SAAS,CAAC,YAA0C,CAAC,CAAC;IACjE,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,gBAAgB,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;AACnH,MAAM,gBAAgB,GAAG,CAAC,OAAO,CAAC,CAAC;AA+BnC,SAAS,KAAK,CAAC,KAAa;IAC1B,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC;AAC7B,CAAC;AAED,SAAS,oBAAoB,CAAC,aAAmD;IAC/E,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;IAC7E,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,YAAY,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAClG,MAAM,OAAO,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,YAAY,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC3G,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,YAAY,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;IAClH,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,YAAY,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;IAClH,OAAO;QACL,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE;QACrF,QAAQ,EAAE,OAAO;QACjB,QAAQ,EAAE,OAAO;QACjB,WAAW,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACrE,WAAW,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACvE,eAAe,EAAE,KAAK;KACvB,CAAC;AACJ,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,iBAAiB,CAC/B,IAAY,EACZ,gBAAsD,EAAE;IAExD,OAAO,eAAe,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,oBAAoB,CAAC,aAAa,CAAC,CAAC,CAAC;AAC/E,CAAC;AAuID,6EAA6E;AAC7E,MAAM,UAAU,gBAAgB,CAAC,GAAG,KAAe;IACjD,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IAChE,OAAO,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;AACtD,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,qBAAqB,CAAC,GAAG,UAAoB;IAC3D,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;IAC9F,OAAO,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE;QAClB,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACjC,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;IACnD,CAAC,CAAC;AACJ,CAAC;AAeD,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC;IACxB,QAAQ,EAAE;QACR,IAAI,CAAC,KAAsC;YACzC,MAAM,iBAAiB,GAAG,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC;YAC3C,MAAM,QAAQ,GAAG,iBAAiB,KAAK,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,iBAAiB,CAAC;YAC1E,IAAI,QAAQ,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC3C,IAAI,CAAC;oBACH,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE;wBAC7C,QAAQ;wBACR,cAAc,EAAE,IAAI;qBACrB,CAAC,CAAC,KAAK,CAAC;oBACT,OAAO,mCAAmC,UAAU,CAAC,iBAAiB,CAAC,KAAK,WAAW,eAAe,CAAC;gBACzG,CAAC;gBAAC,MAAM,CAAC;oBACP,sCAAsC;gBACxC,CAAC;YACH,CAAC;YACD,mEAAmE;YACnE,oEAAoE;YACpE,+DAA+D;YAC/D,MAAM,SAAS,GAAG,iBAAiB,CAAC,CAAC,CAAC,oBAAoB,UAAU,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YAChG,OAAO,aAAa,SAAS,IAAI,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC;QACzE,CAAC;QACD,KAAK,CAAC,KAAmB;YACvB,MAAM,UAAU,GAAG,CAAC,IAAsB,EAAU,EAAE;gBACpD,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;gBACtC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,WAAW,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;gBACzD,OAAO,IAAI,GAAG,GAAG,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;YAC9E,CAAC,CAAC;YACF,MAAM,SAAS,GAAG,CAAC,KAAyB,EAAU,EAAE,CACtD,SAAS,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC;YACnD,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACvC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM;gBAC5B,CAAC,CAAC,YAAY,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,YAAY;gBAC5D,CAAC,CAAC,EAAE,CAAC;YACP,OAAO,qDAAqD,MAAM,aAAa,IAAI,kBAAkB,CAAC;QACxG,CAAC;KACF;CACF,CAAC,CAAC;AAEH,SAAS,gCAAgC,CAAC,QAAgB;IACxD,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;IAC1D,OAAO,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AACxE,CAAC;AAED,MAAM,CAAC,MAAM,2BAA2B,GAA0B;IAChE,eAAe,EAAE,IAAI;IACrB,MAAM,CAAC,QAAgB;QACrB,OAAO,iBAAiB,CAAC,gCAAgC,CAAC,QAAQ,CAAC,CAAC,CAAC;IACvE,CAAC;CACF,CAAC;AAEF,SAAS,UAAU,CAAC,KAAc;IAChC,OAAO,OAAQ,KAA+C,EAAE,IAAI,KAAK,UAAU,CAAC;AACtF,CAAC;AAED,SAAS,gBAAgB;IACvB,OAAO,IAAI,YAAY,CAAC,kCAAkC,EAAE,YAAY,CAAC,CAAC;AAC5E,CAAC;AAED;;;;GAIG;AACH,SAAS,gBAAgB,CACvB,KAA+B,EAC/B,KAAkD,EAClD,MAAoB;IAEpB,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE;YAC9C,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;gBACpB,MAAM,gBAAgB,EAAE,CAAC;YAC3B,CAAC;YACD,OAAO,KAAK,CAAC,QAAQ,CAAC,CAAC;QACzB,CAAC,CAAC,CAAC;IACL,CAAC;IACD,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC;AACtB,CAAC;AAED,MAAM,OAAO,qBAAqB;IAChC,YACmB,WAAkC,2BAA2B,EAC7D,aAAsD,EAAE;QADxD,aAAQ,GAAR,QAAQ,CAAqD;QAC7D,eAAU,GAAV,UAAU,CAA8C;IACxE,CAAC;IAEJ;;;;OAIG;IACI,MAAM,CAAC,OAA2B;QACvC,MAAM,QAAQ,GAAG,OAAO,CAAC,aAAa;YACpC,CAAC,CAAC,mBAAmB,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,aAAa,CAAC;YAC9D,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;QACrB,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC5C,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CACb,qGAAqG,CACtG,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,CAAC;IAClB,CAAC;IAED;;;;;;;;;;;OAWG;IACI,cAAc,CACnB,QAAgB,EAChB,OAAmC;QAEnC,MAAM,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAC1E,IAAI,KAAK,GAA6B,QAAQ,CAAC;QAE/C,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YAClC,IAAI,GAAG,CAAC,iBAAiB,EAAE,CAAC;gBAC1B,KAAK,GAAG,gBAAgB,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,iBAAkB,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;YAC/F,CAAC;QACH,CAAC;QAED,KAAK,GAAG,gBAAgB,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE;YACrC,IAAI,IAAI,CAAC,QAAQ,KAAK,2BAA2B,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC/E,iEAAiE;gBACjE,wCAAwC;gBACxC,OAAO,gCAAgC,CAAC,EAAE,CAAC,CAAC;YAC9C,CAAC;YACD,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QAC3C,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QAEnB,KAAK,MAAM,GAAG,IAAI,cAAc,EAAE,CAAC;YACjC,KAAK,GAAG,gBAAgB,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,aAAc,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QAC/F,CAAC;QAED,MAAM,YAAY,GAAG,cAAc,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,eAAe,KAAK,IAAI,CAAC;QAC3F,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,MAAM,aAAa,GAAG,IAAI,CAAC,UAAU;iBAClC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC;iBAC1B,MAAM,CAAC,CAAC,YAAY,EAA6C,EAAE,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC;YACnG,KAAK,GAAG,gBAAgB,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,EAAE,aAAa,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QACpG,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;CACF;AAED,SAAS,mBAAmB,CAAC,QAAgB,EAAE,QAA+B;IAC5E,OAAO,QAAQ,CAAC,OAAO,CACrB,8CAA8C,EAC9C,CAAC,KAAK,EAAE,GAAW,EAAE,OAAe,EAAE,KAAc,EAAE,EAAE;QACtD,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QAC3C,MAAM,QAAQ,GAAG,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QAChD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,KAAK,CAAC;QACf,CAAC;QACD,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAClE,OAAO,KAAK,GAAG,KAAK,QAAQ,GAAG,MAAM,GAAG,CAAC;IAC3C,CAAC,CACF,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,KAAa;IAC/B,OAAO,KAAK;SACT,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC;SACvB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC7B,CAAC"}
1
+ {"version":3,"file":"rendering.js","sourceRoot":"","sources":["../src/rendering.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /** Word, character, line, and reading-time stats for a document's raw text. */
2
+ export interface MdzipDocumentStats {
3
+ words: number;
4
+ characters: number;
5
+ charactersNoSpaces: number;
6
+ lines: number;
7
+ readingTimeMinutes: number;
8
+ }
9
+ /** Default reading speed used for `readingTimeMinutes`, in words per minute. */
10
+ export declare const MDZIP_DEFAULT_READING_WORDS_PER_MINUTE = 200;
11
+ /** Count words in text, splitting on runs of whitespace. */
12
+ export declare function countWords(text: string): number;
13
+ /** Count lines in text, matching how the editor's own gutter numbers lines
14
+ * (an empty document is one empty line, not zero). */
15
+ export declare function countLines(text: string): number;
16
+ /** Count non-whitespace characters in text. */
17
+ export declare function countCharactersExcludingWhitespace(text: string): number;
18
+ /**
19
+ * Compute live document stats from raw text (e.g. `MdzipWorkspaceSnapshot.currentText`).
20
+ * Operates on the raw markdown source, not rendered/plain text.
21
+ */
22
+ export declare function computeDocumentStats(text: string, wordsPerMinute?: number): MdzipDocumentStats;
23
+ //# sourceMappingURL=stats.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../src/stats.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAED,gFAAgF;AAChF,eAAO,MAAM,sCAAsC,MAAM,CAAC;AAE1D,4DAA4D;AAC5D,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAG/C;AAED;sDACsD;AACtD,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED,+CAA+C;AAC/C,wBAAgB,kCAAkC,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEvE;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,EACZ,cAAc,GAAE,MAA+C,GAC9D,kBAAkB,CASpB"}
package/dist/stats.js ADDED
@@ -0,0 +1,31 @@
1
+ /** Default reading speed used for `readingTimeMinutes`, in words per minute. */
2
+ export const MDZIP_DEFAULT_READING_WORDS_PER_MINUTE = 200;
3
+ /** Count words in text, splitting on runs of whitespace. */
4
+ export function countWords(text) {
5
+ const trimmed = text.trim();
6
+ return trimmed === '' ? 0 : trimmed.split(/\s+/).length;
7
+ }
8
+ /** Count lines in text, matching how the editor's own gutter numbers lines
9
+ * (an empty document is one empty line, not zero). */
10
+ export function countLines(text) {
11
+ return text === '' ? 1 : text.split('\n').length;
12
+ }
13
+ /** Count non-whitespace characters in text. */
14
+ export function countCharactersExcludingWhitespace(text) {
15
+ return text.replace(/\s/g, '').length;
16
+ }
17
+ /**
18
+ * Compute live document stats from raw text (e.g. `MdzipWorkspaceSnapshot.currentText`).
19
+ * Operates on the raw markdown source, not rendered/plain text.
20
+ */
21
+ export function computeDocumentStats(text, wordsPerMinute = MDZIP_DEFAULT_READING_WORDS_PER_MINUTE) {
22
+ const words = countWords(text);
23
+ return {
24
+ words,
25
+ characters: text.length,
26
+ charactersNoSpaces: countCharactersExcludingWhitespace(text),
27
+ lines: countLines(text),
28
+ readingTimeMinutes: words === 0 ? 0 : Math.max(1, Math.round(words / wordsPerMinute))
29
+ };
30
+ }
31
+ //# sourceMappingURL=stats.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stats.js","sourceRoot":"","sources":["../src/stats.ts"],"names":[],"mappings":"AASA,gFAAgF;AAChF,MAAM,CAAC,MAAM,sCAAsC,GAAG,GAAG,CAAC;AAE1D,4DAA4D;AAC5D,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAC5B,OAAO,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC;AAC1D,CAAC;AAED;sDACsD;AACtD,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,OAAO,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;AACnD,CAAC;AAED,+CAA+C;AAC/C,MAAM,UAAU,kCAAkC,CAAC,IAAY;IAC7D,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC;AACxC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAClC,IAAY,EACZ,iBAAyB,sCAAsC;IAE/D,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAC/B,OAAO;QACL,KAAK;QACL,UAAU,EAAE,IAAI,CAAC,MAAM;QACvB,kBAAkB,EAAE,kCAAkC,CAAC,IAAI,CAAC;QAC5D,KAAK,EAAE,UAAU,CAAC,IAAI,CAAC;QACvB,kBAAkB,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,cAAc,CAAC,CAAC;KACtF,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"view-css.d.ts","sourceRoot":"","sources":["../src/view-css.ts"],"names":[],"mappings":"AAeA,eAAO,MAAM,aAAa,QAk9DzB,CAAC"}
1
+ {"version":3,"file":"view-css.d.ts","sourceRoot":"","sources":["../src/view-css.ts"],"names":[],"mappings":"AAeA,eAAO,MAAM,aAAa,QA+/DzB,CAAC"}
package/dist/view-css.js CHANGED
@@ -849,6 +849,24 @@ export const WORKSPACE_CSS = `
849
849
  pointer-events: none;
850
850
  }
851
851
 
852
+ .mdzip-root .mdzip-copy-toast {
853
+ position: fixed;
854
+ z-index: 10000;
855
+ left: 50%;
856
+ bottom: 20px;
857
+ transform: translateX(-50%);
858
+ max-width: min(320px, calc(100vw - 32px));
859
+ padding: 8px 14px;
860
+ border-radius: 6px;
861
+ background: var(--mdzip-editor-foreground-color);
862
+ color: var(--mdzip-editor-background-color);
863
+ box-shadow: 0 8px 24px rgba(0, 0, 0, 0.22);
864
+ font-size: 12px;
865
+ line-height: 1.35;
866
+ text-align: center;
867
+ pointer-events: none;
868
+ }
869
+
852
870
  .mdzip-root .pane-stack {
853
871
  display: block;
854
872
  flex: 1;
@@ -1106,6 +1124,20 @@ export const WORKSPACE_CSS = `
1106
1124
  margin-top: 0;
1107
1125
  }
1108
1126
 
1127
+ /* Chunked (progressiveTextRendering) mounting wraps each rendered chunk in
1128
+ a mount boundary. display:contents drops it from the box tree so margin
1129
+ collapsing and other layout behave exactly as the non-chunked path (one
1130
+ flat run of blocks) — but :first-child selector matching still follows
1131
+ the real DOM tree regardless of display, so the rule above needs a
1132
+ companion for the now one-level-deeper first real content element. */
1133
+ .mdzip-root .preview-content > .mdzip-chunk {
1134
+ display: contents;
1135
+ }
1136
+
1137
+ .mdzip-root .preview-content > .mdzip-chunk:first-child > :first-child {
1138
+ margin-top: 0;
1139
+ }
1140
+
1109
1141
  .mdzip-root .preview-content h2 {
1110
1142
  font-size: 1.5em;
1111
1143
  border-bottom: 1px solid var(--mdzip-border-color);
@@ -1711,6 +1743,19 @@ export const WORKSPACE_CSS = `
1711
1743
  margin-top: 8px;
1712
1744
  }
1713
1745
 
1746
+ .mdzip-root .copy-render-progress-track {
1747
+ height: 6px;
1748
+ border-radius: 3px;
1749
+ background: var(--mdzip-secondary-background-color);
1750
+ overflow: hidden;
1751
+ }
1752
+
1753
+ .mdzip-root .copy-render-progress-bar {
1754
+ height: 100%;
1755
+ background: var(--mdzip-accent-color);
1756
+ transition: width 0.1s linear;
1757
+ }
1758
+
1714
1759
  .mdzip-root .metadata-dialog dl {
1715
1760
  margin: 12px 0 0;
1716
1761
  }
@@ -1 +1 @@
1
- {"version":3,"file":"view-css.js","sourceRoot":"","sources":["../src/view-css.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,mBAAmB,EACpB,MAAM,YAAY,CAAC;AAEpB,MAAM,wBAAwB,GAAG,qBAAqB,CAAC,UAAU,CAC/D,UAAU,EACV,kBAAkB,CACnB,CAAC;AACF,MAAM,uBAAuB,GAAG,oBAAoB,CAAC,UAAU,CAC7D,UAAU,EACV,kBAAkB,CACnB,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG;;;;;;;;;;IAUzB,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA4DnB,wBAAwB;;;;;IAKxB,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAu4D1B,CAAC"}
1
+ {"version":3,"file":"view-css.js","sourceRoot":"","sources":["../src/view-css.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,mBAAmB,EACpB,MAAM,YAAY,CAAC;AAEpB,MAAM,wBAAwB,GAAG,qBAAqB,CAAC,UAAU,CAC/D,UAAU,EACV,kBAAkB,CACnB,CAAC;AACF,MAAM,uBAAuB,GAAG,oBAAoB,CAAC,UAAU,CAC7D,UAAU,EACV,kBAAkB,CACnB,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG;;;;;;;;;;IAUzB,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA4DnB,wBAAwB;;;;;IAKxB,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAo7D1B,CAAC"}