@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
|
@@ -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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"}
|
package/dist/index.d.ts
ADDED
|
@@ -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"}
|