quikdown 1.0.2 → 1.0.4

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.
@@ -0,0 +1,70 @@
1
+ /**
2
+ * quikdown - Lightweight Markdown Parser
3
+ * TypeScript definitions
4
+ */
5
+
6
+ declare module 'quikdown' {
7
+ /**
8
+ * Options for configuring the quikdown parser
9
+ */
10
+ export interface QuikdownOptions {
11
+ /**
12
+ * Custom renderer for fenced code blocks.
13
+ * Return undefined to use default rendering.
14
+ * @param content - The code block content (unescaped)
15
+ * @param language - The language identifier (or empty string)
16
+ * @returns HTML string or undefined for default rendering
17
+ */
18
+ fence_plugin?: (content: string, language: string) => string | undefined;
19
+
20
+ /**
21
+ * If true, uses inline styles instead of CSS classes.
22
+ * Useful for emails or environments without CSS support.
23
+ * @default false
24
+ */
25
+ inline_styles?: boolean;
26
+
27
+ /**
28
+ * If true, allows potentially unsafe URLs (javascript:, data:, etc).
29
+ * Only use with trusted content.
30
+ * @default false
31
+ */
32
+ allow_unsafe_urls?: boolean;
33
+ }
34
+
35
+ /**
36
+ * Parse markdown to HTML
37
+ * @param markdown - The markdown source text
38
+ * @param options - Optional configuration
39
+ * @returns The rendered HTML string
40
+ */
41
+ function quikdown(markdown: string, options?: QuikdownOptions): string;
42
+
43
+ namespace quikdown {
44
+ /**
45
+ * Generate CSS styles for quikdown classes with theme support
46
+ * @param prefix - CSS class prefix (default: 'quikdown-')
47
+ * @param theme - Theme name: 'light' (default) or 'dark'
48
+ * @returns CSS string with themed .quikdown-* styles
49
+ */
50
+ export function emitStyles(prefix?: string, theme?: 'light' | 'dark'): string;
51
+
52
+ /**
53
+ * Create a configured parser function with preset options
54
+ * @param options - Configuration to apply to all parsing
55
+ * @returns A parser function with the options pre-applied
56
+ */
57
+ export function configure(options: QuikdownOptions): (markdown: string) => string;
58
+
59
+ /**
60
+ * The version of quikdown
61
+ */
62
+ export const version: string;
63
+ }
64
+
65
+ export = quikdown;
66
+ }
67
+
68
+ // For ES6 module imports
69
+ export default quikdown;
70
+ export { QuikdownOptions };
@@ -1,48 +1,69 @@
1
1
  /**
2
- * quikdown Dark Theme CSS
3
- * Minimal dark theme - just inverted colors, no fancy styling
2
+ * QuikDown Dark Theme CSS
3
+ * Generated from quikdown.emitStyles('quikdown-', 'dark')
4
+ *
5
+ * Theme with container-based scoping.
6
+ * Usage: <div class="quikdown-dark">...content...</div>
7
+ *
8
+ * @generated 2025-08-18T00:32:14.951Z
9
+ * @source tools/generateThemeCSS.js
4
10
  */
5
11
 
