@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.
Files changed (41) hide show
  1. package/dist/behaviors/accordion.d.ts +11 -0
  2. package/dist/behaviors/accordion.d.ts.map +1 -0
  3. package/dist/behaviors/accordion.js +85 -0
  4. package/dist/behaviors/accordion.js.map +1 -0
  5. package/dist/behaviors/copy.d.ts +9 -0
  6. package/dist/behaviors/copy.d.ts.map +1 -0
  7. package/dist/behaviors/copy.js +53 -0
  8. package/dist/behaviors/copy.js.map +1 -0
  9. package/dist/behaviors/datatable.d.ts +17 -0
  10. package/dist/behaviors/datatable.d.ts.map +1 -0
  11. package/dist/behaviors/datatable.js +210 -0
  12. package/dist/behaviors/datatable.js.map +1 -0
  13. package/dist/behaviors/form.d.ts +18 -0
  14. package/dist/behaviors/form.d.ts.map +1 -0
  15. package/dist/behaviors/form.js +88 -0
  16. package/dist/behaviors/form.js.map +1 -0
  17. package/dist/behaviors/preview.d.ts +20 -0
  18. package/dist/behaviors/preview.d.ts.map +1 -0
  19. package/dist/behaviors/preview.js +302 -0
  20. package/dist/behaviors/preview.js.map +1 -0
  21. package/dist/behaviors/reveal.d.ts +9 -0
  22. package/dist/behaviors/reveal.d.ts.map +1 -0
  23. package/dist/behaviors/reveal.js +70 -0
  24. package/dist/behaviors/reveal.js.map +1 -0
  25. package/dist/behaviors/tabs.d.ts +13 -0
  26. package/dist/behaviors/tabs.d.ts.map +1 -0
  27. package/dist/behaviors/tabs.js +142 -0
  28. package/dist/behaviors/tabs.js.map +1 -0
  29. package/dist/index.d.ts +20 -0
  30. package/dist/index.d.ts.map +1 -0
  31. package/dist/index.js +61 -0
  32. package/dist/index.js.map +1 -0
  33. package/dist/types.d.ts +12 -0
  34. package/dist/types.d.ts.map +1 -0
  35. package/dist/types.js +2 -0
  36. package/dist/types.js.map +1 -0
  37. package/dist/utils.d.ts +11 -0
  38. package/dist/utils.d.ts.map +1 -0
  39. package/dist/utils.js +18 -0
  40. package/dist/utils.js.map +1 -0
  41. package/package.json +31 -0
