@kerebron/extension-ui 0.8.1

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 (85) hide show
  1. package/LICENSE +23 -0
  2. package/README.md +40 -0
  3. package/assets/ui.css +32 -0
  4. package/esm/ExtensionUi.d.ts +6 -0
  5. package/esm/ExtensionUi.d.ts.map +1 -0
  6. package/esm/ExtensionUi.js +9 -0
  7. package/esm/ExtensionUi.js.map +1 -0
  8. package/esm/autocomplete/AutocompletePlugin.d.ts +53 -0
  9. package/esm/autocomplete/AutocompletePlugin.d.ts.map +1 -0
  10. package/esm/autocomplete/AutocompletePlugin.js +417 -0
  11. package/esm/autocomplete/AutocompletePlugin.js.map +1 -0
  12. package/esm/autocomplete/DefaultRenderer.d.ts +25 -0
  13. package/esm/autocomplete/DefaultRenderer.d.ts.map +1 -0
  14. package/esm/autocomplete/DefaultRenderer.js +162 -0
  15. package/esm/autocomplete/DefaultRenderer.js.map +1 -0
  16. package/esm/autocomplete/ExtensionAutocomplete.d.ts +11 -0
  17. package/esm/autocomplete/ExtensionAutocomplete.d.ts.map +1 -0
  18. package/esm/autocomplete/ExtensionAutocomplete.js +33 -0
  19. package/esm/autocomplete/ExtensionAutocomplete.js.map +1 -0
  20. package/esm/autocomplete/createDefaultMatcher.d.ts +11 -0
  21. package/esm/autocomplete/createDefaultMatcher.d.ts.map +1 -0
  22. package/esm/autocomplete/createDefaultMatcher.js +58 -0
  23. package/esm/autocomplete/createDefaultMatcher.js.map +1 -0
  24. package/esm/autocomplete/createPosMatcher.d.ts +3 -0
  25. package/esm/autocomplete/createPosMatcher.d.ts.map +1 -0
  26. package/esm/autocomplete/createPosMatcher.js +16 -0
  27. package/esm/autocomplete/createPosMatcher.js.map +1 -0
  28. package/esm/autocomplete/createRegexMatcher.d.ts +4 -0
  29. package/esm/autocomplete/createRegexMatcher.d.ts.map +1 -0
  30. package/esm/autocomplete/createRegexMatcher.js +50 -0
  31. package/esm/autocomplete/createRegexMatcher.js.map +1 -0
  32. package/esm/autocomplete/mod.d.ts +6 -0
  33. package/esm/autocomplete/mod.d.ts.map +1 -0
  34. package/esm/autocomplete/mod.js +6 -0
  35. package/esm/autocomplete/mod.js.map +1 -0
  36. package/esm/autocomplete/types.d.ts +49 -0
  37. package/esm/autocomplete/types.d.ts.map +1 -0
  38. package/esm/autocomplete/types.js +2 -0
  39. package/esm/autocomplete/types.js.map +1 -0
  40. package/esm/hover/ExtensionHover.d.ts +11 -0
  41. package/esm/hover/ExtensionHover.d.ts.map +1 -0
  42. package/esm/hover/ExtensionHover.js +33 -0
  43. package/esm/hover/ExtensionHover.js.map +1 -0
  44. package/esm/hover/HoverPlugin.d.ts +49 -0
  45. package/esm/hover/HoverPlugin.d.ts.map +1 -0
  46. package/esm/hover/HoverPlugin.js +368 -0
  47. package/esm/hover/HoverPlugin.js.map +1 -0
  48. package/esm/hover/MarkdownRenderer.d.ts +23 -0
  49. package/esm/hover/MarkdownRenderer.d.ts.map +1 -0
  50. package/esm/hover/MarkdownRenderer.js +54 -0
  51. package/esm/hover/MarkdownRenderer.js.map +1 -0
  52. package/esm/hover/mod.d.ts +3 -0
  53. package/esm/hover/mod.d.ts.map +1 -0
  54. package/esm/hover/mod.js +3 -0
  55. package/esm/hover/mod.js.map +1 -0
  56. package/esm/hover/types.d.ts +23 -0
  57. package/esm/hover/types.d.ts.map +1 -0
  58. package/esm/hover/types.js +2 -0
  59. package/esm/hover/types.js.map +1 -0
  60. package/esm/mod.d.ts +2 -0
  61. package/esm/mod.d.ts.map +1 -0
  62. package/esm/mod.js +2 -0
  63. package/esm/mod.js.map +1 -0
  64. package/esm/overlayer/mod.d.ts +13 -0
  65. package/esm/overlayer/mod.d.ts.map +1 -0
  66. package/esm/overlayer/mod.js +111 -0
  67. package/esm/overlayer/mod.js.map +1 -0
  68. package/esm/package.json +3 -0
  69. package/package.json +43 -0
  70. package/src/ExtensionUi.ts +10 -0
  71. package/src/autocomplete/AutocompletePlugin.ts +580 -0
  72. package/src/autocomplete/DefaultRenderer.ts +189 -0
  73. package/src/autocomplete/ExtensionAutocomplete.ts +49 -0
  74. package/src/autocomplete/createDefaultMatcher.ts +94 -0
  75. package/src/autocomplete/createPosMatcher.ts +21 -0
  76. package/src/autocomplete/createRegexMatcher.ts +70 -0
  77. package/src/autocomplete/mod.ts +5 -0
  78. package/src/autocomplete/types.ts +90 -0
  79. package/src/hover/ExtensionHover.ts +46 -0
  80. package/src/hover/HoverPlugin.ts +467 -0
  81. package/src/hover/MarkdownRenderer.ts +68 -0
  82. package/src/hover/mod.ts +2 -0
  83. package/src/hover/types.ts +26 -0
  84. package/src/mod.ts +1 -0
  85. package/src/overlayer/mod.ts +146 -0
