quikdown 1.1.1 → 1.2.3

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 (72) hide show
  1. package/README.md +39 -7
  2. package/dist/quikdown.cjs +23 -10
  3. package/dist/quikdown.dark.css +1 -1
  4. package/dist/quikdown.esm.js +23 -10
  5. package/dist/quikdown.esm.min.js +2 -2
  6. package/dist/quikdown.esm.min.js.gz +0 -0
  7. package/dist/quikdown.esm.min.js.map +1 -1
  8. package/dist/quikdown.light.css +1 -1
  9. package/dist/quikdown.umd.js +23 -10
  10. package/dist/quikdown.umd.min.js +2 -2
  11. package/dist/quikdown.umd.min.js.gz +0 -0
  12. package/dist/quikdown.umd.min.js.map +1 -1
  13. package/dist/quikdown_ast.cjs +513 -0
  14. package/dist/quikdown_ast.d.ts +227 -0
  15. package/dist/quikdown_ast.esm.js +511 -0
  16. package/dist/quikdown_ast.esm.min.js +8 -0
  17. package/dist/quikdown_ast.esm.min.js.gz +0 -0
  18. package/dist/quikdown_ast.esm.min.js.map +1 -0
  19. package/dist/quikdown_ast.umd.js +519 -0
  20. package/dist/quikdown_ast.umd.min.js +8 -0
  21. package/dist/quikdown_ast.umd.min.js.gz +0 -0
  22. package/dist/quikdown_ast.umd.min.js.map +1 -0
  23. package/dist/quikdown_ast_html.cjs +1058 -0
  24. package/dist/quikdown_ast_html.d.ts +68 -0
  25. package/dist/quikdown_ast_html.esm.js +1056 -0
  26. package/dist/quikdown_ast_html.esm.min.js +8 -0
  27. package/dist/quikdown_ast_html.esm.min.js.gz +0 -0
  28. package/dist/quikdown_ast_html.esm.min.js.map +1 -0
  29. package/dist/quikdown_ast_html.umd.js +1064 -0
  30. package/dist/quikdown_ast_html.umd.min.js +8 -0
  31. package/dist/quikdown_ast_html.umd.min.js.gz +0 -0
  32. package/dist/quikdown_ast_html.umd.min.js.map +1 -0
  33. package/dist/quikdown_bd.cjs +38 -19
  34. package/dist/quikdown_bd.esm.js +38 -19
  35. package/dist/quikdown_bd.esm.min.js +2 -2
  36. package/dist/quikdown_bd.esm.min.js.gz +0 -0
  37. package/dist/quikdown_bd.esm.min.js.map +1 -1
  38. package/dist/quikdown_bd.umd.js +38 -19
  39. package/dist/quikdown_bd.umd.min.js +2 -2
  40. package/dist/quikdown_bd.umd.min.js.gz +0 -0
  41. package/dist/quikdown_bd.umd.min.js.map +1 -1
  42. package/dist/quikdown_edit.cjs +836 -117
  43. package/dist/quikdown_edit.d.ts +123 -131
  44. package/dist/quikdown_edit.esm.js +836 -117
  45. package/dist/quikdown_edit.esm.min.js +3 -3
  46. package/dist/quikdown_edit.esm.min.js.gz +0 -0
  47. package/dist/quikdown_edit.esm.min.js.map +1 -1
  48. package/dist/quikdown_edit.umd.js +836 -117
  49. package/dist/quikdown_edit.umd.min.js +3 -3
  50. package/dist/quikdown_edit.umd.min.js.gz +0 -0
  51. package/dist/quikdown_edit.umd.min.js.map +1 -1
  52. package/dist/quikdown_json.cjs +556 -0
  53. package/dist/quikdown_json.d.ts +48 -0
  54. package/dist/quikdown_json.esm.js +554 -0
  55. package/dist/quikdown_json.esm.min.js +8 -0
  56. package/dist/quikdown_json.esm.min.js.gz +0 -0
  57. package/dist/quikdown_json.esm.min.js.map +1 -0
  58. package/dist/quikdown_json.umd.js +562 -0
  59. package/dist/quikdown_json.umd.min.js +8 -0
  60. package/dist/quikdown_json.umd.min.js.gz +0 -0
  61. package/dist/quikdown_json.umd.min.js.map +1 -0
  62. package/dist/quikdown_yaml.cjs +717 -0
  63. package/dist/quikdown_yaml.d.ts +51 -0
  64. package/dist/quikdown_yaml.esm.js +715 -0
  65. package/dist/quikdown_yaml.esm.min.js +8 -0
  66. package/dist/quikdown_yaml.esm.min.js.gz +0 -0
  67. package/dist/quikdown_yaml.esm.min.js.map +1 -0
  68. package/dist/quikdown_yaml.umd.js +723 -0
  69. package/dist/quikdown_yaml.umd.min.js +8 -0
  70. package/dist/quikdown_yaml.umd.min.js.gz +0 -0
  71. package/dist/quikdown_yaml.umd.min.js.map +1 -0
  72. package/package.json +100 -45