@@ -0,0 +1,302 @@
1
+ const SVG_NS = 'http://www.w3.org/2000/svg';
2
+ function createIcon(content) {
3
+ const svg = document.createElementNS(SVG_NS, 'svg');
4
+ svg.setAttribute('width', '14');
5
+ svg.setAttribute('height', '14');
6
+ svg.setAttribute('viewBox', '0 0 24 24');
7
+ svg.setAttribute('fill', 'none');
8
+ svg.setAttribute('stroke', 'currentColor');
9
+ svg.setAttribute('stroke-width', '2');
10
+ svg.setAttribute('stroke-linecap', 'round');
11
+ svg.setAttribute('stroke-linejoin', 'round');
12
+ svg.innerHTML = content;
13
+ return svg;
14
+ }
15
+ const ICONS = {
16
+ eye: '<path d="M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"/><circle cx="12" cy="12" r="3"/>',
17
+ code: '<polyline points="16 18 22 12 16 6"/><polyline points="8 6 2 12 8 18"/>',
18
+ mobile: '<rect x="5" y="2" width="14" height="20" rx="2" ry="2"/><line x1="12" y1="18" x2="12.01" y2="18"/>',
19
+ tablet: '<rect x="4" y="2" width="16" height="20" rx="2" ry="2"/><line x1="12" y1="18" x2="12.01" y2="18"/>',
20
+ desktop: '<rect x="2" y="3" width="20" height="14" rx="2" ry="2"/><line x1="8" y1="21" x2="16" y2="21"/><line x1="12" y1="17" x2="12" y2="21"/>',
21
+ sun: '<circle cx="12" cy="12" r="5"/><line x1="12" y1="1" x2="12" y2="3"/><line x1="12" y1="21" x2="12" y2="23"/><line x1="4.22" y1="4.22" x2="5.64" y2="5.64"/><line x1="18.36" y1="18.36" x2="19.78" y2="19.78"/><line x1="1" y1="12" x2="3" y2="12"/><line x1="21" y1="12" x2="23" y2="12"/><line x1="4.22" y1="19.78" x2="5.64" y2="18.36"/><line x1="18.36" y1="5.64" x2="19.78" y2="4.22"/>',
22
+ moon: '<path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"/>',
23
+ };
24
+ const VIEWPORT_ICONS = {
25
+ mobile: ICONS.mobile,
26
+ tablet: ICONS.tablet,
27
+ desktop: ICONS.desktop,
28
+ };
29
+ const VIEWPORT_PRESETS = {
30
+ mobile: { width: 375, label: '375px' },
31
+ tablet: { width: 768, label: '768px' },
32
+ desktop: { width: null, label: 'Full' },
33
+ };
34
+ /**
35
+ * Preview behavior for `[data-rune="preview"]`.
36
+ *
37
+ * Creates a toolbar with:
38
+ * - View toggle: switch between preview and source code views
39
+ * - Viewport toggle: responsive viewport presets (mobile, tablet, desktop)
40
+ * - Theme toggle: auto, light, dark theme modes
41
+ *
42
+ * Source panel supports up to three tabs:
43
+ * - Markdoc: original authoring syntax (from source property)
44
+ * - Rune: pre-engine structural HTML (from htmlSource property)
45
+ * - HTML: post-engine themed HTML (from themedSource property, generated at build time)
46
+ *
47
+ * Reads configuration from data attributes:
48
+ * - `data-theme`: initial theme mode (default: 'auto')
49
+ * - `data-responsive`: comma-separated viewport presets
50
+ */
51
+ export function previewBehavior(el) {
52
+ const initialTheme = (el.getAttribute('data-theme') || 'auto');
53
+ const responsiveStr = el.getAttribute('data-responsive') || '';
54
+ const responsivePresets = responsiveStr
55
+ .split(',')
56
+ .map((s) => s.trim())
57
+ .filter((s) => s in VIEWPORT_PRESETS);
58
+ const hasResponsive = responsivePresets.length > 0;
59
+ // Separate source elements from content children
60
+ const sourceEl = el.querySelector('[property="source"]');
61
+ const htmlSourceEl = el.querySelector('[property="htmlSource"]');
62
+ const themedSourceEl = el.querySelector('[property="themedSource"]');
63
+ const contentChildren = Array.from(el.children).filter((child) => child !== sourceEl &&
64
+ child !== htmlSourceEl &&
65
+ child !== themedSourceEl &&
66
+ !child.matches?.('meta[property]'));
67
+ const hasSource = sourceEl !== null || htmlSourceEl !== null;
68
+ // State
69
+ let view = 'preview';
70
+ let themeMode = initialTheme;
71
+ let activeViewport = hasResponsive
72
+ ? responsivePresets[responsivePresets.length - 1]
73
+ : null;
74
+ const cleanups = [];
75
+ // Build toolbar
76
+ const toolbar = document.createElement('div');
77
+ toolbar.className = 'rf-preview__toolbar';
78
+ const titleEl = document.createElement('span');
79
+ titleEl.className = 'rf-preview__title';
80
+ toolbar.appendChild(titleEl);
81
+ const controls = document.createElement('div');
82
+ controls.className = 'rf-preview__controls';
83
+ toolbar.appendChild(controls);
84
+ // View toggle buttons
85
+ let viewPreviewBtn = null;
86
+ let viewCodeBtn = null;
87
+ if (hasSource) {
88
+ const viewToggle = document.createElement('div');
89
+ viewToggle.className = 'rf-preview__view-toggle';
90
+ viewPreviewBtn = document.createElement('button');
91
+ viewPreviewBtn.className = 'rf-preview__toggle-btn rf-preview__toggle-btn--active';
92
+ viewPreviewBtn.setAttribute('aria-label', 'Preview');
93
+ viewPreviewBtn.setAttribute('title', 'Preview');
94
+ viewPreviewBtn.appendChild(createIcon(ICONS.eye));
95
+ viewCodeBtn = document.createElement('button');
96
+ viewCodeBtn.className = 'rf-preview__toggle-btn';
97
+ viewCodeBtn.setAttribute('aria-label', 'View source');
98
+ viewCodeBtn.setAttribute('title', 'View source');
99
+ viewCodeBtn.appendChild(createIcon(ICONS.code));
100
+ viewToggle.appendChild(viewPreviewBtn);
101
+ viewToggle.appendChild(viewCodeBtn);
102
+ controls.appendChild(viewToggle);
103
+ const onPreview = () => { view = 'preview'; render(); };
104
+ const onCode = () => { view = 'code'; render(); };
105
+ viewPreviewBtn.addEventListener('click', onPreview);
106
+ viewCodeBtn.addEventListener('click', onCode);
107
+ cleanups.push(() => {
108
+ viewPreviewBtn.removeEventListener('click', onPreview);
109
+ viewCodeBtn.removeEventListener('click', onCode);
110
+ });
111
+ }
112
+ // Viewport toggle buttons
113
+ const viewportButtons = new Map();
114
+ if (hasResponsive) {
115
+ const viewportToggle = document.createElement('div');
116
+ viewportToggle.className = 'rf-preview__viewport-toggle';
117
+ for (const preset of responsivePresets) {
118
+ const btn = document.createElement('button');
119
+ btn.className = 'rf-preview__toggle-btn';
120
+ btn.setAttribute('aria-label', `${VIEWPORT_PRESETS[preset].label} viewport`);
121
+ btn.setAttribute('title', VIEWPORT_PRESETS[preset].label);
122
+ btn.appendChild(createIcon(VIEWPORT_ICONS[preset] || ICONS.desktop));
123
+ const onClick = () => { activeViewport = preset; render(); };
124
+ btn.addEventListener('click', onClick);
125
+ cleanups.push(() => btn.removeEventListener('click', onClick));
126
+ viewportToggle.appendChild(btn);
127
+ viewportButtons.set(preset, btn);
128
+ }
129
+ controls.appendChild(viewportToggle);
130
+ }
131
+ // Theme toggle buttons
132
+ const themeToggle = document.createElement('div');
133
+ themeToggle.className = 'rf-preview__toggle';
134
+ const themeOptions = [
135
+ { mode: 'auto', label: 'Auto', title: 'System preference', icon: ICONS.desktop },
136
+ { mode: 'light', label: 'Light', title: 'Light mode', icon: ICONS.sun },
137
+ { mode: 'dark', label: 'Dark', title: 'Dark mode', icon: ICONS.moon },
138
+ ];
139
+ const themeButtons = new Map();
140
+ for (const opt of themeOptions) {
141
+ const btn = document.createElement('button');
142
+ btn.className = 'rf-preview__toggle-btn';
143
+ btn.setAttribute('aria-label', `${opt.label} theme`);
144
+ btn.setAttribute('title', opt.title);
145
+ btn.appendChild(createIcon(opt.icon));
146
+ const onClick = () => { themeMode = opt.mode; render(); };
147
+ btn.addEventListener('click', onClick);
148
+ cleanups.push(() => btn.removeEventListener('click', onClick));
149
+ themeToggle.appendChild(btn);
150
+ themeButtons.set(opt.mode, btn);
151
+ }
152
+ controls.appendChild(themeToggle);
153
+ // Wrap content in canvas
154
+ const canvas = document.createElement('div');
155
+ canvas.className = 'rf-preview__canvas';
156
+ // Viewport frame (if responsive)
157
+ let viewportFrame = null;
158
+ let viewportLabel = null;
159
+ if (hasResponsive) {
160
+ viewportFrame = document.createElement('div');
161
+ viewportFrame.className = 'rf-preview__viewport-frame';
162
+ viewportLabel = document.createElement('span');
163
+ viewportLabel.className = 'rf-preview__viewport-label';
164
+ viewportLabel.hidden = true;
165
+ viewportFrame.appendChild(viewportLabel);
166
+ for (const child of contentChildren) {
167
+ viewportFrame.appendChild(child);
168
+ }
169
+ canvas.appendChild(viewportFrame);
170
+ }
171
+ else {
172
+ for (const child of contentChildren) {
173
+ canvas.appendChild(child);
174
+ }
175
+ }
176
+ const sourceTabs = [];
177
+ let sourcePanel = null;
178
+ let sourceTabButtons = null;
179
+ let activeSourceTab = '';
180
+ if (hasSource) {
181
+ sourcePanel = document.createElement('div');
182
+ sourcePanel.className = 'rf-preview__source';
183
+ if (sourceEl) {
184
+ const panel = document.createElement('div');
185
+ panel.appendChild(sourceEl);
186
+ sourceTabs.push({ key: 'markdoc', label: 'Markdoc', panel });
187
+ }
188
+ if (htmlSourceEl) {
189
+ const panel = document.createElement('div');
190
+ panel.appendChild(htmlSourceEl);
191
+ sourceTabs.push({ key: 'rune', label: 'Rune', panel });
192
+ }
193
+ // Themed HTML tab (generated at build time by engine postTransform, with Shiki highlighting)
194
+ if (themedSourceEl) {
195
+ const panel = document.createElement('div');
196
+ panel.appendChild(themedSourceEl);
197
+ sourceTabs.push({ key: 'html', label: 'HTML', panel });
198
+ }
199
+ activeSourceTab = sourceTabs[0]?.key ?? '';
200
+ // Create tab bar when multiple sources exist
201
+ if (sourceTabs.length > 1) {
202
+ const tabBar = document.createElement('div');
203
+ tabBar.className = 'rf-preview__source-tabs';
204
+ sourceTabButtons = new Map();
205
+ for (const tab of sourceTabs) {
206
+ const btn = document.createElement('button');
207
+ btn.className = 'rf-preview__source-tab';
208
+ if (tab.key === activeSourceTab)
209
+ btn.classList.add('rf-preview__source-tab--active');
210
+ btn.textContent = tab.label;
211
+ const onClick = () => { activeSourceTab = tab.key; render(); };
212
+ btn.addEventListener('click', onClick);
213
+ cleanups.push(() => btn.removeEventListener('click', onClick));
214
+ tabBar.appendChild(btn);
215
+ sourceTabButtons.set(tab.key, btn);
216
+ }
217
+ sourcePanel.appendChild(tabBar);
218
+ }
219
+ // Add all source panels
220
+ for (const tab of sourceTabs) {
221
+ tab.panel.hidden = tab.key !== activeSourceTab;
222
+ sourcePanel.appendChild(tab.panel);
223
+ }
224
+ }
225
+ // Insert into DOM
226
+ el.appendChild(toolbar);
227
+ if (sourcePanel)
228
+ el.appendChild(sourcePanel);
229
+ el.appendChild(canvas);
230
+ function render() {
231
+ // View toggle
232
+ if (viewPreviewBtn && viewCodeBtn) {
233
+ viewPreviewBtn.classList.toggle('rf-preview__toggle-btn--active', view === 'preview');
234
+ viewCodeBtn.classList.toggle('rf-preview__toggle-btn--active', view === 'code');
235
+ }
236
+ if (sourcePanel) {
237
+ sourcePanel.hidden = view !== 'code';
238
+ }
239
+ canvas.hidden = view === 'code' && hasSource;
240
+ // Source tab toggle
241
+ if (sourceTabButtons) {
242
+ for (const [key, btn] of sourceTabButtons) {
243
+ btn.classList.toggle('rf-preview__source-tab--active', activeSourceTab === key);
244
+ }
245
+ }
246
+ for (const tab of sourceTabs) {
247
+ tab.panel.hidden = tab.key !== activeSourceTab;
248
+ }
249
+ // Viewport toggle
250
+ for (const [preset, btn] of viewportButtons) {
251
+ btn.classList.toggle('rf-preview__toggle-btn--active', activeViewport === preset);
252
+ }
253
+ if (viewportFrame) {
254
+ const width = activeViewport && VIEWPORT_PRESETS[activeViewport]
255
+ ? VIEWPORT_PRESETS[activeViewport].width
256
+ : null;
257
+ viewportFrame.classList.toggle('rf-preview__viewport-frame--constrained', !!width);
258
+ viewportFrame.style.maxWidth = width ? `${width}px` : '';
259
+ if (viewportLabel) {
260
+ if (width && activeViewport) {
261
+ viewportLabel.textContent = VIEWPORT_PRESETS[activeViewport].label;
262
+ viewportLabel.hidden = false;
263
+ }
264
+ else {
265
+ viewportLabel.hidden = true;
266
+ }
267
+ }
268
+ }
269
+ // Theme toggle
270
+ for (const [mode, btn] of themeButtons) {
271
+ btn.classList.toggle('rf-preview__toggle-btn--active', themeMode === mode);
272
+ }
273
+ const resolvedTheme = themeMode === 'auto' ? undefined : themeMode;
274
+ if (resolvedTheme) {
275
+ canvas.setAttribute('data-theme', resolvedTheme);
276
+ }
277
+ else {
278
+ canvas.removeAttribute('data-theme');
279
+ }
280
+ }
281
+ // Initial render
282
+ render();
283
+ return () => {
284
+ cleanups.forEach((fn) => fn());
285
+ // Restore DOM: move children back to el, remove toolbar/canvas/source wrappers
286
+ if (sourceEl)
287
+ el.appendChild(sourceEl);
288
+ if (htmlSourceEl)
289
+ el.appendChild(htmlSourceEl);
290
+ if (themedSourceEl)
291
+ el.appendChild(themedSourceEl);
292
+ for (const child of Array.from(viewportFrame?.children ?? canvas.children)) {
293
+ if (child !== viewportLabel) {
294
+ el.appendChild(child);
295
+ }
296
+ }
297
+ toolbar.remove();
298
+ canvas.remove();
299
+ sourcePanel?.remove();
300
+ };
301
+ }
302
+ //# sourceMappingURL=preview.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preview.js","sourceRoot":"","sources":["../../src/behaviors/preview.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { CleanupFn } from '../types.js';
2
+ /**
3
+ * Reveal behavior for `[data-rune="reveal"]`.
4
+ *
5
+ * Shows steps one at a time with Continue/Start Over controls.
6
+ * Steps are shown/hidden via `rf-reveal-step--visible` / `rf-reveal-step--hidden` classes.
7
+ */
8
+ export declare function revealBehavior(el: HTMLElement): CleanupFn;
9
+ //# sourceMappingURL=reveal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reveal.d.ts","sourceRoot":"","sources":["../../src/behaviors/reveal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,WAAW,GAAG,SAAS,CAuEzD"}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * Reveal behavior for `[data-rune="reveal"]`.
3
+ *
4
+ * Shows steps one at a time with Continue/Start Over controls.
5
+ * Steps are shown/hidden via `rf-reveal-step--visible` / `rf-reveal-step--hidden` classes.
6
+ */
7
+ export function revealBehavior(el) {
8
+ // Find steps — look in data-name="steps" container or direct children
9
+ const stepsContainer = el.querySelector('[data-name="steps"]') || el;
10
+ const steps = Array.from(stepsContainer.querySelectorAll('[data-rune="revealstep"], [typeof="RevealStep"]'));
11
+ if (steps.length === 0)
12
+ return () => { };
13
+ let visibleCount = 1;
14
+ // Create Continue button
15
+ const nextBtn = document.createElement('button');
16
+ nextBtn.className = 'rf-reveal__next';
17
+ nextBtn.textContent = 'Continue';
18
+ // Create Start Over button
19
+ const resetBtn = document.createElement('button');
20
+ resetBtn.className = 'rf-reveal__reset';
21
+ resetBtn.textContent = 'Start over';
22
+ function render() {
23
+ for (let i = 0; i < steps.length; i++) {
24
+ const visible = i < visibleCount;
25
+ steps[i].classList.toggle('rf-reveal-step--visible', visible);
26
+ steps[i].classList.toggle('rf-reveal-step--hidden', !visible);
27
+ }
28
+ // Show Continue button if more steps to reveal
29
+ if (visibleCount < steps.length) {
30
+ if (!nextBtn.parentNode)
31
+ el.appendChild(nextBtn);
32
+ resetBtn.remove();
33
+ }
34
+ else if (steps.length > 1) {
35
+ // All steps visible and more than one — show Start Over
36
+ nextBtn.remove();
37
+ if (!resetBtn.parentNode)
38
+ el.appendChild(resetBtn);
39
+ }
40
+ else {
41
+ nextBtn.remove();
42
+ resetBtn.remove();
43
+ }
44
+ }
45
+ const onNext = () => {
46
+ if (visibleCount < steps.length) {
47
+ visibleCount++;
48
+ render();
49
+ }
50
+ };
51
+ const onReset = () => {
52
+ visibleCount = 1;
53
+ render();
54
+ };
55
+ nextBtn.addEventListener('click', onNext);
56
+ resetBtn.addEventListener('click', onReset);
57
+ // Initial render
58
+ render();
59
+ return () => {
60
+ nextBtn.removeEventListener('click', onNext);
61
+ resetBtn.removeEventListener('click', onReset);
62
+ nextBtn.remove();
63
+ resetBtn.remove();
64
+ // Remove visibility classes
65
+ for (const step of steps) {
66
+ step.classList.remove('rf-reveal-step--visible', 'rf-reveal-step--hidden');
67
+ }
68
+ };
69
+ }
70
+ //# sourceMappingURL=reveal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reveal.js","sourceRoot":"","sources":["../../src/behaviors/reveal.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { CleanupFn } from '../types.js';
2
+ /**
3
+ * Tabs behavior for `[data-rune="tabgroup"]` and `[data-rune="codegroup"]`.
4
+ *
5
+ * Discovers Tab/TabPanel items in the identity-transformed HTML structure,
6
+ * creates a tablist bar with buttons, and toggles panel visibility.
7
+ *
8
+ * - ArrowLeft/ArrowRight keyboard navigation (with wrapping)
9
+ * - Home/End jump to first/last tab
10
+ * - ARIA: role="tablist", role="tab", role="tabpanel", aria-selected, aria-controls
11
+ */
12
+ export declare function tabsBehavior(el: HTMLElement): CleanupFn;
13
+ //# sourceMappingURL=tabs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tabs.d.ts","sourceRoot":"","sources":["../../src/behaviors/tabs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAG7C;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,EAAE,EAAE,WAAW,GAAG,SAAS,CAqJvD"}
@@ -0,0 +1,142 @@
1
+ import { uniqueId } from '../utils.js';
2
+ /**
3
+ * Tabs behavior for `[data-rune="tabgroup"]` and `[data-rune="codegroup"]`.
4
+ *
5
+ * Discovers Tab/TabPanel items in the identity-transformed HTML structure,
6
+ * creates a tablist bar with buttons, and toggles panel visibility.
7
+ *
8
+ * - ArrowLeft/ArrowRight keyboard navigation (with wrapping)
9
+ * - Home/End jump to first/last tab
10
+ * - ARIA: role="tablist", role="tab", role="tabpanel", aria-selected, aria-controls
11
+ */
12
+ export function tabsBehavior(el) {
13
+ // The rune schema produces two <ul> elements:
14
+ // <ul data-name="tabs"> for Tab items, <ul data-name="panels"> for TabPanel items.
15
+ // Fall back to positional lookup for compatibility with single-<ul> structures.
16
+ const allUls = el.querySelectorAll('ul');
17
+ const tabsUl = el.querySelector('ul[data-name="tabs"]') || allUls[0];
18
+ const panelsUl = el.querySelector('ul[data-name="panels"]') || allUls[1] || tabsUl;
19
+ if (!tabsUl)
20
+ return () => { };
21
+ const tabItems = Array.from(tabsUl.children).filter((c) => c instanceof HTMLElement && c.tagName === 'LI' &&
22
+ c.getAttribute('typeof') === 'Tab');
23
+ const panelItems = Array.from(panelsUl.children).filter((c) => c instanceof HTMLElement && c.tagName === 'LI' &&
24
+ c.getAttribute('typeof') === 'TabPanel');
25
+ if (tabItems.length === 0 || panelItems.length === 0)
26
+ return () => { };
27
+ // Extract tab names from Tab items
28
+ const tabNames = tabItems.map((item) => {
29
+ const nameEl = item.querySelector('[property="name"]');
30
+ return nameEl?.textContent?.trim() || item.textContent?.trim() || '';
31
+ });
32
+ // Generate IDs for ARIA wiring
33
+ const tabIds = tabNames.map(() => uniqueId('rf-tab'));
34
+ const panelIds = panelItems.map(() => uniqueId('rf-tabpanel'));
35
+ // Create tab bar
36
+ const tabBar = document.createElement('div');
37
+ tabBar.setAttribute('role', 'tablist');
38
+ tabBar.className = el.getAttribute('data-rune') === 'codegroup'
39
+ ? 'rf-codegroup__tabs'
40
+ : 'rf-tabs__bar';
41
+ const buttonClass = el.getAttribute('data-rune') === 'codegroup'
42
+ ? 'rf-codegroup__tab'
43
+ : 'rf-tabs__button';
44
+ const buttons = tabNames.map((name, i) => {
45
+ const btn = document.createElement('button');
46
+ btn.className = buttonClass;
47
+ btn.setAttribute('role', 'tab');
48
+ btn.setAttribute('aria-selected', String(i === 0));
49
+ btn.id = tabIds[i];
50
+ if (panelIds[i])
51
+ btn.setAttribute('aria-controls', panelIds[i]);
52
+ btn.textContent = name;
53
+ tabBar.appendChild(btn);
54
+ return btn;
55
+ });
56
+ // Insert tab bar — for codegroup, after topbar; for tabs, before the tabs ul
57
+ const topbar = el.querySelector('[data-name="topbar"]');
58
+ if (topbar) {
59
+ topbar.after(tabBar);
60
+ }
61
+ else {
62
+ tabsUl.before(tabBar);
63
+ }
64
+ // Set up panels with ARIA attributes
65
+ for (let i = 0; i < panelItems.length; i++) {
66
+ panelItems[i].setAttribute('role', 'tabpanel');
67
+ if (panelIds[i])
68
+ panelItems[i].id = panelIds[i];
69
+ if (tabIds[i])
70
+ panelItems[i].setAttribute('aria-labelledby', tabIds[i]);
71
+ }
72
+ // Hide Tab label items (replaced by tablist buttons)
73
+ for (const item of tabItems) {
74
+ item.hidden = true;
75
+ }
76
+ let activeIndex = 0;
77
+ function setActive(index) {
78
+ activeIndex = index;
79
+ for (let i = 0; i < buttons.length; i++) {
80
+ buttons[i].setAttribute('aria-selected', String(i === activeIndex));
81
+ buttons[i].classList.toggle(`${buttonClass}--active`, i === activeIndex);
82
+ }
83
+ for (let i = 0; i < panelItems.length; i++) {
84
+ panelItems[i].hidden = i !== activeIndex;
85
+ }
86
+ }
87
+ // Initial state
88
+ setActive(0);
89
+ // Click handlers
90
+ const cleanups = [];
91
+ for (let i = 0; i < buttons.length; i++) {
92
+ const handler = () => setActive(i);
93
+ buttons[i].addEventListener('click', handler);
94
+ cleanups.push(() => buttons[i].removeEventListener('click', handler));
95
+ }
96
+ // Keyboard navigation
97
+ const onKeydown = (e) => {
98
+ const target = e.target;
99
+ const index = buttons.indexOf(target);
100
+ if (index === -1)
101
+ return;
102
+ let next = null;
103
+ switch (e.key) {
104
+ case 'ArrowRight':
105
+ next = (index + 1) % buttons.length;
106
+ break;
107
+ case 'ArrowLeft':
108
+ next = (index - 1 + buttons.length) % buttons.length;
109
+ break;
110
+ case 'Home':
111
+ next = 0;
112
+ break;
113
+ case 'End':
114
+ next = buttons.length - 1;
115
+ break;
116
+ default:
117
+ return;
118
+ }
119
+ if (next !== null) {
120
+ e.preventDefault();
121
+ buttons[next].focus();
122
+ setActive(next);
123
+ }
124
+ };
125
+ tabBar.addEventListener('keydown', onKeydown);
126
+ cleanups.push(() => tabBar.removeEventListener('keydown', onKeydown));
127
+ return () => {
128
+ cleanups.forEach((fn) => fn());
129
+ // Restore DOM: remove tab bar, unhide items
130
+ tabBar.remove();
131
+ for (const item of tabItems) {
132
+ item.hidden = false;
133
+ }
134
+ for (const item of panelItems) {
135
+ item.hidden = false;
136
+ item.removeAttribute('role');
137
+ item.removeAttribute('id');
138
+ item.removeAttribute('aria-labelledby');
139
+ }
140
+ };
141
+ }
142
+ //# sourceMappingURL=tabs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tabs.js","sourceRoot":"","sources":["../../src/behaviors/tabs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import type { InitOptions } from './types.js';
2
+ /**
3
+ * Scan a container for rune elements and attach interactive behaviors.
4
+ *
5
+ * Discovers elements with `data-rune` attributes, checks for theme-framework
6
+ * overrides (Alpine.js, Stimulus), and wires up the appropriate behavior.
7
+ * Also enhances all `<pre>` elements with copy-to-clipboard buttons.
8
+ *
9
+ * Returns a cleanup function that removes all event listeners and injected elements.
10
+ */
11
+ export declare function initRuneBehaviors(container?: HTMLElement | Document, options?: InitOptions): () => void;
12
+ export { copyBehavior } from './behaviors/copy.js';
13
+ export { accordionBehavior } from './behaviors/accordion.js';
14
+ export { tabsBehavior } from './behaviors/tabs.js';
15
+ export { revealBehavior } from './behaviors/reveal.js';
16
+ export { datatableBehavior } from './behaviors/datatable.js';
17
+ export { formBehavior } from './behaviors/form.js';
18
+ export { previewBehavior } from './behaviors/preview.js';
19
+ export type { BehaviorFn, CleanupFn, InitOptions } from './types.js';
20
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAc,WAAW,EAAE,MAAM,YAAY,CAAC;AAsB1D;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAChC,SAAS,GAAE,WAAW,GAAG,QAAmB,EAC5C,OAAO,CAAC,EAAE,WAAW,GACnB,MAAM,IAAI,CA0BZ;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;AACzD,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC"}