@refrakt-md/behaviors 0.5.0
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/accordion.d.ts +11 -0
- package/dist/behaviors/accordion.d.ts.map +1 -0
- package/dist/behaviors/accordion.js +85 -0
- package/dist/behaviors/accordion.js.map +1 -0
- package/dist/behaviors/copy.d.ts +9 -0
- package/dist/behaviors/copy.d.ts.map +1 -0
- package/dist/behaviors/copy.js +53 -0
- package/dist/behaviors/copy.js.map +1 -0
- package/dist/behaviors/datatable.d.ts +17 -0
- package/dist/behaviors/datatable.d.ts.map +1 -0
- package/dist/behaviors/datatable.js +210 -0
- package/dist/behaviors/datatable.js.map +1 -0
- package/dist/behaviors/form.d.ts +18 -0
- package/dist/behaviors/form.d.ts.map +1 -0
- package/dist/behaviors/form.js +88 -0
- package/dist/behaviors/form.js.map +1 -0
- package/dist/behaviors/preview.d.ts +20 -0
- package/dist/behaviors/preview.d.ts.map +1 -0
- package/dist/behaviors/preview.js +302 -0
- package/dist/behaviors/preview.js.map +1 -0
- package/dist/behaviors/reveal.d.ts +9 -0
- package/dist/behaviors/reveal.d.ts.map +1 -0
- package/dist/behaviors/reveal.js +70 -0
- package/dist/behaviors/reveal.js.map +1 -0
- package/dist/behaviors/tabs.d.ts +13 -0
- package/dist/behaviors/tabs.d.ts.map +1 -0
- package/dist/behaviors/tabs.js +142 -0
- package/dist/behaviors/tabs.js.map +1 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +61 -0
- package/dist/index.js.map +1 -0
- package/dist/types.d.ts +12 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/utils.d.ts +11 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +18 -0
- package/dist/utils.js.map +1 -0
- package/package.json +31 -0
package/dist/index.js
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { isFrameworkManaged } from './utils.js';
|
|
2
|
+
import { copyBehavior } from './behaviors/copy.js';
|
|
3
|
+
import { accordionBehavior } from './behaviors/accordion.js';
|
|
4
|
+
import { tabsBehavior } from './behaviors/tabs.js';
|
|
5
|
+
import { revealBehavior } from './behaviors/reveal.js';
|
|
6
|
+
import { datatableBehavior } from './behaviors/datatable.js';
|
|
7
|
+
import { formBehavior } from './behaviors/form.js';
|
|
8
|
+
import { previewBehavior } from './behaviors/preview.js';
|
|
9
|
+
/** Map of rune type → behavior function */
|
|
10
|
+
const behaviors = {
|
|
11
|
+
accordion: accordionBehavior,
|
|
12
|
+
accordionitem: accordionBehavior,
|
|
13
|
+
tabgroup: tabsBehavior,
|
|
14
|
+
codegroup: tabsBehavior,
|
|
15
|
+
reveal: revealBehavior,
|
|
16
|
+
datatable: datatableBehavior,
|
|
17
|
+
form: formBehavior,
|
|
18
|
+
preview: previewBehavior,
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Scan a container for rune elements and attach interactive behaviors.
|
|
22
|
+
*
|
|
23
|
+
* Discovers elements with `data-rune` attributes, checks for theme-framework
|
|
24
|
+
* overrides (Alpine.js, Stimulus), and wires up the appropriate behavior.
|
|
25
|
+
* Also enhances all `<pre>` elements with copy-to-clipboard buttons.
|
|
26
|
+
*
|
|
27
|
+
* Returns a cleanup function that removes all event listeners and injected elements.
|
|
28
|
+
*/
|
|
29
|
+
export function initRuneBehaviors(container = document, options) {
|
|
30
|
+
const cleanups = [];
|
|
31
|
+
// Rune-specific behaviors
|
|
32
|
+
container.querySelectorAll('[data-rune]').forEach((el) => {
|
|
33
|
+
const rune = el.getAttribute('data-rune');
|
|
34
|
+
// Skip if a theme framework has claimed this element
|
|
35
|
+
if (isFrameworkManaged(el))
|
|
36
|
+
return;
|
|
37
|
+
// Apply filters
|
|
38
|
+
if (options?.only && !options.only.includes(rune))
|
|
39
|
+
return;
|
|
40
|
+
if (options?.exclude && options.exclude.includes(rune))
|
|
41
|
+
return;
|
|
42
|
+
const fn = behaviors[rune];
|
|
43
|
+
if (fn) {
|
|
44
|
+
const cleanup = fn(el);
|
|
45
|
+
if (cleanup)
|
|
46
|
+
cleanups.push(cleanup);
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
// Copy buttons for all code blocks (not rune-specific)
|
|
50
|
+
const copyCleanup = copyBehavior(container);
|
|
51
|
+
cleanups.push(copyCleanup);
|
|
52
|
+
return () => cleanups.forEach((fn) => fn());
|
|
53
|
+
}
|
|
54
|
+
export { copyBehavior } from './behaviors/copy.js';
|
|
55
|
+
export { accordionBehavior } from './behaviors/accordion.js';
|
|
56
|
+
export { tabsBehavior } from './behaviors/tabs.js';
|
|
57
|
+
export { revealBehavior } from './behaviors/reveal.js';
|
|
58
|
+
export { datatableBehavior } from './behaviors/datatable.js';
|
|
59
|
+
export { formBehavior } from './behaviors/form.js';
|
|
60
|
+
export { previewBehavior } from './behaviors/preview.js';
|
|
61
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEzD,2CAA2C;AAC3C,MAAM,SAAS,GAA+B;IAC7C,SAAS,EAAE,iBAAiB;IAC5B,aAAa,EAAE,iBAAiB;IAChC,QAAQ,EAAE,YAAY;IACtB,SAAS,EAAE,YAAY;IACvB,MAAM,EAAE,cAAc;IACtB,SAAS,EAAE,iBAAiB;IAC5B,IAAI,EAAE,YAAY;IAClB,OAAO,EAAE,eAAe;CACxB,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,UAAU,iBAAiB,CAChC,YAAoC,QAAQ,EAC5C,OAAqB;IAErB,MAAM,QAAQ,GAAsB,EAAE,CAAC;IAEvC,0BAA0B;IAC1B,SAAS,CAAC,gBAAgB,CAAc,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE;QACrE,MAAM,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,WAAW,CAAE,CAAC;QAE3C,qDAAqD;QACrD,IAAI,kBAAkB,CAAC,EAAE,CAAC;YAAE,OAAO;QAEnC,gBAAgB;QAChB,IAAI,OAAO,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE,OAAO;QAC1D,IAAI,OAAO,EAAE,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE,OAAO;QAE/D,MAAM,EAAE,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;QAC3B,IAAI,EAAE,EAAE,CAAC;YACR,MAAM,OAAO,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;YACvB,IAAI,OAAO;gBAAE,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACrC,CAAC;IACF,CAAC,CAAC,CAAC;IAEH,uDAAuD;IACvD,MAAM,WAAW,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;IAC5C,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAE3B,OAAO,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;AAC7C,CAAC;AAED,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/** Cleanup function returned by a behavior — removes event listeners, etc. */
|
|
2
|
+
export type CleanupFn = () => void;
|
|
3
|
+
/** A behavior function that enhances a rune element. Optionally returns a cleanup function. */
|
|
4
|
+
export type BehaviorFn = (el: HTMLElement) => CleanupFn | void;
|
|
5
|
+
/** Options for initRuneBehaviors */
|
|
6
|
+
export interface InitOptions {
|
|
7
|
+
/** Only initialize behaviors for these rune types */
|
|
8
|
+
only?: string[];
|
|
9
|
+
/** Skip behaviors for these rune types */
|
|
10
|
+
exclude?: string[];
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,MAAM,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC;AAEnC,+FAA+F;AAC/F,MAAM,MAAM,UAAU,GAAG,CAAC,EAAE,EAAE,WAAW,KAAK,SAAS,GAAG,IAAI,CAAC;AAE/D,oCAAoC;AACpC,MAAM,WAAW,WAAW;IAC3B,qDAAqD;IACrD,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,0CAA0C;IAC1C,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
package/dist/utils.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Check if a theme framework (Alpine.js, Stimulus, etc.) has claimed
|
|
3
|
+
* interactivity for this element. The base behavior library steps aside
|
|
4
|
+
* to avoid double-binding.
|
|
5
|
+
*/
|
|
6
|
+
export declare function isFrameworkManaged(el: HTMLElement): boolean;
|
|
7
|
+
/** Generate a unique ID for ARIA wiring (aria-controls, aria-labelledby, etc.) */
|
|
8
|
+
export declare function uniqueId(prefix: string): string;
|
|
9
|
+
/** Reset the ID counter (for testing) */
|
|
10
|
+
export declare function resetIdCounter(): void;
|
|
11
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,WAAW,GAAG,OAAO,CAE3D;AAID,kFAAkF;AAClF,wBAAgB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED,yCAAyC;AACzC,wBAAgB,cAAc,IAAI,IAAI,CAErC"}
|
package/dist/utils.js
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Check if a theme framework (Alpine.js, Stimulus, etc.) has claimed
|
|
3
|
+
* interactivity for this element. The base behavior library steps aside
|
|
4
|
+
* to avoid double-binding.
|
|
5
|
+
*/
|
|
6
|
+
export function isFrameworkManaged(el) {
|
|
7
|
+
return el.hasAttribute('x-data') || el.hasAttribute('data-controller');
|
|
8
|
+
}
|
|
9
|
+
let idCounter = 0;
|
|
10
|
+
/** Generate a unique ID for ARIA wiring (aria-controls, aria-labelledby, etc.) */
|
|
11
|
+
export function uniqueId(prefix) {
|
|
12
|
+
return `${prefix}-${++idCounter}`;
|
|
13
|
+
}
|
|
14
|
+
/** Reset the ID counter (for testing) */
|
|
15
|
+
export function resetIdCounter() {
|
|
16
|
+
idCounter = 0;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,EAAe;IACjD,OAAO,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC;AACxE,CAAC;AAED,IAAI,SAAS,GAAG,CAAC,CAAC;AAElB,kFAAkF;AAClF,MAAM,UAAU,QAAQ,CAAC,MAAc;IACtC,OAAO,GAAG,MAAM,IAAI,EAAE,SAAS,EAAE,CAAC;AACnC,CAAC;AAED,yCAAyC;AACzC,MAAM,UAAU,cAAc;IAC7B,SAAS,GAAG,CAAC,CAAC;AACf,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@refrakt-md/behaviors",
|
|
3
|
+
"description": "Vanilla JS behavior library for refrakt.md runes — tabs, accordions, copy buttons, keyboard navigation",
|
|
4
|
+
"version": "0.5.0",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "https://github.com/refrakt-md/refrakt.git",
|
|
10
|
+
"directory": "packages/behaviors"
|
|
11
|
+
},
|
|
12
|
+
"bugs": "https://github.com/refrakt-md/refrakt/issues",
|
|
13
|
+
"homepage": "https://github.com/refrakt-md/refrakt",
|
|
14
|
+
"publishConfig": {
|
|
15
|
+
"access": "public"
|
|
16
|
+
},
|
|
17
|
+
"main": "dist/index.js",
|
|
18
|
+
"types": "dist/index.d.ts",
|
|
19
|
+
"exports": {
|
|
20
|
+
".": {
|
|
21
|
+
"types": "./dist/index.d.ts",
|
|
22
|
+
"default": "./dist/index.js"
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
"files": [
|
|
26
|
+
"dist"
|
|
27
|
+
],
|
|
28
|
+
"scripts": {
|
|
29
|
+
"build": "tsc"
|
|
30
|
+
}
|
|
31
|
+
}
|