@@ -8,188 +8,180 @@ declare module 'quikdown/edit' {
8
8
  * Options for configuring the QuikdownEditor
9
9
  */
10
10
  export interface QuikdownEditorOptions {
11
- /**
12
- * Initial view mode
13
- * @default 'split'
14
- */
11
+ /** Initial view mode @default 'split' */
15
12
  mode?: 'source' | 'split' | 'preview';
16
-
17
- /**
18
- * Theme setting
19
- * @default 'auto'
20
- */
13
+ /** Theme setting @default 'auto' */
21
14
  theme?: 'light' | 'dark' | 'auto';
22
-
23
- /**
24
- * Show/hide the toolbar
25
- * @default true
26
- */
15
+ /** Show/hide the toolbar @default true */
27
16
  showToolbar?: boolean;
28
-
29
- /**
30
- * Enable lazy linefeeds (single \n becomes <br>)
31
- * @default false
32
- */
17
+ /** Show "Remove HR" toolbar button @default false */
18
+ showRemoveHR?: boolean;
19
+ /** Show "Fix Linefeeds" toolbar button @default false */
20
+ showLazyLinefeeds?: boolean;
21
+ /** Show undo/redo toolbar buttons @default false */
22
+ showUndoRedo?: boolean;
23
+ /** Enable lazy linefeeds (single \n becomes <br>) @default false */
33
24
  lazy_linefeeds?: boolean;
34
-
35
- /**
36
- * Debounce delay for updates in milliseconds
37
- * @default 100
38
- */
25
+ /** Use inline styles instead of CSS classes @default false */
26
+ inline_styles?: boolean;
27
+ /** Debounce delay for updates in ms @default 20 */
39
28
  debounceDelay?: number;
40
-
41
- /**
42
- * Placeholder text for empty editor
43
- * @default 'Start typing markdown...'
44
- */
29
+ /** Placeholder text for empty editor */
45
30
  placeholder?: string;
46
-
47
- /**
48
- * Initial markdown content
49
- */
31
+ /** Initial markdown content */
50
32
  initialContent?: string;
51
-
52
- /**
53
- * Plugin configuration
54
- */
33
+ /** Maximum number of undo states to keep @default 100 */
34
+ undoStackSize?: number;
35
+ /** Enable complex fences (CSV, math, SVG, etc.) @default true */
36
+ enableComplexFences?: boolean;
37
+ /** Plugin configuration (legacy — prefer preloadFences) */
55
38
  plugins?: {
56
39
  /** Enable Highlight.js for syntax highlighting */
57
40
  highlightjs?: boolean;
58
41
  /** Enable Mermaid for diagrams */
59
42
  mermaid?: boolean;
60
43
  };
61
-
62
44
  /**
63
- * Custom fence handlers
64
- * Maps language identifiers to render functions
65
- */
45
+ * Preload fence-rendering libraries at construction time so the first
46
+ * encounter with a fence type renders instantly (no lazy-load delay).
47
+ *
48
+ * - `'all'` — preload every known library
49
+ * - `['highlightjs', 'mermaid', 'math', 'geojson', 'stl']` — specific list
50
+ * - `[{ name, script, css? }]` — custom library URL
51
+ * - `null` (default) — lazy-load on demand
52
+ *
53
+ * Trade-off: preloading uses more upfront network but eliminates the
54
+ * "loading..." flicker on first render of each fence type. Developer's
55
+ * choice — the editor itself stays ~70 KB minified either way.
56
+ */
57
+ preloadFences?: 'all' | Array<string | { name?: string; script: string; css?: string }> | null;
58
+ /** Custom fence handlers keyed by language */
66
59
  customFences?: {
67
60
  [language: string]: (code: string, lang: string) => string;
68
61
  };
69
-
70
- /**
71
- * Callback fired when content changes
72
- * @param markdown - Current markdown content
73
- * @param html - Rendered HTML
74
- */
62
+ /** Callback fired when content changes */
75
63
  onChange?: (markdown: string, html: string) => void;
76
-
77
- /**
78
- * Callback fired when view mode changes
79
- * @param mode - New view mode
80
- */
64
+ /** Callback fired when view mode changes */
81
65
  onModeChange?: (mode: 'source' | 'split' | 'preview') => void;
82
66
  }
83
67
 
84
68
  /**
85
69
  * QuikdownEditor class - Drop-in markdown editor control
70
+ *
71
+ * @example
72
+ * ```typescript
73
+ * import QuikdownEditor from 'quikdown/edit';
74
+ *
75
+ * const editor = new QuikdownEditor('#editor', {
76
+ * mode: 'split',
77
+ * showUndoRedo: true,
78
+ * showRemoveHR: true,
79
+ * onChange: (md, html) => console.log('Changed:', md.length)
80
+ * });
81
+ *
82
+ * editor.setMarkdown('# Hello\n\nWorld');
83
+ * editor.undo();
84
+ * editor.redo();
85
+ * ```
86
86
  */
87
87
  export class QuikdownEditor {
88
- /**
89
- * Create a new QuikdownEditor instance
90
- * @param container - DOM element or CSS selector for the container
91
- * @param options - Editor configuration options
92
- */
93
88
  constructor(container: HTMLElement | string, options?: QuikdownEditorOptions);
94
-
95
- /**
96
- * Get current markdown content
97
- */
89
+
90
+ // --- Properties ---
98
91
  get markdown(): string;
99
-
100
- /**
101
- * Set markdown content
102
- */
103
92
  set markdown(value: string);
104
-
105
- /**
106
- * Get rendered HTML (read-only)
107
- */
108
93
  get html(): string;
109
-
110
- /**
111
- * Get current view mode (read-only)
112
- */
113
94
  get mode(): 'source' | 'split' | 'preview';
114
-
115
- /**
116
- * Set markdown content
117
- * @param markdown - Markdown text to set
118
- */
119
- setMarkdown(markdown: string): void;
120
-
121
- /**
122
- * Get current markdown content
123
- * @returns Current markdown text
124
- */
95
+
96
+ // --- Content ---
97
+ setMarkdown(markdown: string): Promise<void>;
125
98
  getMarkdown(): string;
126
-
127
- /**
128
- * Get rendered HTML
129
- * @returns Rendered HTML
130
- */
131
99
  getHTML(): string;
132
-
133
- /**
134
- * Change view mode
135
- * @param mode - New view mode
136
- */
100
+
101
+ // --- View ---
137
102
  setMode(mode: 'source' | 'split' | 'preview'): void;
138
-
139
- /**
140
- * Enable/disable lazy linefeeds
141
- * @param enabled - Whether to enable lazy linefeeds
142
- */
143
103
  setLazyLinefeeds(enabled: boolean): void;
144
-
145
- /**
146
- * Get lazy linefeeds setting
147
- * @returns Current lazy linefeeds setting
148
- */
149
104
  getLazyLinefeeds(): boolean;
150
-
151
- /**
152
- * Destroy the editor and clean up
153
- */
105
+ setDebounceDelay(delay: number): void;
106
+ getDebounceDelay(): number;
107
+ /** Change theme at runtime */
108
+ setTheme(theme: 'light' | 'dark' | 'auto'): void;
109
+ /** Get the currently configured theme */
110
+ getTheme(): 'light' | 'dark' | 'auto';
111
+
112
+ // --- Undo / Redo ---
113
+ /** Undo the last edit */
114
+ undo(): Promise<void>;
115
+ /** Redo the last undone edit */
116
+ redo(): Promise<void>;
117
+ /** Whether undo is available */
118
+ canUndo(): boolean;
119
+ /** Whether redo is available */
120
+ canRedo(): boolean;
121
+ /** Clear the undo/redo history */
122
+ clearHistory(): void;
123
+
124
+ // --- HR Removal ---
125
+ /** Remove all horizontal rules from the current markdown (fence/table-safe) */
126
+ removeHR(): Promise<void>;
127
+
128
+ // --- Lazy Linefeed Conversion ---
129
+ /** One-time transform: convert single newlines to paragraph breaks (idempotent) */
130
+ convertLazyLinefeeds(): Promise<void>;
131
+
132
+ // --- Static utilities (headless — no editor instance needed) ---
133
+ /** Remove HRs from markdown string (fence/table-safe) */
134
+ static removeHRFromMarkdown(markdown: string): string;
135
+ /** Convert lazy linefeeds in markdown string (idempotent) */
136
+ static convertLazyLinefeeds(markdown: string): string;
137
+
138
+ // --- Clipboard ---
139
+ copy(type: 'markdown' | 'html'): Promise<void>;
140
+ copyRendered(): Promise<void>;
141
+
142
+ // --- Plugin loading ---
143
+ loadScript(src: string): Promise<void>;
144
+ loadCSS(href: string): Promise<void>;
145
+
146
+ // --- Lifecycle ---
154
147
  destroy(): void;
155
148
  }
156
149
 
157
150
  export default QuikdownEditor;
158
151
  }