@@ -0,0 +1,111 @@
1
+ export class OverLayer {
2
+ overLayerContainer;
3
+ stack = [];
4
+ constructor(container) {
5
+ if (!container) {
6
+ container = document.createElement('div');
7
+ document.body.appendChild(container);
8
+ container.classList.add('kb--top-layer');
9
+ }
10
+ this.overLayerContainer = container;
11
+ }
12
+ removeStacked(start) {
13
+ for (let i = this.stack.length - 1; i >= start; i--) {
14
+ if (this.overLayerContainer.contains(this.stack[i])) {
15
+ this.overLayerContainer.removeChild(this.stack[i]);
16
+ }
17
+ }
18
+ this.stack.splice(start, this.stack.length - start);
19
+ }
20
+ createElement(type, ancestor) {
21
+ const element = document.createElement(type);
22
+ this.overLayerContainer.appendChild(element);
23
+ const observer = new MutationObserver((mutations) => {
24
+ if (!element.isConnected) {
25
+ observer.disconnect();
26
+ const idx = this.stack.findIndex((item) => item === element);
27
+ if (idx > -1) {
28
+ this.removeStacked(idx);
29
+ }
30
+ element.dispatchEvent(new CustomEvent('removed'));
31
+ }
32
+ });
33
+ if (ancestor) {
34
+ const idx = this.stack.findIndex((item) => item === ancestor);
35
+ if (idx > -1) {
36
+ this.removeStacked(idx + 1);
37
+ }
38
+ }
39
+ else {
40
+ this.removeStacked(0);
41
+ }
42
+ this.stack.push(element);
43
+ observer.observe(this.overLayerContainer, {
44
+ childList: true,
45
+ });
46
+ return element;
47
+ }
48
+ }
49
+ export function anchorElement(popover, anchorSelector, params) {
50
+ let rafId = null;
51
+ popover.style.position = 'fixed';
52
+ popover.setAttribute('data-anchor-selector', anchorSelector);
53
+ function update() {
54
+ rafId = null;
55
+ const container = params?.container || document.body;
56
+ const anchor = container.querySelector(anchorSelector);
57
+ if (anchor) {
58
+ const rect = anchor.getBoundingClientRect();
59
+ if (params?.above) {
60
+ popover.style.left = `${rect.left}px`;
61
+ popover.style.top = `${rect.top - popover.clientHeight}px`;
62
+ }
63
+ else {
64
+ popover.style.left = `${rect.left}px`;
65
+ popover.style.top = `${rect.bottom}px`;
66
+ }
67
+ popover.style.display = '';
68
+ }
69
+ else {
70
+ const ids = [];
71
+ const nodes = container.querySelectorAll('[data-decoration-id]');
72
+ nodes.forEach((n) => ids.push(n.getAttribute('data-decoration-id')));
73
+ // console.debug('!anchorSelector', anchorSelector, ids);
74
+ popover.style.display = 'none';
75
+ scheduleUpdate();
76
+ }
77
+ }
78
+ function scheduleUpdate() {
79
+ if (!rafId) {
80
+ rafId = requestAnimationFrame(update);
81
+ }
82
+ }
83
+ update();
84
+ // const resizeObserver = new ResizeObserver(scheduleUpdate);
85
+ // resizeObserver.observe(anchor);
86
+ // const moveObserver = new IntersectionObserver(scheduleUpdate);
87
+ // moveObserver.observe(anchor);
88
+ if (params?.container) {
89
+ const observer = new MutationObserver((mutations) => {
90
+ scheduleUpdate();
91
+ });
92
+ observer.observe(params?.container, {
93
+ childList: true,
94
+ characterData: true,
95
+ subtree: true,
96
+ });
97
+ }
98
+ globalThis.addEventListener('resize', scheduleUpdate, true);
99
+ document.addEventListener('scroll', scheduleUpdate, true);
100
+ popover.addEventListener('removed', () => {
101
+ // resizeObserver.disconnect();
102
+ // moveObserver.disconnect();
103
+ globalThis.removeEventListener('resize', scheduleUpdate, true);
104
+ document.removeEventListener('scroll', scheduleUpdate, true);
105
+ if (rafId) {
106
+ cancelAnimationFrame(rafId);
107
+ rafId = null;
108
+ }
109
+ });
110
+ }
111
+ //# sourceMappingURL=mod.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mod.js","sourceRoot":"","sources":["../../src/overlayer/mod.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ {
2
+ "type": "module"
3
+ }
package/package.json ADDED
@@ -0,0 +1,43 @@
1
+ {
2
+ "name": "@kerebron/extension-ui",
3
+ "version": "0.8.1",
4
+ "license": "MIT",
5
+ "module": "./esm/mod.js",
6
+ "exports": {
7
+ ".": {
8
+ "import": "./esm/mod.js"
9
+ },
10
+ "./autocomplete": {
11
+ "import": "./esm/autocomplete/mod.js"
12
+ },
13
+ "./autocomplete/AutocompletePlugin": {
14
+ "import": "./esm/autocomplete/AutocompletePlugin.js"
15
+ },
16
+ "./autocomplete/DefaultRenderer": {
17
+ "import": "./esm/autocomplete/DefaultRenderer.js"
18
+ },
19
+ "./hover": {
20
+ "import": "./esm/hover/mod.js"
21
+ },
22
+ "./OverLayer": {
23
+ "import": "./esm/overlayer/mod.js"
24
+ },
25
+ "./assets/ui.css": "./assets/ui.css"
26
+ },
27
+ "scripts": {},
28
+ "files": [
29
+ "esm",
30
+ "src",
31
+ "assets"
32
+ ],
33
+ "dependencies": {
34
+ "@kerebron/editor": "0.8.1",
35
+ "prosemirror-model": "1.25.3",
36
+ "prosemirror-state": "1.4.3",
37
+ "prosemirror-view": "1.40.0"
38
+ },
39
+ "devDependencies": {
40
+ "@types/node": "^20.9.0"
41
+ },
42
+ "_generatedBy": "dnt@dev"
43
+ }
@@ -0,0 +1,10 @@
1
+ import { Extension } from '@kerebron/editor';
2
+ import { OverLayer } from './overlayer/mod.js';
3
+
4
+ export class ExtensionUi extends Extension {
5
+ name = 'ui';
6
+
7
+ override created(): void {
8
+ this.editor.ci.register('overlayer', new OverLayer());
9
+ }
10
+ }