quikchat 1.2.4 → 1.2.7

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 (41) hide show
  1. package/README.md +9 -4
  2. package/dist/build-manifest.json +73 -80
  3. package/dist/quikchat-md-full.cjs.js +630 -256
  4. package/dist/quikchat-md-full.cjs.js.map +1 -1
  5. package/dist/quikchat-md-full.cjs.min.js +3 -3
  6. package/dist/quikchat-md-full.cjs.min.js.map +1 -1
  7. package/dist/quikchat-md-full.esm.js +630 -256
  8. package/dist/quikchat-md-full.esm.js.map +1 -1
  9. package/dist/quikchat-md-full.esm.min.js +3 -3
  10. package/dist/quikchat-md-full.esm.min.js.map +1 -1
  11. package/dist/quikchat-md-full.umd.js +630 -256
  12. package/dist/quikchat-md-full.umd.js.map +1 -1
  13. package/dist/quikchat-md-full.umd.min.js +3 -3
  14. package/dist/quikchat-md-full.umd.min.js.map +1 -1
  15. package/dist/quikchat-md.cjs.js +614 -246
  16. package/dist/quikchat-md.cjs.js.map +1 -1
  17. package/dist/quikchat-md.cjs.min.js +3 -3
  18. package/dist/quikchat-md.cjs.min.js.map +1 -1
  19. package/dist/quikchat-md.esm.js +614 -246
  20. package/dist/quikchat-md.esm.js.map +1 -1
  21. package/dist/quikchat-md.esm.min.js +3 -3
  22. package/dist/quikchat-md.esm.min.js.map +1 -1
  23. package/dist/quikchat-md.umd.js +614 -246
  24. package/dist/quikchat-md.umd.js.map +1 -1
  25. package/dist/quikchat-md.umd.min.js +3 -3
  26. package/dist/quikchat-md.umd.min.js.map +1 -1
  27. package/dist/quikchat.cjs.js +3 -3
  28. package/dist/quikchat.cjs.js.map +1 -1
  29. package/dist/quikchat.cjs.min.js +1 -1
  30. package/dist/quikchat.cjs.min.js.map +1 -1
  31. package/dist/quikchat.css +351 -120
  32. package/dist/quikchat.esm.js +3 -3
  33. package/dist/quikchat.esm.js.map +1 -1
  34. package/dist/quikchat.esm.min.js +1 -1
  35. package/dist/quikchat.esm.min.js.map +1 -1
  36. package/dist/quikchat.min.css +1 -1
  37. package/dist/quikchat.umd.js +3 -3
  38. package/dist/quikchat.umd.js.map +1 -1
  39. package/dist/quikchat.umd.min.js +1 -1
  40. package/dist/quikchat.umd.min.js.map +1 -1
  41. package/package.json +6 -5
package/README.md CHANGED
@@ -4,7 +4,11 @@
4
4
 
5
5
  # QuikChat
6
6
 