159
152
 
160
- // For direct import
153
+ // For direct import (non-module usage)
161
154
  declare class QuikdownEditor {
162
- constructor(container: HTMLElement | string, options?: QuikdownEditorOptions);
155
+ constructor(container: HTMLElement | string, options?: import('quikdown/edit').QuikdownEditorOptions);
163
156
  get markdown(): string;
164
157
  set markdown(value: string);
165
158
  get html(): string;
166
159
  get mode(): 'source' | 'split' | 'preview';
167
- setMarkdown(markdown: string): void;
160
+ setMarkdown(markdown: string): Promise<void>;
168
161
  getMarkdown(): string;
169
162
  getHTML(): string;
170
163
  setMode(mode: 'source' | 'split' | 'preview'): void;
171
164
  setLazyLinefeeds(enabled: boolean): void;
172
165
  getLazyLinefeeds(): boolean;
166
+ setDebounceDelay(delay: number): void;
167
+ getDebounceDelay(): number;
168
+ setTheme(theme: 'light' | 'dark' | 'auto'): void;
169
+ getTheme(): 'light' | 'dark' | 'auto';
170
+ undo(): Promise<void>;
171
+ redo(): Promise<void>;
172
+ canUndo(): boolean;
173
+ canRedo(): boolean;
174
+ clearHistory(): void;
175
+ removeHR(): Promise<void>;
176
+ convertLazyLinefeeds(): Promise<void>;
177
+ static removeHRFromMarkdown(markdown: string): string;
178
+ static convertLazyLinefeeds(markdown: string): string;
179
+ copy(type: 'markdown' | 'html'): Promise<void>;
180
+ copyRendered(): Promise<void>;
181
+ loadScript(src: string): Promise<void>;
182
+ loadCSS(href: string): Promise<void>;
173
183
  destroy(): void;
174
184
  }
175
185
 
176
- export interface QuikdownEditorOptions {
177
- mode?: 'source' | 'split' | 'preview';
178
- theme?: 'light' | 'dark' | 'auto';
179
- showToolbar?: boolean;
180
- lazy_linefeeds?: boolean;
181
- debounceDelay?: number;
182
- placeholder?: string;
183
- initialContent?: string;
184
- plugins?: {
185
- highlightjs?: boolean;
186
- mermaid?: boolean;
187
- };
188
- customFences?: {
189
- [language: string]: (code: string, lang: string) => string;
190
- };
191
- onChange?: (markdown: string, html: string) => void;
192
- onModeChange?: (mode: 'source' | 'split' | 'preview') => void;
193
- }
194
-
195
- export default QuikdownEditor;
186
+ export default QuikdownEditor;
187
+ export { QuikdownEditorOptions } from 'quikdown/edit';