@refrakt-md/behaviors 0.9.3 → 0.9.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.
- package/dist/behaviors/copy.d.ts +3 -1
- package/dist/behaviors/copy.d.ts.map +1 -1
- package/dist/behaviors/copy.js +36 -22
- package/dist/behaviors/copy.js.map +1 -1
- package/dist/elements/helpers.d.ts +2 -1
- package/dist/elements/helpers.d.ts.map +1 -1
- package/dist/elements/helpers.js +9 -2
- package/dist/elements/helpers.js.map +1 -1
- package/package.json +1 -1
package/dist/behaviors/copy.d.ts
CHANGED
|
@@ -3,7 +3,9 @@ import type { CleanupFn } from '../types.js';
|
|
|
3
3
|
* Copy-to-clipboard behavior for code blocks.
|
|
4
4
|
*
|
|
5
5
|
* Finds all `<pre>` elements within the container and injects a copy button.
|
|
6
|
-
*
|
|
6
|
+
* If the `<pre>` is already inside an `.rf-codeblock` wrapper (from the Markdoc
|
|
7
|
+
* node schema), the button is added to the existing wrapper. Otherwise a new
|
|
8
|
+
* `.rf-codeblock` wrapper is created around the `<pre>`.
|
|
7
9
|
*/
|
|
8
10
|
export declare function copyBehavior(container: HTMLElement | Document): CleanupFn;
|
|
9
11
|
//# sourceMappingURL=copy.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"copy.d.ts","sourceRoot":"","sources":["../../src/behaviors/copy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAsC7C
|
|
1
|
+
{"version":3,"file":"copy.d.ts","sourceRoot":"","sources":["../../src/behaviors/copy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAsC7C;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,WAAW,GAAG,QAAQ,GAAG,SAAS,CAkEzE"}
|
package/dist/behaviors/copy.js
CHANGED
|
@@ -34,19 +34,20 @@ function getCopyText(pre) {
|
|
|
34
34
|
* Copy-to-clipboard behavior for code blocks.
|
|
35
35
|
*
|
|
36
36
|
* Finds all `<pre>` elements within the container and injects a copy button.
|
|
37
|
-
*
|
|
37
|
+
* If the `<pre>` is already inside an `.rf-codeblock` wrapper (from the Markdoc
|
|
38
|
+
* node schema), the button is added to the existing wrapper. Otherwise a new
|
|
39
|
+
* `.rf-codeblock` wrapper is created around the `<pre>`.
|
|
38
40
|
*/
|
|
39
41
|
export function copyBehavior(container) {
|
|
40
42
|
const pres = container.querySelectorAll('pre');
|
|
41
43
|
const cleanups = [];
|
|
42
44
|
for (const pre of pres) {
|
|
43
|
-
// Skip if
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
if (pre.parentElement?.classList.contains('rf-codeblock'))
|
|
45
|
+
// Skip if a copy button was already injected in this pre's wrapper
|
|
46
|
+
const parent = pre.parentElement;
|
|
47
|
+
if (parent?.classList.contains('rf-codeblock') && parent.querySelector(':scope > .rf-codeblock__copy'))
|
|
47
48
|
continue;
|
|
48
49
|
const btn = document.createElement('button');
|
|
49
|
-
btn.className = 'rf-
|
|
50
|
+
btn.className = 'rf-codeblock__copy';
|
|
50
51
|
btn.type = 'button';
|
|
51
52
|
btn.setAttribute('aria-label', 'Copy code');
|
|
52
53
|
btn.appendChild(createIcon(COPY_ICON));
|
|
@@ -57,32 +58,45 @@ export function copyBehavior(container) {
|
|
|
57
58
|
btn.innerHTML = '';
|
|
58
59
|
btn.appendChild(createIcon(CHECK_ICON));
|
|
59
60
|
btn.setAttribute('aria-label', 'Copied');
|
|
60
|
-
btn.classList.add('rf-
|
|
61
|
+
btn.classList.add('rf-codeblock__copy--copied');
|
|
61
62
|
if (timeout)
|
|
62
63
|
clearTimeout(timeout);
|
|
63
64
|
timeout = setTimeout(() => {
|
|
64
65
|
btn.innerHTML = '';
|
|
65
66
|
btn.appendChild(createIcon(COPY_ICON));
|
|
66
67
|
btn.setAttribute('aria-label', 'Copy code');
|
|
67
|
-
btn.classList.remove('rf-
|
|
68
|
+
btn.classList.remove('rf-codeblock__copy--copied');
|
|
68
69
|
}, 2000);
|
|
69
70
|
});
|
|
70
71
|
};
|
|
71
72
|
btn.addEventListener('click', handler);
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
73
|
+
const existingWrapper = pre.parentElement?.classList.contains('rf-codeblock') ? pre.parentElement : null;
|
|
74
|
+
if (existingWrapper) {
|
|
75
|
+
// Add button to the existing SSR wrapper
|
|
76
|
+
existingWrapper.appendChild(btn);
|
|
77
|
+
cleanups.push(() => {
|
|
78
|
+
btn.removeEventListener('click', handler);
|
|
79
|
+
if (timeout)
|
|
80
|
+
clearTimeout(timeout);
|
|
81
|
+
btn.remove();
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
// Wrap pre in a new container
|
|
86
|
+
const wrapper = document.createElement('div');
|
|
87
|
+
wrapper.className = 'rf-codeblock';
|
|
88
|
+
pre.parentNode?.insertBefore(wrapper, pre);
|
|
89
|
+
wrapper.appendChild(pre);
|
|
90
|
+
wrapper.appendChild(btn);
|
|
91
|
+
cleanups.push(() => {
|
|
92
|
+
btn.removeEventListener('click', handler);
|
|
93
|
+
if (timeout)
|
|
94
|
+
clearTimeout(timeout);
|
|
95
|
+
// Unwrap: move pre back out, remove wrapper and button
|
|
96
|
+
wrapper.parentNode?.insertBefore(pre, wrapper);
|
|
97
|
+
wrapper.remove();
|
|
98
|
+
});
|
|
99
|
+
}
|
|
86
100
|
}
|
|
87
101
|
return () => cleanups.forEach((fn) => fn());
|
|
88
102
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"copy.js","sourceRoot":"","sources":["../../src/behaviors/copy.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,GAAG,4BAA4B,CAAC;AAE5C,MAAM,SAAS,GAAG,6HAA6H,CAAC;AAChJ,MAAM,UAAU,GAAG,qCAAqC,CAAC;AAEzD,SAAS,UAAU,CAAC,UAAkB;IACrC,MAAM,GAAG,GAAG,QAAQ,CAAC,eAAe,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACpD,GAAG,CAAC,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAChC,GAAG,CAAC,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IACjC,GAAG,CAAC,YAAY,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IACzC,GAAG,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,GAAG,CAAC,YAAY,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;IAC3C,GAAG,CAAC,YAAY,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;IACtC,GAAG,CAAC,YAAY,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;IAC5C,GAAG,CAAC,YAAY,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;IAC7C,GAAG,CAAC,SAAS,GAAG,UAAU,CAAC;IAC3B,OAAO,GAAG,CAAC;AACZ,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,WAAW,CAAC,GAAgB;IACpC,MAAM,QAAQ,GAAG,GAAG,CAAC,YAAY,CAAC,oBAAoB,CAAC,CAAC;IACxD,IAAI,QAAQ,EAAE,CAAC;QACd,MAAM,GAAG,GAAG,GAAG,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAC3C,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrE,CAAC;IACD,OAAO,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC;AAC9B,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"copy.js","sourceRoot":"","sources":["../../src/behaviors/copy.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Read content from a hidden `<
|
|
2
|
+
* Read content from a hidden `<template data-content="name">` or
|
|
3
|
+
* `<div data-content="name" style="display:none">` child.
|
|
3
4
|
* Used for large content (diagram source, sandbox HTML) that the web component
|
|
4
5
|
* needs but shouldn't be visually rendered. Created by postTransform hooks.
|
|
5
6
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/elements/helpers.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/elements/helpers.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAQvE"}
|
package/dist/elements/helpers.js
CHANGED
|
@@ -1,10 +1,17 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Read content from a hidden `<
|
|
2
|
+
* Read content from a hidden `<template data-content="name">` or
|
|
3
|
+
* `<div data-content="name" style="display:none">` child.
|
|
3
4
|
* Used for large content (diagram source, sandbox HTML) that the web component
|
|
4
5
|
* needs but shouldn't be visually rendered. Created by postTransform hooks.
|
|
5
6
|
*/
|
|
6
7
|
export function readHiddenContent(el, name) {
|
|
7
8
|
const container = el.querySelector(`[data-content="${name}"]`);
|
|
8
|
-
|
|
9
|
+
if (!container)
|
|
10
|
+
return '';
|
|
11
|
+
// <template> elements store content in a DocumentFragment
|
|
12
|
+
if (container instanceof HTMLTemplateElement) {
|
|
13
|
+
return container.content.textContent || '';
|
|
14
|
+
}
|
|
15
|
+
return container.textContent || '';
|
|
9
16
|
}
|
|
10
17
|
//# sourceMappingURL=helpers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/elements/helpers.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/elements/helpers.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,EAAe,EAAE,IAAY;IAC9D,MAAM,SAAS,GAAG,EAAE,CAAC,aAAa,CAAc,kBAAkB,IAAI,IAAI,CAAC,CAAC;IAC5E,IAAI,CAAC,SAAS;QAAE,OAAO,EAAE,CAAC;IAC1B,0DAA0D;IAC1D,IAAI,SAAS,YAAY,mBAAmB,EAAE,CAAC;QAC9C,OAAO,SAAS,CAAC,OAAO,CAAC,WAAW,IAAI,EAAE,CAAC;IAC5C,CAAC;IACD,OAAO,SAAS,CAAC,WAAW,IAAI,EAAE,CAAC;AACpC,CAAC"}
|
package/package.json
CHANGED