7
- A lightweight, zero-dependency vanilla JavaScript chat widget. Drop it into any pageno React, no Vue, no build step required and connect it to any LLM, WebSocket, or message source with plain `fetch()`.
7
+ A lightweight, zero-dependency JavaScript chat widget, with history save/restore, multiple instance support, and several other goodies. Works with any framework — React, Vue, Svelte, Angular, Solidor none at all. Connect it to any LLM, WebSocket, or message source with plain `fetch()`.
8
+
9
+ [Live Demo & Documentation](https://deftio.github.io/quikchat/site/)
10
+
11
+ [![QuikChat screenshot](site/quikchat-screenshot.png)](https://deftio.github.io/quikchat/site/)
8
12
 
9
13
  ```html
10
14
  <script src="https://unpkg.com/quikchat"></script>
@@ -48,7 +52,7 @@ That's a working streaming LLM chat in one file — no bundler, no framework, no
48
52
  - **Typing indicator** — animated "..." dots that auto-clear when streaming begins
49
53
  - **Markdown support** — three tiers: base (no markdown), `-md` (basic markdown via [quikdown](https://github.com/deftio/quikdown)), `-md-full` (syntax highlighting, math, diagrams, maps — loaded on demand from CDN)
50
54
  - **HTML sanitization** — built-in XSS protection or plug in your own sanitizer
51
- - **Themeable** — 8 built-in CSS themes (light, dark, blue, warm, midnight, ocean, modern, debug) or write your own
55
+ - **Themeable** — 11 built-in CSS themes (light, dark, blue, warm, midnight, ocean, modern, glass, gradient, minimal, debug) or write your own
52
56
  - **Multi-user** — multiple users per chat, multiple independent chats per page
53
57
  - **Message visibility & tagging** — hide system prompts and tool-call results from the UI while keeping them in history for LLM context
54
58
  - **History export / import** — save and restore complete chat sessions (`historyExport()` / `historyImport()`)
@@ -191,12 +195,13 @@ Style messages by role with CSS hooks: `.quikchat-role-user`, `.quikchat-role-as
191
195
  | [LLM Integration](docs/llm-integration.md) | Ollama, OpenAI, LM Studio, tool calls, conversational memory |
192
196
  | [Theming](docs/theming.md) | Custom themes, CSS architecture, built-in themes |
193
197
  | [CSS Architecture](docs/css-architecture.md) | Base vs theme separation, ARIA accessibility |
198
+ | [Recipes](docs/recipes.md) | Common patterns: log viewer, tool-call visibility, session persistence, RTL |
194
199
 
195
200
  ## Demo & Examples
196
201
 
197
202
  [Live Demo](https://deftio.github.io/quikchat/site/) | [Examples](https://deftio.github.io/quikchat/examples/)
198
203
 
199
- Examples include: basic UMD/ESM usage, theme switching, dual chatrooms, markdown rendering ([basic](./examples/example_markdown.html) and [full with syntax highlighting + math + diagrams](./examples/example_md_full.html)), streaming with Ollama/OpenAI/LM Studio, and React integration.
204
+ Examples include: basic UMD/ESM usage, dual chatrooms, markdown rendering ([basic](./examples/example_markdown.html) and [full with syntax highlighting + math + diagrams](./examples/example_md_full.html)), LLM integrations (Ollama, OpenAI, LM Studio), [LLM tool-calling editor](./examples/example_tool_editor.html), tool-call visibility, session save/restore, RTL/i18n, log viewer, event timeline, framework integration (React, Vue, Solid, Svelte, Angular), and backend examples ([FastAPI](./examples/fastapi_llm/), [Express](./examples/npm_express/)).
200
205
 
201
206
  ## Build Variants
202
207
 
@@ -205,7 +210,7 @@ Examples include: basic UMD/ESM usage, theme switching, dual chatrooms, markdown
205
210
  | **Base** (`quikchat.umd.min.js`) | Chat widget, zero deps | None |
206
211
  | **Markdown** (`quikchat-md.umd.min.js`) | + bold, italic, code, tables, lists | None |
207
212
  | **Full** (`quikchat-md-full.umd.min.js`) | + syntax highlighting, math, diagrams, maps | CDN on demand |
208
- | **CSS** (`quikchat.css`) | All 8 themes | None |
213
+ | **CSS** (`quikchat.css`) | All 11 themes | None |
209
214
 
210
215
  All builds are also available in ESM and CJS formats with sourcemaps. See the [downloads page](https://deftio.github.io/quikchat/site/downloads.html) for exact sizes, SRI hashes, and CDN links.
211
216
 
@@ -1,6 +1,6 @@
1
1
  {
2
- "version": "1.2.4",
3
- "generated": "2026-04-04T20:06:22.609Z",
2
+ "version": "1.2.7",
3
+ "generated": "2026-05-04T04:21:07.564Z",
4
4
  "builds": [
5
5
  {
6
6
  "id": "base",
@@ -12,49 +12,49 @@
12
12
  "format": "UMD",
13
13
  "raw": "quikchat.umd.js",
14
14
  "min": "quikchat.umd.min.js",
15
- "rawBytes": 33197,
16
- "minBytes": 17502,
17
- "gzipBytes": 4886,
18
- "rawSize": "32.42 KB",
19
- "minSize": "17.09 KB",
20
- "gzipSize": "4.77 KB",
21
- "sri": "sha384-HQyJgwhzkD0acTCjwR7zztCSy7vwf5wbYp70KrpWRm2yERA5fs6JaZGzBlzIVy+I"
15
+ "rawBytes": 33119,
16
+ "minBytes": 17421,
17
+ "gzipBytes": 4849,
18
+ "rawSize": "32.34 KB",
19
+ "minSize": "17.01 KB",
20
+ "gzipSize": "4.74 KB",
21
+ "sri": "sha384-HLvGJigsP5xa9TFN6KOihPuozxJlq36dC16VsNMBpVGiwLs75d+2/LEmqzJX58y8"
22
22
  },
23
23
  {
24
24
  "format": "CJS",
25
25
  "raw": "quikchat.cjs.js",
26
26
  "min": "quikchat.cjs.min.js",
27
- "rawBytes": 31085,
28
- "minBytes": 17287,
29
- "gzipBytes": 4817,
30
- "rawSize": "30.36 KB",
31
- "minSize": "16.88 KB",
32
- "gzipSize": "4.70 KB",
33
- "sri": "sha384-fvOoFR3OCfLmwu35fiD4+hIK6FGxpU50HVGmvXXugUGppnkvyQTN+YAgy3PMDmHd"
27
+ "rawBytes": 31007,
28
+ "minBytes": 17206,
29
+ "gzipBytes": 4781,
30
+ "rawSize": "30.28 KB",
31
+ "minSize": "16.80 KB",
32
+ "gzipSize": "4.67 KB",
33
+ "sri": "sha384-nHUMygH/rx+lxSW7F1l0fLp3FPfN/YdNiJj/qMkcqvIDHFuuegIubKpuiHCQqN3g"
34
34
  },
35
35
  {
36
36
  "format": "ESM",
37
37
  "raw": "quikchat.esm.js",
38
38
  "min": "quikchat.esm.min.js",
39
- "rawBytes": 31075,
40
- "minBytes": 17278,
41
- "gzipBytes": 4813,
42
- "rawSize": "30.35 KB",
43
- "minSize": "16.87 KB",
44
- "gzipSize": "4.70 KB",
45
- "sri": "sha384-O8OYDXEwVzDZd1hiGm9SthiyuD0oKPrfgE7jGG/6ZhY/MRahnsJyye2PbPRcBr+5"
39
+ "rawBytes": 30997,
40
+ "minBytes": 17197,
41
+ "gzipBytes": 4776,
42
+ "rawSize": "30.27 KB",
43
+ "minSize": "16.79 KB",
44
+ "gzipSize": "4.66 KB",
45
+ "sri": "sha384-itfed90vasC8MaRc5SqS992oym6NQnXmvbX3q4F0fvGH96ZBwRLSD2PV+AgG7gEW"
46
46
  },
47
47
  {
48
48
  "format": "CSS",
49
49
  "raw": "quikchat.css",
50
50
  "min": "quikchat.min.css",
51
- "rawBytes": 21344,
52
- "minBytes": 15110,
53
- "gzipBytes": 2479,
54
- "rawSize": "20.84 KB",
55
- "minSize": "14.76 KB",
56
- "gzipSize": "2.42 KB",
57
- "sri": "sha384-GnOoGi8md5u5otyOQw6whG8+560AXWxskNqqkTKQYSrjd7/fqEFu+nHBL36lW7Dn"
51
+ "rawBytes": 28346,
52
+ "minBytes": 20572,
53
+ "gzipBytes": 3187,
54
+ "rawSize": "27.68 KB",
55
+ "minSize": "20.09 KB",
56
+ "gzipSize": "3.11 KB",
57
+ "sri": "sha384-x31ZP+sKmyuDQf5oyps6GK054U7aJoY5qsSDrCXl8TxkOJHT6GIs7sHXtp4oKj/F"
58
58
  }
59
59
  ]
60
60
  },
@@ -68,37 +68,37 @@
68
68
  "format": "UMD",
69
69
  "raw": "quikchat-md.umd.js",
70
70
  "min": "quikchat-md.umd.min.js",
71
- "rawBytes": 63180,
72
- "minBytes": 28095,
73
- "gzipBytes": 8707,
74
- "rawSize": "61.70 KB",
75
- "minSize": "27.44 KB",
76
- "gzipSize": "8.50 KB",
77
- "sri": "sha384-XOxP36QfDMuxBMmDKJp6wA0/NVXG+A5zWa0g9GSJHVmiB8ZDga0sDN5ILAg3GMDC"
71
+ "rawBytes": 85353,
72
+ "minBytes": 29563,
73
+ "gzipBytes": 9303,
74
+ "rawSize": "83.35 KB",
75
+ "minSize": "28.87 KB",
76
+ "gzipSize": "9.08 KB",
77
+ "sri": "sha384-NyEFBtozHVJl7dPUvuCpBlwEGC34Qc0yosXjeVckvXdWf11s3szHrmUqVB1p5ELQ"
78
78
  },
79
79
  {
80
80
  "format": "CJS",
81
81
  "raw": "quikchat-md.cjs.js",
82
82
  "min": "quikchat-md.cjs.min.js",
83
- "rawBytes": 59664,
84
- "minBytes": 27868,
85
- "gzipBytes": 8637,
86
- "rawSize": "58.27 KB",
87
- "minSize": "27.21 KB",
88
- "gzipSize": "8.43 KB",
89
- "sri": "sha384-HEBWAN+nFWYw5xalcWEXctrOO043twBK0qEazYQBsx1YV1UIHXEvEMh2VW+bW1H5"
83
+ "rawBytes": 81293,
84
+ "minBytes": 29336,
85
+ "gzipBytes": 9233,
86
+ "rawSize": "79.39 KB",
87
+ "minSize": "28.65 KB",
88
+ "gzipSize": "9.02 KB",
89
+ "sri": "sha384-4inUk0zLpAEt509RM9wrO6pcfu6/3GLBJRWPW/3TBcyq62FRGRi6oh9KT1FEM4O/"
90
90
  },
91
91
  {
92
92
  "format": "ESM",
93
93
  "raw": "quikchat-md.esm.js",
94
94
  "min": "quikchat-md.esm.min.js",
95
- "rawBytes": 59654,
96
- "minBytes": 27859,
97
- "gzipBytes": 8638,
98
- "rawSize": "58.26 KB",
99
- "minSize": "27.21 KB",
100
- "gzipSize": "8.44 KB",
101
- "sri": "sha384-FxeypSY34JdH6ndHocWBv4OmG4om90MNCV6QyN5mGSNsJBdHnm6cjbTm5DjKZG2N"
95
+ "rawBytes": 81283,
96
+ "minBytes": 29327,
97
+ "gzipBytes": 9234,
98
+ "rawSize": "79.38 KB",
99
+ "minSize": "28.64 KB",
100
+ "gzipSize": "9.02 KB",
101
+ "sri": "sha384-NU2rka4yCQspxc8DELK8bjof9XXD6DAglIDaPFVpi2NEENNbhPcGoPK5BNvVdivN"
102
102
  }
103
103
  ]
104
104
  },
@@ -112,46 +112,39 @@
112
112
  "format": "UMD",
113
113
  "raw": "quikchat-md-full.umd.js",
114
114
  "min": "quikchat-md-full.umd.min.js",
115
- "rawBytes": 107213,
116
- "minBytes": 44583,
117
- "gzipBytes": 14063,
118
- "rawSize": "104.70 KB",
119
- "minSize": "43.54 KB",
120
- "gzipSize": "13.73 KB",
121
- "sri": "sha384-SCqEKwwNNrbWcDDC+C6apgzpCMyE+9kAtodwSWFsqc7dSgiB8dMKUdgsx8UEYhIZ"
115
+ "rawBytes": 129783,
116
+ "minBytes": 46127,
117
+ "gzipBytes": 14672,
118
+ "rawSize": "126.74 KB",
119
+ "minSize": "45.05 KB",
120
+ "gzipSize": "14.33 KB",
121
+ "sri": "sha384-Lk+2rwvAXBi6oQHtO2UFzs8uD6lIsAVwZV310qBWpiGIaf2F1Obe/RKnMVn3LGbm"
122
122
  },