6
- /* Headings - just size differences */
7
- .quikdown-h1 {
12
+ /* ============================================
13
+ QuikDown Dark Theme Styles
14
+ All selectors scoped to .quikdown-dark container
15
+ ============================================ */
16
+
17
+ /* Primary heading */
18
+ .quikdown-dark .quikdown-h1 {
8
19
  font-size: 2em;
9
20
  font-weight: 600;
10
21
  margin: 0.67em 0;
11
22
  text-align: left;
23
+ color: #e0e0e0;
12
24
  }
13
25
 
14
- .quikdown-h2 {
26
+ /* Secondary heading */
27
+ .quikdown-dark .quikdown-h2 {
15
28
  font-size: 1.5em;
16
29
  font-weight: 600;
17
30
  margin: 0.83em 0;
31
+ color: #e0e0e0;
18
32
  }
19
33
 
20
- .quikdown-h3 {
34
+ /* Tertiary heading */
35
+ .quikdown-dark .quikdown-h3 {
21
36
  font-size: 1.25em;
22
37
  font-weight: 600;
23
38
  margin: 1em 0;
39
+ color: #e0e0e0;
24
40
  }
25
41
 
26
- .quikdown-h4 {
42
+ /* Fourth level heading */
43
+ .quikdown-dark .quikdown-h4 {
27
44
  font-size: 1em;
28
45
  font-weight: 600;
29
46
  margin: 1.33em 0;
47
+ color: #e0e0e0;
30
48
  }
31
49
 
32
- .quikdown-h5 {
33
- font-size: 0.875em;
50
+ /* Fifth level heading */
51
+ .quikdown-dark .quikdown-h5 {
52
+ font-size: .875em;
34
53
  font-weight: 600;
35
54
  margin: 1.67em 0;
55
+ color: #e0e0e0;
36
56
  }
37
57
 
38
- .quikdown-h6 {
39
- font-size: 0.85em;
58
+ /* Sixth level heading */
59
+ .quikdown-dark .quikdown-h6 {
60
+ font-size: .85em;
40
61
  font-weight: 600;
41
62
  margin: 2em 0;
63
+ color: #e0e0e0;
42
64
  }
43
65
 
44
- /* Code blocks */
45
- .quikdown-pre {
66
+ .quikdown-dark .quikdown-pre {
46
67
  background: #2a2a2a;
47
68
  padding: 10px;
48
69
  border-radius: 4px;
@@ -50,89 +71,127 @@
50
71
  margin: 1em 0;
51
72
  }
52
73
 
53
- .quikdown-code {
54
- background: #333;
74
+ .quikdown-dark .quikdown-code {
75
+ background: #2a2a2a;
55
76
  padding: 2px 4px;
56
77
  border-radius: 3px;
57
78
  font-family: monospace;
58
79
  }
59
80
 
60
- /* Blockquotes */
61
- .quikdown-blockquote {
62
- border-left: 4px solid #444;
81
+ .quikdown-dark .quikdown-blockquote {
82
+ border-left: 4px solid #3a3a3a;
63
83
  margin-left: 0;
64
84
  padding-left: 1em;
85
+ color: #e0e0e0;
65
86
  }
66
87
 
67
- /* Tables */
68
- .quikdown-table {
88
+ .quikdown-dark .quikdown-table {
69
89
  border-collapse: collapse;
70
90
  width: 100%;
71
91
  margin: 1em 0;
72
92
  }
73
93
 
74
- .quikdown-th {
75
- border: 1px solid #444;
94
+ .quikdown-dark .quikdown-th {
95
+ border: 1px solid #3a3a3a;
76
96
  padding: 8px;
77
97
  background-color: #2a2a2a;
78
98
  font-weight: bold;
79
99
  text-align: left;
80
100
  }
81
101
 
82
- .quikdown-td {
83
- border: 1px solid #444;
102
+ .quikdown-dark .quikdown-td {
103
+ border: 1px solid #3a3a3a;
84
104
  padding: 8px;
85
105
  text-align: left;
106
+ color: #e0e0e0;
86
107
  }
87
108
 
88
- /* Lists */
89
- .quikdown-ul,
90
- .quikdown-ol {
91
- margin: 0.5em 0;
92
- padding-left: 2em;
109
+ .quikdown-dark .quikdown-hr {
110
+ border: none;
111
+ border-top: 1px solid #3a3a3a;
112
+ margin: 1em 0;
93
113
  }
94
114
 
95
- .quikdown-li {
96
- margin: 0.25em 0;
115
+ .quikdown-dark .quikdown-img {
116
+ max-width: 100%;
117
+ height: auto;
97
118
  }
98
119
 
99
- /* Task lists */
100
- .quikdown-task-item {
101
- list-style: none;
120
+ .quikdown-dark .quikdown-a {
121
+ color: #6db3f2;
122
+ text-decoration: underline;
102
123
  }
103
124
 
104
- .quikdown-task-checkbox {
105
- margin-right: 0.5em;
125
+ .quikdown-dark .quikdown-strong {
126
+ font-weight: bold;
106
127
  }
107
128
 
108
- /* Links */
109
- .quikdown-a {
110
- color: #66b3ff;
111
- text-decoration: underline;
129
+ .quikdown-dark .quikdown-em {
130
+ font-style: italic;
112
131
  }
113
132
 
114
- /* Images */
115
- .quikdown-img {
116
- max-width: 100%;
117
- height: auto;
133
+ .quikdown-dark .quikdown-del {
134
+ text-decoration: line-through;
118
135
  }
119
136
 
120
- /* Horizontal rule */
121
- .quikdown-hr {
122
- border: none;
123
- border-top: 1px solid #444;
124
- margin: 1em 0;
137
+ .quikdown-dark .quikdown-ul {
138
+ margin: 0.5em 0;
139
+ padding-left: 2em;
125
140
  }
126
141
 
127
- /* Text formatting */
128
- .quikdown-strong {
129
- font-weight: bold;
142
+ .quikdown-dark .quikdown-ol {
143
+ margin: 0.5em 0;
144
+ padding-left: 2em;
130
145
  }
131
146
 
132
- .quikdown-em {
133
- font-style: italic;
147
+ .quikdown-dark .quikdown-li {
148
+ margin: 0.25em 0;
149
+ color: #e0e0e0;
134
150
  }
135
151
 
136
- .quikdown-del {
137
- text-decoration: line-through;
152
+ .quikdown-dark .quikdown-task-item {
153
+ list-style: none;
154
+ }
155
+
156
+ .quikdown-dark .quikdown-task-checkbox {
157
+ margin-right: .5em;
158
+ }
159
+
160
+ /* ============================================
161
+ Container Styling
162
+ ============================================ */
163
+
164
+ .quikdown-dark {
165
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, sans-serif;
166
+ line-height: 1.6;
167
+ color: #e0e0e0;
168
+ background: #1a1a1a;
169
+ padding: 1rem;
170
+ }
171
+
172
+ /* ============================================
173
+ Auto Dark Mode Support
174
+ ============================================ */
175
+
176
+ @media (prefers-color-scheme: dark) {
177
+ .quikdown-auto {
178
+ color: #e0e0e0;
179
+ background: #1a1a1a;
180
+ }
181
+
182
+ /* Auto-apply dark theme styles */
183
+ .quikdown-auto .quikdown-h1,
184
+ .quikdown-auto .quikdown-h2,
185
+ .quikdown-auto .quikdown-h3,
186
+ .quikdown-auto .quikdown-h4,
187
+ .quikdown-auto .quikdown-h5,
188
+ .quikdown-auto .quikdown-h6 { color: #e0e0e0; }
189
+ .quikdown-auto .quikdown-pre { background: #2a2a2a; }
190
+ .quikdown-auto .quikdown-code { background: #2a2a2a; }
191
+ .quikdown-auto .quikdown-blockquote { border-left-color: #3a3a3a; color: #e0e0e0; }
192
+ .quikdown-auto .quikdown-th { background-color: #2a2a2a; border-color: #3a3a3a; }
193
+ .quikdown-auto .quikdown-td { border-color: #3a3a3a; color: #e0e0e0; }
194
+ .quikdown-auto .quikdown-hr { border-top-color: #3a3a3a; }
195
+ .quikdown-auto .quikdown-a { color: #6db3f2; }
196
+ .quikdown-auto .quikdown-li { color: #e0e0e0; }
138
197
  }
@@ -0,0 +1,2 @@
1
+ /* QuikDown Theme CSS (minified) */
2
+ .quikdown-dark .quikdown-h1{font-size:2em;font-weight:600;margin:.67em 0;text-align:left;color:#e0e0e0}.quikdown-dark .quikdown-h2{font-size:1.5em;font-weight:600;margin:.83em 0;color:#e0e0e0}.quikdown-dark .quikdown-h3{font-size:1.25em;font-weight:600;margin:1em 0;color:#e0e0e0}.quikdown-dark .quikdown-h4{font-size:1em;font-weight:600;margin:1.33em 0;color:#e0e0e0}.quikdown-dark .quikdown-h5{font-size:.875em;font-weight:600;margin:1.67em 0;color:#e0e0e0}.quikdown-dark .quikdown-h6{font-size:.85em;font-weight:600;margin:2em 0;color:#e0e0e0}.quikdown-dark .quikdown-pre{background:#2a2a2a;padding:10px;border-radius:4px;overflow-x:auto;margin:1em 0}.quikdown-dark .quikdown-code{background:#2a2a2a;padding:2px 4px;border-radius:3px;font-family:monospace}.quikdown-dark .quikdown-blockquote{border-left:4px solid #3a3a3a;margin-left:0;padding-left:1em;color:#e0e0e0}.quikdown-dark .quikdown-table{border-collapse:collapse;width:100%;margin:1em 0}.quikdown-dark .quikdown-th{border:1px solid #3a3a3a;padding:8px;background-color:#2a2a2a;font-weight:700;text-align:left}.quikdown-dark .quikdown-td{border:1px solid #3a3a3a;padding:8px;text-align:left;color:#e0e0e0}.quikdown-dark .quikdown-hr{border:none;border-top:1px solid #3a3a3a;margin:1em 0}.quikdown-dark .quikdown-img{max-width:100%;height:auto}.quikdown-dark .quikdown-a{color:#6db3f2;text-decoration:underline}.quikdown-dark .quikdown-strong{font-weight:700}.quikdown-dark .quikdown-em{font-style:italic}.quikdown-dark .quikdown-del{text-decoration:line-through}.quikdown-dark .quikdown-ol,.quikdown-dark .quikdown-ul{margin:.5em 0;padding-left:2em}.quikdown-dark .quikdown-li{margin:.25em 0;color:#e0e0e0}.quikdown-dark .quikdown-task-item{list-style:none}.quikdown-dark .quikdown-task-checkbox{margin-right:.5em}.quikdown-dark{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen,Ubuntu,sans-serif;line-height:1.6;color:#e0e0e0;background:#1a1a1a;padding:1rem}@media (prefers-color-scheme:dark){.quikdown-auto{color:#e0e0e0;background:#1a1a1a}.quikdown-auto .quikdown-h1,.quikdown-auto .quikdown-h2,.quikdown-auto .quikdown-h3,.quikdown-auto .quikdown-h4,.quikdown-auto .quikdown-h5,.quikdown-auto .quikdown-h6{color:#e0e0e0}.quikdown-auto .quikdown-code,.quikdown-auto .quikdown-pre{background:#2a2a2a}.quikdown-auto .quikdown-blockquote{border-left-color:#3a3a3a;color:#e0e0e0}.quikdown-auto .quikdown-th{background-color:#2a2a2a;border-color:#3a3a3a}.quikdown-auto .quikdown-td{border-color:#3a3a3a;color:#e0e0e0}.quikdown-auto .quikdown-hr{border-top-color:#3a3a3a}.quikdown-auto .quikdown-a{color:#6db3f2}.quikdown-auto .quikdown-li{color:#e0e0e0}}