@miso.ai/client-sdk-ui 1.14.0-beta.2 → 1.14.0-beta.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.
Files changed (54) hide show
  1. package/dist/cjs/asset/svgs.js +4 -2
  2. package/dist/cjs/constants.js +2 -0
  3. package/dist/cjs/defaults/ask/index.js +2 -1
  4. package/dist/cjs/defaults/ask/templates.js +2 -1
  5. package/dist/cjs/defaults/hybrid-search/index.js +2 -1
  6. package/dist/cjs/defaults/hybrid-search/templates.js +2 -1
  7. package/dist/cjs/defaults/index.js +2 -1
  8. package/dist/cjs/defaults.js +107 -10
  9. package/dist/cjs/element/container/index.js +14 -0
  10. package/dist/cjs/element/container/miso-message-item.js +91 -0
  11. package/dist/cjs/element/container/miso-thread-item.js +91 -0
  12. package/dist/cjs/element/index.js +2 -1
  13. package/dist/cjs/element/role/index.js +7 -0
  14. package/dist/cjs/element/role/miso-delete.js +20 -0
  15. package/dist/cjs/layout/button/button.js +45 -5
  16. package/dist/cjs/layout/button/checkbox.js +2 -1
  17. package/dist/cjs/layout/container/item-container.js +99 -0
  18. package/dist/cjs/layout/index.js +14 -0
  19. package/dist/cjs/layout/input/search-box.js +9 -4
  20. package/dist/cjs/layout/list/collection.js +21 -4
  21. package/dist/cjs/layout/list/messages.js +261 -224
  22. package/dist/cjs/layout/list/threads.js +106 -150
  23. package/dist/cjs/layout/templates.js +98 -38
  24. package/dist/cjs/layout/text/question.js +71 -0
  25. package/dist/cjs/layout/text/typewriter/index.js +15 -21
  26. package/dist/cjs/plugin.js +6 -3
  27. package/dist/cjs/util/dom.js +21 -0
  28. package/dist/cjs/util/notify.js +74 -0
  29. package/dist/cjs/version.js +1 -1
  30. package/package.json +3 -3
  31. package/src/CLAUDE.md +7 -2
  32. package/src/asset/svgs.js +3 -1
  33. package/src/constants.js +2 -0
  34. package/src/defaults.js +75 -5
  35. package/src/element/container/index.js +2 -0
  36. package/src/element/container/miso-message-item.js +94 -0
  37. package/src/element/container/miso-thread-item.js +94 -0
  38. package/src/element/role/index.js +1 -0
  39. package/src/element/role/miso-delete.js +16 -0
  40. package/src/layout/button/button.js +40 -4
  41. package/src/layout/button/checkbox.js +2 -1
  42. package/src/layout/container/item-container.js +99 -0
  43. package/src/layout/index.js +2 -0
  44. package/src/layout/input/search-box.js +4 -2
  45. package/src/layout/list/collection.js +22 -5
  46. package/src/layout/list/messages.js +231 -201
  47. package/src/layout/list/threads.js +107 -128
  48. package/src/layout/templates.js +100 -38
  49. package/src/layout/text/question.js +58 -0
  50. package/src/layout/text/typewriter/index.js +11 -15
  51. package/src/plugin.js +3 -2
  52. package/src/util/dom.js +16 -0
  53. package/src/util/notify.js +68 -0
  54. package/src/version.js +1 -1
@@ -0,0 +1,68 @@
1
+ import { escapeHtml } from '@miso.ai/commons';
2
+
3
+ const DEFAULT_CLASSNAME = 'miso-notice';
4
+ const DEFAULT_DURATION = 5000;
5
+
6
+ /**
7
+ * Show a transient notice (a toast) in a corner of the page, dismissed
8
+ * after `duration` milliseconds (0 keeps it until closed), or by its close
9
+ * button. A notice with the very text of one on display is not stacked:
10
+ * the displayed one stays, its timer starting over. Returns a function
11
+ * that dismisses the notice. Exposed as `MisoClient.ui.notify()`.
12
+ */
13
+ export default function notify({
14
+ message,
15
+ type = 'info', // 'info' | 'error'
16
+ duration = DEFAULT_DURATION,
17
+ className = DEFAULT_CLASSNAME,
18
+ } = {}) {
19
+ if (!message) {
20
+ return () => {};
21
+ }
22
+ const container = getContainer(className);
23
+ let notice = [...container.children].find(element => element._misoNotice && element._misoNotice.key === `${type}:${message}`);
24
+ if (!notice) {
25
+ notice = createNotice(className, type, message);
26
+ container.appendChild(notice);
27
+ }
28
+ notice._misoNotice.schedule(duration);
29
+ return notice._misoNotice.dismiss;
30
+ }
31
+
32
+ // the stack hosting the notices, created on demand and removed when empty
33
+ function getContainer(className) {
34
+ let container = document.querySelector(`.${className}-stack`);
35
+ if (!container) {
36
+ container = document.createElement('div');
37
+ container.className = `${className}-stack`;
38
+ container.setAttribute('aria-live', 'polite');
39
+ document.body.appendChild(container);
40
+ }
41
+ return container;
42
+ }
43
+
44
+ function createNotice(className, type, message) {
45
+ const notice = document.createElement('div');
46
+ notice.className = `${className} ${className}--${type}`;
47
+ notice.setAttribute('role', type === 'error' ? 'alert' : 'status');
48
+ notice.innerHTML = [
49
+ `<div class="${className}__message">${escapeHtml(message)}</div>`,
50
+ `<button type="button" class="${className}__close-button" data-role="close" aria-label="Dismiss">&times;</button>`,
51
+ ].join('');
52
+ let timer;
53
+ const dismiss = () => {
54
+ clearTimeout(timer);
55
+ const container = notice.parentElement;
56
+ notice.remove();
57
+ container && container.children.length === 0 && container.remove();
58
+ };
59
+ const schedule = (duration) => {
60
+ clearTimeout(timer);
61
+ timer = duration > 0 ? setTimeout(dismiss, duration) : undefined;
62
+ };
63
+ notice.addEventListener('click', (event) => {
64
+ event.target.closest('[data-role="close"]') && dismiss();
65
+ });
66
+ notice._misoNotice = { key: `${type}:${message}`, dismiss, schedule };
67
+ return notice;
68
+ }
package/src/version.js CHANGED
@@ -1 +1 @@
1
- export default '1.14.0-beta.2';
1
+ export default '1.14.0-beta.4';