123
123
  {
124
124
  "format": "CJS",
125
125
  "raw": "quikchat-md-full.cjs.js",
126
126
  "min": "quikchat-md-full.cjs.min.js",
127
- "rawBytes": 101525,
128
- "minBytes": 44356,
129
- "gzipBytes": 13997,
130
- "rawSize": "99.15 KB",
131
- "minSize": "43.32 KB",
132
- "gzipSize": "13.67 KB",
133
- "sri": "sha384-8AZywird+70s7iTN9GxFIf/oUiMOiPodPhj7ORx+/FOwETcKDo6kHIsk3kZzRHiA"
127
+ "rawBytes": 123539,
128
+ "minBytes": 45900,
129
+ "gzipBytes": 14604,
130
+ "rawSize": "120.64 KB",
131
+ "minSize": "44.82 KB",
132
+ "gzipSize": "14.26 KB",
133
+ "sri": "sha384-Z+2mOTSAZf3Dg92C2ltm1MgXLbyqkcy8WuXOBWbrOp4eRLXhvXAHM4683byCzCCY"
134
134
  },
135
135
  {
136
136
  "format": "ESM",
137
137
  "raw": "quikchat-md-full.esm.js",
138
138
  "min": "quikchat-md-full.esm.min.js",
139
- "rawBytes": 101515,
140
- "minBytes": 44347,
141
- "gzipBytes": 13995,
142
- "rawSize": "99.14 KB",
143
- "minSize": "43.31 KB",
144
- "gzipSize": "13.67 KB",
145
- "sri": "sha384-q7xCwu4Z7vWZaLs7GJzlcx9DHcEDZDkTkez8vAA4KJwjl7xtwuhYCxWcGZf60bir"
139
+ "rawBytes": 123529,
140
+ "minBytes": 45891,
141
+ "gzipBytes": 14602,
142
+ "rawSize": "120.63 KB",
143
+ "minSize": "44.82 KB",
144
+ "gzipSize": "14.26 KB",
145
+ "sri": "sha384-eqUE3H5exC1kVl2LwErt1dlpdvzzh6vKLlgANUrmecfjEKwFvFrnis6AMUlB/RVa"
146
146
  }
147
147
  ]
148
148
  }
149
- ],
150
- "coverage": {
151
- "statements": 100,
152
- "branches": 98.13,
153
- "functions": 97.46,
154
- "lines": 100,
155
- "badge": "https://img.shields.io/badge/coverage-97.46%25-brightgreen.svg"
156
- }
149
+ ]
157
150
  }