@refrakt-md/behaviors 0.11.3 → 0.14.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.
@@ -0,0 +1,11 @@
1
+ import type { CleanupFn } from '../types.js';
2
+ /**
3
+ * Collapsible nav behavior — runs on `[data-rune="nav"][data-collapsible="true"]`.
4
+ *
5
+ * Each NavGroup's heading becomes a focusable toggle that flips
6
+ * `data-collapsed` between `"true"` and `"false"`. Build-time auto-open
7
+ * sets the initial state per group based on the current URL; this
8
+ * behavior layers click and keyboard interaction on top.
9
+ */
10
+ export declare function navCollapsibleBehavior(el: HTMLElement): CleanupFn;
11
+ //# sourceMappingURL=nav-collapsible.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nav-collapsible.d.ts","sourceRoot":"","sources":["../../src/behaviors/nav-collapsible.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAG7C;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,EAAE,EAAE,WAAW,GAAG,SAAS,CA+DjE"}
@@ -0,0 +1,61 @@
1
+ import { uniqueId } from '../utils.js';
2
+ /**
3
+ * Collapsible nav behavior — runs on `[data-rune="nav"][data-collapsible="true"]`.
4
+ *
5
+ * Each NavGroup's heading becomes a focusable toggle that flips
6
+ * `data-collapsed` between `"true"` and `"false"`. Build-time auto-open
7
+ * sets the initial state per group based on the current URL; this
8
+ * behavior layers click and keyboard interaction on top.
9
+ */
10
+ export function navCollapsibleBehavior(el) {
11
+ if (el.getAttribute('data-collapsible') !== 'true')
12
+ return () => { };
13
+ const groups = Array.from(el.querySelectorAll('[data-rune="nav-group"]'));
14
+ if (groups.length === 0)
15
+ return () => { };
16
+ const cleanups = [];
17
+ for (const group of groups) {
18
+ const heading = group.querySelector('[data-field="title"], h1, h2, h3, h4, h5, h6');
19
+ if (!heading)
20
+ continue;
21
+ const panel = group.querySelector(':scope > ul, :scope > ol');
22
+ if (!panel)
23
+ continue;
24
+ const triggerId = heading.id || uniqueId('rf-nav-trigger');
25
+ const panelId = panel.id || uniqueId('rf-nav-panel');
26
+ heading.id = triggerId;
27
+ panel.id = panelId;
28
+ // Initial collapsed state — default to "true" if not set
29
+ const current = group.getAttribute('data-collapsed') ?? 'true';
30
+ if (current !== 'false')
31
+ group.setAttribute('data-collapsed', 'true');
32
+ heading.setAttribute('role', 'button');
33
+ heading.setAttribute('tabindex', '0');
34
+ heading.setAttribute('aria-controls', panelId);
35
+ heading.setAttribute('aria-expanded', group.getAttribute('data-collapsed') === 'false' ? 'true' : 'false');
36
+ panel.setAttribute('aria-labelledby', triggerId);
37
+ const toggle = () => {
38
+ const open = group.getAttribute('data-collapsed') === 'false';
39
+ group.setAttribute('data-collapsed', open ? 'true' : 'false');
40
+ heading.setAttribute('aria-expanded', open ? 'false' : 'true');
41
+ };
42
+ const onClick = (e) => {
43
+ e.preventDefault();
44
+ toggle();
45
+ };
46
+ const onKey = (e) => {
47
+ if (e.key === 'Enter' || e.key === ' ') {
48
+ e.preventDefault();
49
+ toggle();
50
+ }
51
+ };
52
+ heading.addEventListener('click', onClick);
53
+ heading.addEventListener('keydown', onKey);
54
+ cleanups.push(() => {
55
+ heading.removeEventListener('click', onClick);
56
+ heading.removeEventListener('keydown', onKey);
57
+ });
58
+ }
59
+ return () => cleanups.forEach((fn) => fn());
60
+ }
61
+ //# sourceMappingURL=nav-collapsible.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nav-collapsible.js","sourceRoot":"","sources":["../../src/behaviors/nav-collapsible.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type { CleanupFn } from '../types.js';
2
+ /**
3
+ * Menubar nav behavior — runs on `[data-rune="nav"][data-layout="menubar"]`.
4
+ *
5
+ * Desktop: group triggers open submenus on click. Only one open at a time.
6
+ * Mobile (theme-controlled via CSS): the rune-emitted `data-name="trigger"`
7
+ * button toggles `data-open` on the whole nav element. Groups continue to
8
+ * use `data-open` per-group inside the mobile panel.
9
+ *
10
+ * Keyboard model follows the WAI-ARIA menubar pattern:
11
+ * - ArrowLeft/Right move between triggers
12
+ * - ArrowDown enters the open submenu (or opens one)
13
+ * - ArrowUp/Down move within an open submenu
14
+ * - Escape closes and returns focus to the trigger
15
+ */
16
+ export declare function navMenubarBehavior(el: HTMLElement): CleanupFn;
17
+ //# sourceMappingURL=nav-menubar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nav-menubar.d.ts","sourceRoot":"","sources":["../../src/behaviors/nav-menubar.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAG7C;;;;;;;;;;;;;GAaG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,WAAW,GAAG,SAAS,CA8J7D"}
@@ -0,0 +1,171 @@
1
+ import { uniqueId } from '../utils.js';
2
+ /**
3
+ * Menubar nav behavior — runs on `[data-rune="nav"][data-layout="menubar"]`.
4
+ *
5
+ * Desktop: group triggers open submenus on click. Only one open at a time.
6
+ * Mobile (theme-controlled via CSS): the rune-emitted `data-name="trigger"`
7
+ * button toggles `data-open` on the whole nav element. Groups continue to
8
+ * use `data-open` per-group inside the mobile panel.
9
+ *
10
+ * Keyboard model follows the WAI-ARIA menubar pattern:
11
+ * - ArrowLeft/Right move between triggers
12
+ * - ArrowDown enters the open submenu (or opens one)
13
+ * - ArrowUp/Down move within an open submenu
14
+ * - Escape closes and returns focus to the trigger
15
+ */
16
+ export function navMenubarBehavior(el) {
17
+ if (el.getAttribute('data-layout') !== 'menubar')
18
+ return () => { };
19
+ const cleanups = [];
20
+ const groups = Array.from(el.querySelectorAll('[data-rune="nav-group"]'));
21
+ const triggerByGroup = new Map();
22
+ const panelByGroup = new Map();
23
+ for (const group of groups) {
24
+ const trigger = group.querySelector('[data-field="title"], h1, h2, h3, h4, h5, h6');
25
+ const panel = group.querySelector(':scope > ul, :scope > ol');
26
+ if (!trigger || !panel)
27
+ continue;
28
+ const triggerId = trigger.id || uniqueId('rf-nav-trigger');
29
+ const panelId = panel.id || uniqueId('rf-nav-panel');
30
+ trigger.id = triggerId;
31
+ panel.id = panelId;
32
+ trigger.setAttribute('role', 'button');
33
+ trigger.setAttribute('tabindex', '0');
34
+ trigger.setAttribute('aria-haspopup', 'true');
35
+ trigger.setAttribute('aria-expanded', 'false');
36
+ trigger.setAttribute('aria-controls', panelId);
37
+ panel.setAttribute('role', 'menu');
38
+ panel.setAttribute('aria-labelledby', triggerId);
39
+ group.setAttribute('data-open', 'false');
40
+ triggerByGroup.set(group, trigger);
41
+ panelByGroup.set(group, panel);
42
+ }
43
+ const closeAll = (except) => {
44
+ for (const [group, trigger] of triggerByGroup) {
45
+ if (group === except)
46
+ continue;
47
+ group.setAttribute('data-open', 'false');
48
+ trigger.setAttribute('aria-expanded', 'false');
49
+ }
50
+ };
51
+ const openGroup = (group) => {
52
+ const trigger = triggerByGroup.get(group);
53
+ if (!trigger)
54
+ return;
55
+ closeAll(group);
56
+ group.setAttribute('data-open', 'true');
57
+ trigger.setAttribute('aria-expanded', 'true');
58
+ };
59
+ const toggleGroup = (group) => {
60
+ const open = group.getAttribute('data-open') === 'true';
61
+ if (open) {
62
+ closeAll();
63
+ }
64
+ else {
65
+ openGroup(group);
66
+ }
67
+ };
68
+ for (const [group, trigger] of triggerByGroup) {
69
+ const panel = panelByGroup.get(group);
70
+ const onClick = (e) => {
71
+ e.preventDefault();
72
+ toggleGroup(group);
73
+ };
74
+ const onKey = (e) => {
75
+ switch (e.key) {
76
+ case 'Enter':
77
+ case ' ':
78
+ e.preventDefault();
79
+ toggleGroup(group);
80
+ break;
81
+ case 'ArrowDown': {
82
+ e.preventDefault();
83
+ openGroup(group);
84
+ const first = panel.querySelector('a, button, [tabindex]');
85
+ first?.focus();
86
+ break;
87
+ }
88
+ case 'ArrowRight':
89
+ case 'ArrowLeft': {
90
+ e.preventDefault();
91
+ const order = Array.from(triggerByGroup.keys());
92
+ const idx = order.indexOf(group);
93
+ if (idx === -1)
94
+ break;
95
+ const next = e.key === 'ArrowRight'
96
+ ? order[(idx + 1) % order.length]
97
+ : order[(idx - 1 + order.length) % order.length];
98
+ const nextTrigger = triggerByGroup.get(next);
99
+ nextTrigger?.focus();
100
+ if (group.getAttribute('data-open') === 'true')
101
+ openGroup(next);
102
+ break;
103
+ }
104
+ case 'Escape':
105
+ closeAll();
106
+ trigger.focus();
107
+ break;
108
+ }
109
+ };
110
+ trigger.addEventListener('click', onClick);
111
+ trigger.addEventListener('keydown', onKey);
112
+ cleanups.push(() => {
113
+ trigger.removeEventListener('click', onClick);
114
+ trigger.removeEventListener('keydown', onKey);
115
+ });
116
+ // Submenu keyboard: ArrowUp/Down between items, Escape closes
117
+ const onPanelKey = (e) => {
118
+ const items = Array.from(panel.querySelectorAll('a, button'));
119
+ const active = document.activeElement;
120
+ const idx = active ? items.indexOf(active) : -1;
121
+ switch (e.key) {
122
+ case 'ArrowDown':
123
+ e.preventDefault();
124
+ items[Math.min(idx + 1, items.length - 1)]?.focus();
125
+ break;
126
+ case 'ArrowUp':
127
+ e.preventDefault();
128
+ if (idx <= 0)
129
+ trigger.focus();
130
+ else
131
+ items[idx - 1]?.focus();
132
+ break;
133
+ case 'Escape':
134
+ e.preventDefault();
135
+ closeAll();
136
+ trigger.focus();
137
+ break;
138
+ }
139
+ };
140
+ panel.addEventListener('keydown', onPanelKey);
141
+ cleanups.push(() => panel.removeEventListener('keydown', onPanelKey));
142
+ }
143
+ // Click outside / focus outside closes everything
144
+ const onDocClick = (e) => {
145
+ if (!el.contains(e.target))
146
+ closeAll();
147
+ };
148
+ const onFocusOut = (e) => {
149
+ const next = e.relatedTarget;
150
+ if (!next || !el.contains(next))
151
+ closeAll();
152
+ };
153
+ document.addEventListener('click', onDocClick);
154
+ el.addEventListener('focusout', onFocusOut);
155
+ cleanups.push(() => document.removeEventListener('click', onDocClick));
156
+ cleanups.push(() => el.removeEventListener('focusout', onFocusOut));
157
+ // Mobile hamburger trigger toggles `data-open` on the nav itself
158
+ const hamburger = el.querySelector(':scope > [data-name="trigger"]');
159
+ if (hamburger) {
160
+ const onHamburgerClick = (e) => {
161
+ e.preventDefault();
162
+ const open = el.getAttribute('data-open') === 'true';
163
+ el.setAttribute('data-open', open ? 'false' : 'true');
164
+ hamburger.setAttribute('aria-expanded', open ? 'false' : 'true');
165
+ };
166
+ hamburger.addEventListener('click', onHamburgerClick);
167
+ cleanups.push(() => hamburger.removeEventListener('click', onHamburgerClick));
168
+ }
169
+ return () => cleanups.forEach((fn) => fn());
170
+ }
171
+ //# sourceMappingURL=nav-menubar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nav-menubar.js","sourceRoot":"","sources":["../../src/behaviors/nav-menubar.ts"],"names":[],"mappings":"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"}
@@ -35,22 +35,22 @@ export class RfDiagram extends SafeHTMLElement {
35
35
  startOnLoad: false,
36
36
  theme: 'base',
37
37
  themeVariables: {
38
- primaryColor: style.getPropertyValue('--rf-color-primary-100').trim() || '#dcebf0',
39
- primaryTextColor: style.getPropertyValue('--rf-color-text').trim() || '#1d3557',
40
- primaryBorderColor: style.getPropertyValue('--rf-color-primary-400').trim() || '#70b4c0',
41
- secondaryColor: style.getPropertyValue('--rf-color-surface-hover').trim() || '#fdf0d5',
42
- secondaryTextColor: style.getPropertyValue('--rf-color-text').trim() || '#1d3557',
43
- secondaryBorderColor: style.getPropertyValue('--rf-color-border').trim() || '#d8e4de',
44
- tertiaryColor: style.getPropertyValue('--rf-color-info-bg').trim() || '#edf4f8',
45
- tertiaryTextColor: style.getPropertyValue('--rf-color-text').trim() || '#1d3557',
46
- tertiaryBorderColor: style.getPropertyValue('--rf-color-info-border').trim() || '#a8dadc',
47
- lineColor: style.getPropertyValue('--rf-color-muted').trim() || '#5a7a90',
48
- textColor: style.getPropertyValue('--rf-color-text').trim() || '#1d3557',
49
- mainBkg: style.getPropertyValue('--rf-color-primary-100').trim() || '#dcebf0',
50
- nodeBorder: style.getPropertyValue('--rf-color-primary-400').trim() || '#70b4c0',
51
- clusterBkg: style.getPropertyValue('--rf-color-surface').trim() || '#fffbf2',
52
- clusterBorder: style.getPropertyValue('--rf-color-border').trim() || '#d8e4de',
53
- edgeLabelBackground: style.getPropertyValue('--rf-color-surface').trim() || '#fffbf2',
38
+ primaryColor: style.getPropertyValue('--rf-color-primary-100').trim() || '#f5f4f1',
39
+ primaryTextColor: style.getPropertyValue('--rf-color-text').trim() || '#1c1a17',
40
+ primaryBorderColor: style.getPropertyValue('--rf-color-primary-400').trim() || '#bfbab2',
41
+ secondaryColor: style.getPropertyValue('--rf-color-surface-hover').trim() || '#ecebe8',
42
+ secondaryTextColor: style.getPropertyValue('--rf-color-text').trim() || '#1c1a17',
43
+ secondaryBorderColor: style.getPropertyValue('--rf-color-border').trim() || '#e2e0dd',
44
+ tertiaryColor: style.getPropertyValue('--rf-color-info-bg').trim() || '#e8edf4',
45
+ tertiaryTextColor: style.getPropertyValue('--rf-color-text').trim() || '#1c1a17',
46
+ tertiaryBorderColor: style.getPropertyValue('--rf-color-info-border').trim() || '#c5d2e0',
47
+ lineColor: style.getPropertyValue('--rf-color-muted').trim() || '#6b6661',
48
+ textColor: style.getPropertyValue('--rf-color-text').trim() || '#1c1a17',
49
+ mainBkg: style.getPropertyValue('--rf-color-primary-100').trim() || '#f5f4f1',
50
+ nodeBorder: style.getPropertyValue('--rf-color-primary-400').trim() || '#bfbab2',
51
+ clusterBkg: style.getPropertyValue('--rf-color-surface').trim() || '#fbfaf7',
52
+ clusterBorder: style.getPropertyValue('--rf-color-border').trim() || '#e2e0dd',
53
+ edgeLabelBackground: style.getPropertyValue('--rf-color-surface').trim() || '#fbfaf7',
54
54
  fontSize: '14px',
55
55
  fontFamily: style.getPropertyValue('--rf-font-sans').trim() || 'system-ui, sans-serif',
56
56
  },
@@ -23,14 +23,32 @@ export declare class RfSandbox extends SafeHTMLElement {
23
23
  private _heightAttr;
24
24
  private _tokens;
25
25
  private _localScheme;
26
+ private _untrusted;
27
+ private _allowJs;
28
+ private _sandboxOrigin;
26
29
  connectedCallback(): void;
27
30
  disconnectedCallback(): void;
28
31
  /** Build (or rebuild) the iframe with the given theme baked into the srcdoc. */
29
32
  private buildIframe;
33
+ /** Build the untrusted-mode banner shown above the iframe. Styled via
34
+ * `.rf-sandbox__untrusted-banner` in the lumina theme. */
35
+ private buildUntrustedBanner;
30
36
  /** Public API for containers (e.g. preview behavior) to set the
31
37
  * sandbox theme. Rebuilds the iframe with the theme baked in. */
32
38
  setTheme(theme: string): void;
33
39
  private buildSrcdoc;
40
+ /** Build the meta-CSP tag injected into srcdoc when in untrusted mode.
41
+ * Returns an empty string for trusted mode (CSP off). The CSP is intentionally
42
+ * tight: no fetch/XHR (`connect-src 'none'`), no off-site form posts
43
+ * (`form-action 'none'`), no tracking pixels (`img-src` limited to data URLs
44
+ * + permitted CDN origins), no external script loads except the framework
45
+ * preset and explicit `dependencies` URLs.
46
+ *
47
+ * Caveats: meta-CSP must be the first child of <head> or browsers ignore it,
48
+ * and it can't deliver `frame-ancestors` or `report-uri`. For the strongest
49
+ * guarantees use Tier 3 (separate-origin) and have the host serve real CSP
50
+ * response headers. */
51
+ private buildCspMetaTag;
34
52
  private buildDependencyTags;
35
53
  private buildDesignTokenTags;
36
54
  private buildTailwindTokenConfig;
@@ -1 +1 @@
1
- {"version":3,"file":"sandbox.d.ts","sourceRoot":"","sources":["../../src/elements/sandbox.ts"],"names":[],"mappings":"AAsBA;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,qBAAa,SAAU,SAAQ,eAAe;IAC7C,OAAO,CAAC,MAAM,CAAkC;IAChD,OAAO,CAAC,cAAc,CAA4C;IAClE,OAAO,CAAC,YAAY,CAA6B;IACjD,OAAO,CAAC,gBAAgB,CAAiC;IAEzD,OAAO,CAAC,QAAQ,CAAM;IACtB,OAAO,CAAC,UAAU,CAAM;IACxB,OAAO,CAAC,aAAa,CAAM;IAC3B,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,WAAW,CAAU;IAC7B,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,YAAY,CAAiC;IAErD,iBAAiB;IAmDjB,oBAAoB;IAgBpB,gFAAgF;IAChF,OAAO,CAAC,WAAW;IA8BnB;sEACkE;IAClE,QAAQ,CAAC,KAAK,EAAE,MAAM;IAKtB,OAAO,CAAC,WAAW;IA2FnB,OAAO,CAAC,mBAAmB;IAmC3B,OAAO,CAAC,oBAAoB;IA4D5B,OAAO,CAAC,wBAAwB;CA0BhC"}
1
+ {"version":3,"file":"sandbox.d.ts","sourceRoot":"","sources":["../../src/elements/sandbox.ts"],"names":[],"mappings":"AAsBA;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,qBAAa,SAAU,SAAQ,eAAe;IAC7C,OAAO,CAAC,MAAM,CAAkC;IAChD,OAAO,CAAC,cAAc,CAA4C;IAClE,OAAO,CAAC,YAAY,CAA6B;IACjD,OAAO,CAAC,gBAAgB,CAAiC;IAEzD,OAAO,CAAC,QAAQ,CAAM;IACtB,OAAO,CAAC,UAAU,CAAM;IACxB,OAAO,CAAC,aAAa,CAAM;IAC3B,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,WAAW,CAAU;IAC7B,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,YAAY,CAAiC;IAMrD,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,QAAQ,CAAQ;IACxB,OAAO,CAAC,cAAc,CAAM;IAE5B,iBAAiB;IAsDjB,oBAAoB;IAgBpB,gFAAgF;IAChF,OAAO,CAAC,WAAW;IA2EnB;+DAC2D;IAC3D,OAAO,CAAC,oBAAoB;IAS5B;sEACkE;IAClE,QAAQ,CAAC,KAAK,EAAE,MAAM;IAKtB,OAAO,CAAC,WAAW;IAoGnB;;;;;;;;;;4BAUwB;IACxB,OAAO,CAAC,eAAe;IAmDvB,OAAO,CAAC,mBAAmB;IAmC3B,OAAO,CAAC,oBAAoB;IA4D5B,OAAO,CAAC,wBAAwB;CA0BhC"}
@@ -42,12 +42,23 @@ export class RfSandbox extends SafeHTMLElement {
42
42
  _heightAttr = 'auto';
43
43
  _tokens = null;
44
44
  _localScheme = null;
45
+ // Security state derived from data-* attributes set by the schema transform.
46
+ // `_untrusted` drops `allow-same-origin` from the iframe sandbox attribute and
47
+ // (when JS is allowed) injects a meta-CSP into srcdoc. `_sandboxOrigin`, when
48
+ // set, switches the iframe from `srcdoc` to `src=<origin>/render?...` so the
49
+ // host endpoint can serve real CSP response headers.
50
+ _untrusted = false;
51
+ _allowJs = true;
52
+ _sandboxOrigin = '';
45
53
  connectedCallback() {
46
54
  this._content = this.dataset.sourceContent || readHiddenContent(this, 'source');
47
55
  this._framework = this.dataset.framework || '';
48
56
  this._dependencies = this.dataset.dependencies || '';
49
57
  this._label = this.dataset.label || 'Sandbox';
50
58
  this._heightAttr = this.dataset.height || 'auto';
59
+ this._untrusted = this.dataset.securityMode === 'untrusted';
60
+ this._allowJs = this.dataset.allowJs !== 'false';
61
+ this._sandboxOrigin = this.dataset.sandboxOrigin || '';
51
62
  // data-color-scheme is set by tint-mode and locks the sandbox to a
52
63
  // specific colour scheme, overriding the global RfContext.theme.
53
64
  this._localScheme = this.getAttribute('data-color-scheme');
@@ -102,16 +113,52 @@ export class RfSandbox extends SafeHTMLElement {
102
113
  }
103
114
  /** Build (or rebuild) the iframe with the given theme baked into the srcdoc. */
104
115
  buildIframe(theme) {
105
- const srcdoc = this.buildSrcdoc(this._content, this._framework, this._dependencies, this._tokens, theme);
106
116
  // Preserve height from existing iframe if rebuilding
107
117
  const currentHeight = this.iframe?.style.height;
108
118
  this.iframe = document.createElement('iframe');
109
- this.iframe.srcdoc = srcdoc;
110
- this.iframe.setAttribute('sandbox', 'allow-scripts allow-same-origin');
119
+ // Sandbox attribute: untrusted mode drops `allow-same-origin` so the
120
+ // iframe gets a unique opaque origin. Closes parent-origin attacks
121
+ // (cookie theft, parent-DOM access, same-origin storage abuse).
122
+ const sandboxAttr = this._untrusted
123
+ ? 'allow-scripts'
124
+ : 'allow-scripts allow-same-origin';
125
+ this.iframe.setAttribute('sandbox', sandboxAttr);
126
+ // Tier 3 (separate-origin escape hatch): when the host has provided a
127
+ // sandbox origin, load the iframe from `${origin}/render?...` instead
128
+ // of using `srcdoc`. The host endpoint is responsible for serving the
129
+ // rendered HTML with real CSP response headers (which `srcdoc` can't
130
+ // receive). Content is delivered via `postMessage` after the iframe
131
+ // announces itself, since URL/header transport is host-defined.
132
+ if (this._untrusted && this._sandboxOrigin) {
133
+ const params = new URLSearchParams({
134
+ framework: this._framework,
135
+ dependencies: this._dependencies,
136
+ theme: theme || 'auto',
137
+ height: this._heightAttr,
138
+ });
139
+ this.iframe.src = `${this._sandboxOrigin.replace(/\/$/, '')}/render?${params.toString()}`;
140
+ // Wait for the iframe to signal readiness, then post the content.
141
+ const onReady = (e) => {
142
+ if (e.data?.type === 'rf-sandbox-ready' && e.source === this.iframe?.contentWindow) {
143
+ this.iframe.contentWindow.postMessage({ type: 'rf-sandbox-content', content: this._content, tokens: this._tokens }, this._sandboxOrigin);
144
+ window.removeEventListener('message', onReady);
145
+ }
146
+ };
147
+ window.addEventListener('message', onReady);
148
+ }
149
+ else {
150
+ // Tier 1/2: srcdoc with optional meta-CSP injected for untrusted mode.
151
+ this.iframe.srcdoc = this.buildSrcdoc(this._content, this._framework, this._dependencies, this._tokens, theme);
152
+ }
111
153
  this.iframe.title = this._label;
112
154
  this.iframe.setAttribute('frameborder', '0');
113
155
  this.iframe.loading = 'lazy';
114
156
  this.iframe.style.cssText = `width: 100%; border: none; height: ${currentHeight || (this._heightAttr !== 'auto' ? parseInt(this._heightAttr) + 'px' : '150px')};`;
157
+ // Untrusted-mode UX affordance: a persistent visual marker above the
158
+ // iframe so visitors can see the content runs in a sandbox they
159
+ // shouldn't trust. Sits in the host element's DOM, outside the iframe,
160
+ // so author code in the iframe can't suppress or restyle it.
161
+ const banner = this._untrusted ? this.buildUntrustedBanner() : null;
115
162
  // Auto-sizing
116
163
  if (this.messageHandler) {
117
164
  window.removeEventListener('message', this.messageHandler);
@@ -124,7 +171,22 @@ export class RfSandbox extends SafeHTMLElement {
124
171
  };
125
172
  window.addEventListener('message', this.messageHandler);
126
173
  }
127
- this.replaceChildren(this.iframe);
174
+ if (banner) {
175
+ this.replaceChildren(banner, this.iframe);
176
+ }
177
+ else {
178
+ this.replaceChildren(this.iframe);
179
+ }
180
+ }
181
+ /** Build the untrusted-mode banner shown above the iframe. Styled via
182
+ * `.rf-sandbox__untrusted-banner` in the lumina theme. */
183
+ buildUntrustedBanner() {
184
+ const banner = document.createElement('div');
185
+ banner.className = 'rf-sandbox__untrusted-banner';
186
+ banner.setAttribute('role', 'note');
187
+ banner.setAttribute('aria-label', 'Sandboxed user content');
188
+ banner.textContent = 'Sandboxed user content — do not enter sensitive information.';
189
+ return banner;
128
190
  }
129
191
  /** Public API for containers (e.g. preview behavior) to set the
130
192
  * sandbox theme. Rebuilds the iframe with the theme baked in. */
@@ -147,9 +209,17 @@ export class RfSandbox extends SafeHTMLElement {
147
209
  const bodyDataTheme = (theme === 'dark' || theme === 'light') ? ` data-theme="${theme}"` : '';
148
210
  // Strip data-source attributes from rendered content (authoring markers only)
149
211
  const renderedContent = content.replace(/\s*data-source(?:="[^"]*")?/g, '');
212
+ // Tier 2 meta-CSP: when untrusted mode allows JS, inject a CSP that
213
+ // closes the residual exfiltration / phishing surface (no fetch, no
214
+ // off-site form posts, no tracking pixels, no external scripts).
215
+ // MUST be the first child of <head> — meta-CSP is ignored if anything
216
+ // (including a charset meta) precedes it. Caveat: meta-CSP can't
217
+ // deliver `frame-ancestors` or `report-uri` — those need response
218
+ // headers, which is what Tier 3 (separate-origin) is for.
219
+ const cspMeta = this.buildCspMetaTag();
150
220
  return `<!DOCTYPE html>
151
221
  <html${htmlAttrs}>
152
- <head>
222
+ <head>${cspMeta ? `\n${cspMeta}` : ''}
153
223
  <meta charset="utf-8">
154
224
  <meta name="viewport" content="width=device-width, initial-scale=1">
155
225
  ${depTags}
@@ -220,6 +290,66 @@ ${renderedContent}
220
290
  </body>
221
291
  </html>`;
222
292
  }
293
+ /** Build the meta-CSP tag injected into srcdoc when in untrusted mode.
294
+ * Returns an empty string for trusted mode (CSP off). The CSP is intentionally
295
+ * tight: no fetch/XHR (`connect-src 'none'`), no off-site form posts
296
+ * (`form-action 'none'`), no tracking pixels (`img-src` limited to data URLs
297
+ * + permitted CDN origins), no external script loads except the framework
298
+ * preset and explicit `dependencies` URLs.
299
+ *
300
+ * Caveats: meta-CSP must be the first child of <head> or browsers ignore it,
301
+ * and it can't deliver `frame-ancestors` or `report-uri`. For the strongest
302
+ * guarantees use Tier 3 (separate-origin) and have the host serve real CSP
303
+ * response headers. */
304
+ buildCspMetaTag() {
305
+ if (!this._untrusted)
306
+ return '';
307
+ // Collect the origins we need to permit so framework presets and
308
+ // declared dependencies still load. The host opted into JS by setting
309
+ // `allowJs: true`; CDN origins they trust come along for the ride.
310
+ const origins = new Set();
311
+ const addOrigin = (url) => {
312
+ try {
313
+ const u = new URL(url);
314
+ origins.add(`${u.protocol}//${u.host}`);
315
+ }
316
+ catch {
317
+ // Skip non-absolute URLs — author-relative paths can't reach
318
+ // outside the sandbox origin anyway.
319
+ }
320
+ };
321
+ if (this._framework && FRAMEWORK_PRESETS[this._framework]) {
322
+ for (const tag of FRAMEWORK_PRESETS[this._framework]) {
323
+ const m = tag.match(/(?:src|href)="([^"]+)"/);
324
+ if (m)
325
+ addOrigin(m[1]);
326
+ }
327
+ }
328
+ if (this._dependencies) {
329
+ for (const url of this._dependencies.split(',').map(u => u.trim()).filter(Boolean)) {
330
+ addOrigin(url);
331
+ }
332
+ }
333
+ const styleSrc = ["'unsafe-inline'", ...origins].join(' ');
334
+ const fontSrc = ["data:", "https://fonts.gstatic.com", ...origins].join(' ');
335
+ const imgSrc = ["data:", ...origins].join(' ');
336
+ const scriptSrc = this._allowJs
337
+ ? ["'unsafe-inline'", ...origins].join(' ')
338
+ : "'none'";
339
+ const directives = [
340
+ "default-src 'none'",
341
+ `script-src ${scriptSrc}`,
342
+ `style-src ${styleSrc}`,
343
+ `font-src ${fontSrc}`,
344
+ `img-src ${imgSrc}`,
345
+ "connect-src 'none'",
346
+ "form-action 'none'",
347
+ "base-uri 'none'",
348
+ "frame-src 'none'",
349
+ "object-src 'none'",
350
+ ].join('; ');
351
+ return `<meta http-equiv="Content-Security-Policy" content="${directives}">`;
352
+ }
223
353
  buildDependencyTags(framework, dependencies, tokens) {
224
354
  const tags = [];
225
355
  // Design tokens (injected before framework so they serve as defaults)
@@ -1 +1 @@
1
- {"version":3,"file":"sandbox.js","sourceRoot":"","sources":["../../src/elements/sandbox.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sandbox.js","sourceRoot":"","sources":["../../src/elements/sandbox.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -51,6 +51,8 @@ export { sectionNavBehavior } from './behaviors/section-nav.js';
51
51
  export { searchBehavior } from './behaviors/search.js';
52
52
  export { galleryBehavior } from './behaviors/gallery.js';
53
53
  export { juxtaposeBehavior } from './behaviors/juxtapose.js';
54
+ export { navCollapsibleBehavior } from './behaviors/nav-collapsible.js';
55
+ export { navMenubarBehavior } from './behaviors/nav-menubar.js';
54
56
  export type { BehaviorFn, CleanupFn, InitOptions } from './types.js';
55
57
  export { registerElements, RfContext, RfDiagram, RfNav, RfMap, RfSandbox } from './elements/index.js';
56
58
  export type { PageEntry, DesignTokens } from './elements/index.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AA+B1D;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,GAAG,IAAI,CAM9E;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,GAAG,IAAI,CAEnE;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAChC,SAAS,GAAE,WAAW,GAAG,QAAmB,EAC5C,OAAO,CAAC,EAAE,WAAW,GACnB,MAAM,IAAI,CAkCZ;AASD;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAClC,SAAS,GAAE,WAAW,GAAG,QAAmB,GAC1C,MAAM,IAAI,CAeZ;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,IAAI,GAAG,CAAC,MAAM,CAAC,CAE9C;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,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAC1E,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAGrE,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACtG,YAAY,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AA4C1D;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,GAAG,IAAI,CAM9E;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,GAAG,IAAI,CAEnE;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAChC,SAAS,GAAE,WAAW,GAAG,QAAmB,EAC5C,OAAO,CAAC,EAAE,WAAW,GACnB,MAAM,IAAI,CAkCZ;AASD;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAClC,SAAS,GAAE,WAAW,GAAG,QAAmB,GAC1C,MAAM,IAAI,CAeZ;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,IAAI,GAAG,CAAC,MAAM,CAAC,CAE9C;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,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAC1E,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAGrE,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACtG,YAAY,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC"}
package/dist/index.js CHANGED
@@ -13,6 +13,18 @@ import { searchBehavior } from './behaviors/search.js';
13
13
  import { sectionNavBehavior } from './behaviors/section-nav.js';
14
14
  import { galleryBehavior } from './behaviors/gallery.js';
15
15
  import { juxtaposeBehavior } from './behaviors/juxtapose.js';
16
+ import { navCollapsibleBehavior } from './behaviors/nav-collapsible.js';
17
+ import { navMenubarBehavior } from './behaviors/nav-menubar.js';
18
+ function navBehavior(el) {
19
+ const cleanups = [];
20
+ const collapsible = navCollapsibleBehavior(el);
21
+ if (collapsible)
22
+ cleanups.push(collapsible);
23
+ const menubar = navMenubarBehavior(el);
24
+ if (menubar)
25
+ cleanups.push(menubar);
26
+ return () => cleanups.forEach((fn) => fn?.());
27
+ }
16
28
  /** Map of rune type → behavior function (mutable — packages can register additional behaviors) */
17
29
  const behaviors = {
18
30
  accordion: accordionBehavior,
@@ -25,6 +37,7 @@ const behaviors = {
25
37
  preview: previewBehavior,
26
38
  gallery: galleryBehavior,
27
39
  juxtapose: juxtaposeBehavior,
40
+ nav: navBehavior,
28
41
  };
29
42
  /**
30
43
  * Register additional behavior functions (e.g., from community/official packages).
@@ -138,6 +151,8 @@ export { sectionNavBehavior } from './behaviors/section-nav.js';
138
151
  export { searchBehavior } from './behaviors/search.js';
139
152
  export { galleryBehavior } from './behaviors/gallery.js';
140
153
  export { juxtaposeBehavior } from './behaviors/juxtapose.js';
154
+ export { navCollapsibleBehavior } from './behaviors/nav-collapsible.js';
155
+ export { navMenubarBehavior } from './behaviors/nav-menubar.js';
141
156
  // Web component elements — framework-neutral custom elements for interactive runes
142
157
  export { registerElements, RfContext, RfDiagram, RfNav, RfMap, RfSandbox } from './elements/index.js';
143
158
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@refrakt-md/behaviors",
3
3
  "description": "Vanilla JS behavior library for refrakt.md runes — tabs, accordions, copy buttons, keyboard navigation",
4
- "version": "0.11.3",
4
+ "version": "0.14.0",
5
5
  "type": "module",
6
6
  "license": "MIT",
7
7
  "repository": {