@21stware/rpui 0.2.1 → 0.3.2
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/README.md +67 -79
- package/dist/core/style.d.ts +1 -1
- package/dist/gallery.d.ts +5 -0
- package/dist/gallery.js +2654 -0
- package/dist/gallery.js.map +1 -0
- package/dist/rpml-loader.d.ts +2 -0
- package/dist/rpml-loader.js +27 -0
- package/dist/rpml-loader.js.map +1 -0
- package/dist/rpui.d.ts +2 -1
- package/dist/rpui.js +607 -423
- package/dist/rpui.js.map +1 -1
- package/dist/serve/cli.d.ts +1 -0
- package/dist/serve.js +203 -0
- package/package.json +14 -22
- package/LICENSE +0 -20
- package/SKILL.md +0 -279
- package/llms.txt +0 -298
package/dist/rpui.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rpui.js","sources":["../src/core/dom.ts","../src/core/style.ts","../src/canvas/annotation.ts","../src/canvas/main-view.ts","../src/canvas/page.ts","../src/primitives/layout.ts","../src/core/icons.ts","../src/primitives/controls.ts","../src/primitives/navigation.ts","../src/primitives/data-display.ts","../src/primitives/ios.ts","../src/primitives/macos.ts","../src/primitives/agent.ts","../src/registry.ts","../src/rpui.ts"],"sourcesContent":["export function attr(el: Element, name: string, fallback = ''): string { return el.getAttribute(name) ?? fallback; }\nexport function intAttr(el: Element, name: string, fallback: number): number { const raw = el.getAttribute(name); const value = raw === null || raw === '' ? NaN : Number(raw); return Number.isFinite(value) ? value : fallback; }\nexport function escapeHtml(value: string): string { return value.replace(/[&<>'\"]/g, c => ({ '&':'&', '<':'<', '>':'>', \"'\":''', '\"':'"' }[c] || c)); }\nexport function csv(el: Element, name: string, fallback: string): string[] { return attr(el, name, fallback).split(',').map(s => s.trim()).filter(Boolean); }\n\nexport const deviceWidths: Record<string, number> = { web: 1440, ipad: 834, mobile: 390 };\nexport function resolveWidth(el: Element, fallback: number): number { const raw = el.getAttribute('width'); const width = raw === null || raw === '' ? NaN : Number(raw); if (Number.isFinite(width)) return width; return deviceWidths[attr(el,'device')] ?? fallback; }\nexport function hasExplicitNumericHeight(el: Element): boolean { const raw = el.getAttribute('height'); return raw !== null && raw !== '' && Number.isFinite(Number(raw)); }\nexport function usesAutoHeight(el: Element): boolean { const raw = el.getAttribute('height'); return raw === 'auto' || el.hasAttribute('auto-height') || (!!el.getAttribute('device') && !hasExplicitNumericHeight(el)); }\nexport function resolveHeight(el: Element, fallback: number): number { const raw = el.getAttribute('height'); const height = raw === null || raw === '' ? NaN : Number(raw); return Number.isFinite(height) ? height : fallback; }\nexport function isTopAnnotation(node: Node): node is HTMLElement { if (!(node instanceof HTMLElement)) return false; const tag = node.tagName.toLowerCase(); return tag === 'rp-annotation' || tag === 'proto-annotation'; }\nexport function isViewportNode(node: Node): node is HTMLElement { if (!(node instanceof HTMLElement)) return false; const tag = node.tagName.toLowerCase(); return tag === 'rp-viewport' || tag === 'snap-viewport'; }\nexport function define(name: string, ctor: CustomElementConstructor) {\n if (customElements.get(name)) return;\n const Alias = class extends (ctor as { new(): HTMLElement }) {};\n customElements.define(name, Alias as CustomElementConstructor);\n}\n\n\n","export const RPUI_STYLE_ID = \"rpui-runtime-style\";\n\nexport const style = `\n:root { --rp-bg:#f0f2f5; --rp-surface:#fff; --rp-surface-soft:#f9fafb; --rp-text:#111827; --rp-muted:#6b7280; --rp-border:#e5e7eb; --rp-border-strong:#d1d5db; --rp-primary:#2563eb; --rp-success:#059669; --rp-warning:#d97706; --rp-danger:#dc2626; --rp-purple:#7c3aed; --rp-radius-sm:4px; --rp-radius-md:8px; --rp-radius-lg:12px; --rp-shadow:0 8px 28px rgba(15,23,42,.08); --rp-font:-apple-system,BlinkMacSystemFont,\"Segoe UI\",sans-serif; }\n* { box-sizing:border-box; }\nbody { margin:0; font-family:var(--rp-font); color:var(--rp-text); background:var(--rp-bg); }\n.rp-icon { display:inline-block; flex:0 0 auto; vertical-align:-0.16em; }\nrp-page, proto-page { display:block; min-height:100vh; padding:32px 40px; overflow:auto; }\n.rp-page-shell { display:grid; grid-template-columns:max-content max-content; gap:24px; min-height:100vh; align-items:start; }\n.rp-page-main { display:flex; flex-direction:column; min-width:0; overflow:visible; }\n.rp-page-header { flex:0 0 auto; width:fit-content; max-width:none; margin:0 0 22px; }\n.rp-page-title-row { display:flex; align-items:baseline; gap:12px; flex-wrap:wrap; }\n.rp-page-title { margin:0; font-size:28px; line-height:1.2; letter-spacing:-.02em; }\n.rp-page-route { font-size:13px; color:var(--rp-muted); font-family:ui-monospace,SFMono-Regular,Menlo,monospace; background:rgba(255,255,255,.7); border:1px solid var(--rp-border); border-radius:999px; padding:3px 9px; }\n.rp-page-description { margin:10px 0 0; color:#374151; line-height:1.6; font-size:14px; }\n.rp-page-body { flex:0 1 auto; display:block; width:fit-content; max-width:100%; min-height:0; overflow:visible; }\n.rp-annotation-pane { min-width:380px; max-width:680px; position:sticky; top:0; height:100vh; overflow-y:auto; overflow-x:auto; padding:0 0 48px 0; align-self:start; }\n.rp-annotation-pane-inner { padding:4px 12px 24px 6px; }\nrp-main-view, proto-main-view { display:block; width:fit-content; margin:0 0 28px; position:relative; }\n.rp-main-shell { position:relative; overflow:visible; border:1px solid var(--rp-border-strong); border-radius:var(--rp-radius-md); background:var(--rp-surface); box-shadow:var(--rp-shadow); }\n.rp-main-stage-clip { overflow:hidden; border-radius:var(--rp-radius-md); }\n.rp-main-stage { position:relative; transform-origin:top left; background:var(--rp-surface); }\n.rp-pin { position:absolute; z-index:20; display:grid; place-items:center; width:24px; height:24px; color:#fff; font-size:11px; font-weight:700; background:var(--rp-primary); border-radius:50% 50% 50% 0; transform:translate(-6px,-6px) rotate(-45deg); box-shadow:0 2px 8px rgba(37,99,235,.25); cursor:pointer; }\n.rp-pin > span { transform:rotate(45deg); }\n.rp-pin:hover { opacity:0.85; }\nrp-annotation, proto-annotation { display:block; width:fit-content; max-width:980px; margin:14px 0; line-height:1.65; color:#1f2937; font-size:14px; }\nrp-annotation rp-annotation, proto-annotation proto-annotation, rp-annotation proto-annotation, proto-annotation rp-annotation { margin:10px 0 8px 22px; }\n.rp-annotation-head { display:flex; align-items:center; gap:8px; margin:0 0 4px; width:fit-content; }\n.rp-annotation-title { font-weight:700; color:#111827; }\n.rp-annotation-marker { display:inline-grid; place-items:center; flex:0 0 auto; color:#fff; font-size:10px; font-weight:700; line-height:1; }\n.rp-annotation-marker.drop { width:22px; height:22px; background:var(--rp-primary); border-radius:50% 50% 50% 0; transform:rotate(-45deg); }\n.rp-annotation-marker.drop > span { transform:rotate(45deg); }\n.rp-annotation-marker.circle { width:16px; height:16px; background:var(--rp-purple); border-radius:50%; }\n.rp-annotation-marker.triangle { width:18px; height:16px; background:var(--rp-success); clip-path:polygon(50% 0, 100% 100%, 0 100%); }\n.rp-annotation-marker.triangle > span { transform:translateY(2px); font-size:9px; }\n.rp-annotation-body { display:block; position:relative; width:fit-content; max-width:920px; }\n.rp-pin-slice { width:18px; height:18px; font-size:10px; box-shadow:0 1px 5px rgba(37,99,235,.3); }\n.rp-annotation-body > :not(rp-annotation):not(proto-annotation):not(rp-enum):not(proto-enum) { max-width:820px; }\n.rp-annotation-pane rp-annotation, .rp-annotation-pane proto-annotation { max-width:none; }\n.rp-annotation-pane .rp-annotation-body { max-width:none; }\n.rp-annotation-pane .rp-annotation-body > :not(rp-annotation):not(proto-annotation):not(rp-enum):not(proto-enum) { max-width:420px; }\n.rp-annotation-body p { margin:0 0 8px; }\nrp-enum, proto-enum { display:flex; align-items:flex-start; flex-wrap:wrap; gap:10px; width:fit-content; margin:8px 0 12px; }\n.rp-annotation-pane rp-enum, .rp-annotation-pane proto-enum { flex-wrap:wrap; }\nrp-enum-item, proto-enum-item { display:block; flex:0 0 auto; width:fit-content; min-width:180px; max-width:600px; border:1px solid #f0f0f0; border-radius:var(--rp-radius-md); background:#fff; overflow:hidden; }\n.rp-enum-label { display:flex; align-items:flex-start; gap:6px; padding:5px 9px 4px; font-size:12px; font-weight:650; color:#374151; }\n.rp-enum-index { display:inline-grid; place-items:center; min-width:16px; height:16px; padding:0 4px; background:#111827; color:#fff; font-size:10px; font-weight:750; border-radius:3px; flex:0 0 auto; margin-top:1px; }\n.rp-enum-label-text { display:block; }\n.rp-enum-description { display:block; margin-top:2px; font-size:11px; line-height:1.35; font-weight:400; color:var(--rp-muted); }\n.rp-enum-content { display:block; width:fit-content; padding:8px; }\n.rp-annotation-title { font-weight:700; color:#111827; cursor:pointer; }\n.rp-annotation-title:hover { color:var(--rp-primary); }\n.rp-section-focus { outline:2px dashed var(--rp-primary); outline-offset:4px; border-radius:4px; }\nsnap-viewport, rp-viewport { display:flex; flex-direction:column; width:var(--snap-width,1440px); height:var(--snap-height,900px); background:#f8fafc; overflow:hidden; color:#111827; }\nsnap-layout, rp-layout { display:grid; grid-template-columns:var(--snap-columns,1fr); grid-template-rows:var(--snap-rows,auto); gap:var(--snap-gap,0); align-content:start; width:fit-content; max-width:100%; min-width:0; }\nsnap-layout > *, rp-layout > * { min-width:0; }\nsnap-viewport snap-layout, rp-viewport rp-layout { width:100%; }\nsnap-viewport > snap-layout, rp-viewport > rp-layout { flex:1 1 auto; min-height:0; }\nsnap-viewport > snap-navbar, rp-viewport > rp-navbar { flex:0 0 auto; }\nsnap-panel, rp-panel { display:block; width:fit-content; max-width:100%; background:#fff; border:1px solid var(--rp-border); border-radius:var(--rp-radius-md); padding:var(--snap-padding,16px); }\nsnap-viewport snap-panel, rp-viewport rp-panel { width:auto; min-width:0; }\nsnap-panel[elevation=\"1\"], rp-panel[elevation=\"1\"] { box-shadow:0 4px 16px rgba(15,23,42,.06); }\nsnap-panel[elevation=\"2\"], rp-panel[elevation=\"2\"] { box-shadow:var(--rp-shadow); }\nsnap-navbar, rp-navbar { display:flex; align-items:center; gap:14px; height:var(--snap-height,64px); padding:0 24px; background:#fff; border-bottom:1px solid var(--rp-border); }\nsnap-sidebar, rp-sidebar { display:block; width:var(--snap-width,260px); min-height:0; background:#fff; border-right:1px solid var(--rp-border); padding:14px; }\nsnap-viewport snap-sidebar, rp-viewport rp-sidebar { min-height:100%; }\nsnap-sidebar[collapsed], rp-sidebar[collapsed] { width:72px; }\nsnap-logo, rp-logo { display:inline-grid; place-items:center; width:var(--snap-size,82px); height:32px; border-radius:8px; background:#111827; color:#fff; font-size:12px; font-weight:800; letter-spacing:.08em; }\nsnap-search, rp-search, snap-input, rp-input, snap-date-picker, rp-date-picker { display:inline-flex; align-items:center; gap:8px; width:280px; min-height:36px; padding:0 11px; border:1px solid var(--rp-border-strong); border-radius:8px; background:#fff; color:#111827; }\nsnap-textarea, rp-textarea { display:block; width:320px; min-height:calc(var(--snap-rows,3) * 24px + 22px); padding:9px 11px; border:1px solid var(--rp-border-strong); border-radius:8px; background:#fff; color:#111827; white-space:pre-wrap; }\nsnap-search[state=\"focus\"], rp-search[state=\"focus\"], snap-input[state=\"focus\"], rp-input[state=\"focus\"], snap-textarea[state=\"focus\"], rp-textarea[state=\"focus\"], snap-date-picker[state=\"focus\"], rp-date-picker[state=\"focus\"] { border-color:var(--rp-primary); box-shadow:0 0 0 3px rgba(37,99,235,.12); }\nsnap-search[state=\"filled\"], rp-search[state=\"filled\"], snap-input[state=\"filled\"], rp-input[state=\"filled\"], snap-textarea[state=\"filled\"], rp-textarea[state=\"filled\"], snap-date-picker[state=\"filled\"], rp-date-picker[state=\"filled\"] { border-color:#93c5fd; background:#f8fbff; }\nsnap-search[state=\"error\"], rp-search[state=\"error\"], snap-input[state=\"error\"], rp-input[state=\"error\"], snap-textarea[state=\"error\"], rp-textarea[state=\"error\"], snap-date-picker[state=\"error\"], rp-date-picker[state=\"error\"] { border-color:var(--rp-danger); box-shadow:0 0 0 3px rgba(220,38,38,.1); }\nsnap-search[state=\"disabled\"], rp-search[state=\"disabled\"], snap-input[state=\"disabled\"], rp-input[state=\"disabled\"], snap-textarea[state=\"disabled\"], rp-textarea[state=\"disabled\"], snap-date-picker[state=\"disabled\"], rp-date-picker[state=\"disabled\"] { opacity:.55; background:#f3f4f6; }\nsnap-input[label], rp-input[label], snap-date-picker[label], rp-date-picker[label] { display:inline-grid; align-items:start; gap:6px; width:280px; min-height:0; padding:0; border:0; background:transparent; box-shadow:none; }\nsnap-input[label][state=\"focus\"], rp-input[label][state=\"focus\"], snap-input[label][state=\"filled\"], rp-input[label][state=\"filled\"], snap-input[label][state=\"error\"], rp-input[label][state=\"error\"], snap-date-picker[label][state=\"focus\"], rp-date-picker[label][state=\"focus\"], snap-date-picker[label][state=\"filled\"], rp-date-picker[label][state=\"filled\"], snap-date-picker[label][state=\"error\"], rp-date-picker[label][state=\"error\"] { border:0; background:transparent; box-shadow:none; }\n.rp-field-control { display:flex; align-items:center; gap:8px; min-height:36px; padding:0 11px; border:1px solid var(--rp-border-strong); border-radius:8px; background:#fff; color:#111827; }\nsnap-input[state=\"focus\"] .rp-field-control, rp-input[state=\"focus\"] .rp-field-control, snap-date-picker[state=\"focus\"] .rp-field-control, rp-date-picker[state=\"focus\"] .rp-field-control { border-color:var(--rp-primary); box-shadow:0 0 0 3px rgba(37,99,235,.12); }\nsnap-input[state=\"filled\"] .rp-field-control, rp-input[state=\"filled\"] .rp-field-control, snap-date-picker[state=\"filled\"] .rp-field-control, rp-date-picker[state=\"filled\"] .rp-field-control { border-color:#93c5fd; background:#f8fbff; }\nsnap-input[state=\"error\"] .rp-field-control, rp-input[state=\"error\"] .rp-field-control, snap-date-picker[state=\"error\"] .rp-field-control, rp-date-picker[state=\"error\"] .rp-field-control { border-color:var(--rp-danger); box-shadow:0 0 0 3px rgba(220,38,38,.1); }\n.rp-field-label { display:block; margin:0 0 6px; color:#374151; font-size:12px; font-weight:650; }\n.rp-placeholder { color:#9ca3af; }\n.rp-value { color:#111827; }\n.rp-error-text { color:var(--rp-danger); font-size:12px; }\nsnap-select, rp-select { display:inline-block; width:var(--snap-width,280px); }\n.rp-select-control { display:flex; align-items:center; gap:8px; min-height:36px; padding:0 11px; border:1px solid var(--rp-border-strong); border-radius:8px; background:#fff; }\nsnap-select[state=\"expanded\"] .rp-select-control, rp-select[state=\"expanded\"] .rp-select-control { border-color:var(--rp-primary); box-shadow:0 0 0 3px rgba(37,99,235,.12); }\nsnap-select[state=\"disabled\"], rp-select[state=\"disabled\"] { opacity:.55; }\n.rp-select-value { flex:1 1 auto; min-width:0; }\n.rp-select-options { display:none; margin-top:6px; padding:5px; border:1px solid var(--rp-border); border-radius:8px; background:#fff; box-shadow:0 10px 18px rgba(15,23,42,.08); }\nsnap-select[state=\"expanded\"] .rp-select-options, rp-select[state=\"expanded\"] .rp-select-options { display:grid; gap:2px; }\n.rp-select-option { padding:7px 8px; border-radius:6px; font-size:13px; color:#374151; }\n.rp-select-option.selected { background:#eff6ff; color:#1d4ed8; font-weight:700; }\nsnap-badge, rp-badge { display:inline-grid; place-items:center; min-width:20px; height:20px; padding:0 6px; border-radius:999px; background:#ef4444; color:#fff; font-size:11px; font-weight:750; }\nsnap-avatar, rp-avatar { display:inline-grid; place-items:center; width:var(--snap-size,32px); height:var(--snap-size,32px); border-radius:999px; background:#e0e7ff; color:#3730a3; font-size:12px; font-weight:800; }\nsnap-list, rp-list { display:flex; flex-direction:column; gap:4px; width:100%; }\nsnap-list-item, rp-list-item { display:flex; align-items:center; gap:8px; width:100%; min-width:180px; height:36px; padding:0 10px; border-radius:8px; color:#374151; }\nsnap-list-item[state=\"selected\"], rp-list-item[state=\"selected\"] { background:#eff6ff; color:#1d4ed8; font-weight:700; }\nsnap-list-item[state=\"disabled\"], rp-list-item[state=\"disabled\"] { opacity:.5; }\n.rp-list-label { flex:1 1 auto; }\n.rp-list-badge { margin-left:auto; min-width:18px; height:18px; border-radius:999px; display:grid; place-items:center; padding:0 6px; background:#e5e7eb; color:#374151; font-size:11px; font-weight:700; }\nsnap-tabs, rp-tabs { display:flex; gap:6px; border-bottom:1px solid var(--rp-border); margin-bottom:12px; width:fit-content; }\nsnap-tab, rp-tab { display:inline-flex; align-items:center; gap:6px; padding:9px 13px; border-bottom:2px solid transparent; color:#6b7280; font-size:14px; }\nsnap-tab.rp-tab-active, rp-tab.rp-tab-active { color:var(--rp-primary); border-bottom-color:var(--rp-primary); font-weight:700; }\nsnap-button, rp-button { display:inline-flex; align-items:center; justify-content:center; gap:7px; min-height:34px; padding:0 12px; border-radius:8px; border:1px solid var(--rp-border); background:#fff; color:#374151; font-size:13px; font-weight:650; }\nsnap-button[size=\"sm\"], rp-button[size=\"sm\"] { min-height:28px; padding:0 9px; font-size:12px; border-radius:6px; }\nsnap-button[size=\"lg\"], rp-button[size=\"lg\"] { min-height:40px; padding:0 16px; font-size:14px; }\nsnap-button[variant=\"primary\"], rp-button[variant=\"primary\"] { border-color:var(--rp-primary); background:var(--rp-primary); color:#fff; }\nsnap-button[variant=\"secondary\"], rp-button[variant=\"secondary\"] { border-color:#bfdbfe; background:#eff6ff; color:#1d4ed8; }\nsnap-button[variant=\"danger\"], rp-button[variant=\"danger\"] { border-color:var(--rp-danger); color:var(--rp-danger); }\nsnap-button[variant=\"link\"], rp-button[variant=\"link\"] { border-color:transparent; background:transparent; color:var(--rp-primary); padding-inline:2px; }\nsnap-button[variant=\"ghost\"], rp-button[variant=\"ghost\"] { border-color:transparent; background:transparent; }\nsnap-button[state=\"disabled\"], rp-button[state=\"disabled\"], snap-button[disabled], rp-button[disabled] { opacity:.5; }\nsnap-button-group, rp-button-group { display:inline-flex; gap:0; width:fit-content; }\nsnap-button-group > snap-button, rp-button-group > rp-button { border-radius:0; margin-left:-1px; }\nsnap-button-group > :first-child { border-radius:8px 0 0 8px; margin-left:0; }\nsnap-button-group > :last-child { border-radius:0 8px 8px 0; }\nsnap-table, rp-table { display:table; border-collapse:collapse; width:fit-content; min-width:720px; max-width:980px; background:#fff; border:1px solid var(--rp-border); border-radius:8px; overflow:hidden; }\nsnap-viewport snap-table, rp-viewport rp-table { width:100%; max-width:none; }\n.rp-table-row { display:table-row; }\n.rp-table-cell { display:table-cell; padding:11px 12px; border-bottom:1px solid var(--rp-border); font-size:13px; vertical-align:middle; white-space:nowrap; }\n.rp-table-head .rp-table-cell { background:#f9fafb; color:#6b7280; font-size:12px; font-weight:750; }\n.rp-table-row:last-child .rp-table-cell { border-bottom:0; }\nsnap-table-row, rp-table-row { display:grid; grid-template-columns:44px 150px 240px 90px 90px; align-items:center; min-width:560px; border:1px solid var(--rp-border); border-radius:8px; overflow:hidden; background:#fff; }\nsnap-table-row > span, rp-table-row > span { padding:10px 12px; font-size:13px; }\nsnap-table-row[state=\"unread\"], rp-table-row[state=\"unread\"] { background:#eff6ff; font-weight:700; }\nsnap-table-row[state=\"selected\"], rp-table-row[state=\"selected\"] { outline:2px solid rgba(37,99,235,.35); background:#f8fbff; }\nsnap-table-row[state=\"highlighted\"], rp-table-row[state=\"highlighted\"] { background:#fffbeb; }\nsnap-table-row[state=\"disabled\"], rp-table-row[state=\"disabled\"] { opacity:.5; }\nsnap-bulk-action-bar, rp-bulk-action-bar { display:flex; align-items:center; gap:8px; width:fit-content; padding:8px 10px; margin:0 0 10px; border:1px solid #bfdbfe; background:#eff6ff; border-radius:8px; color:#1e40af; font-size:13px; font-weight:650; }\nsnap-empty, rp-empty { display:grid; justify-items:center; gap:8px; width:fit-content; min-width:240px; padding:24px; border:1px dashed var(--rp-border-strong); border-radius:10px; background:#fff; color:#6b7280; text-align:center; }\n.rp-empty-title { color:#111827; font-weight:700; }\n.rp-empty-desc { font-size:13px; }\nsnap-loading, rp-loading { display:grid; gap:8px; min-width:260px; color:var(--rp-primary); }\n.rp-skeleton-line { height:14px; border-radius:999px; background:linear-gradient(90deg,#f3f4f6,#e5e7eb,#f3f4f6); }\n.rp-spinner { display:inline-grid; place-items:center; width:32px; height:32px; }\nsnap-alert, rp-alert, snap-toast, rp-toast { display:flex; align-items:flex-start; gap:8px; width:fit-content; max-width:420px; padding:10px 12px; border:1px solid var(--rp-border); border-radius:8px; background:#fff; font-size:13px; }\nsnap-alert[type=\"info\"], rp-alert[type=\"info\"], snap-toast[type=\"info\"], rp-toast[type=\"info\"] { border-color:#bfdbfe; background:#eff6ff; color:#1e40af; }\nsnap-alert[type=\"success\"], rp-alert[type=\"success\"], snap-toast[type=\"success\"], rp-toast[type=\"success\"] { border-color:#bbf7d0; background:#f0fdf4; color:#166534; }\nsnap-alert[type=\"warning\"], rp-alert[type=\"warning\"], snap-toast[type=\"warning\"], rp-toast[type=\"warning\"] { border-color:#fde68a; background:#fffbeb; color:#92400e; }\nsnap-alert[type=\"error\"], rp-alert[type=\"error\"], snap-toast[type=\"error\"], rp-toast[type=\"error\"] { border-color:#fecaca; background:#fef2f2; color:#991b1b; }\nsnap-dropdown, rp-dropdown, snap-popover, rp-popover { display:block; width:var(--snap-width,300px); padding:8px; border:1px solid var(--rp-border); border-radius:10px; background:#fff; box-shadow:0 12px 24px rgba(15,23,42,.1); }\nsnap-tooltip, rp-tooltip { display:inline-block; width:fit-content; max-width:240px; padding:6px 8px; border-radius:6px; background:#111827; color:#fff; font-size:12px; }\n.rp-overlay-title { margin:0 0 8px; color:#111827; font-size:14px; font-weight:750; }\nsnap-modal, rp-modal { display:block; width:min(var(--snap-width,480px), 100%); border:1px solid var(--rp-border); border-radius:12px; background:#fff; box-shadow:0 24px 48px rgba(15,23,42,.18); overflow:hidden; }\nsnap-drawer, rp-drawer { display:block; width:min(var(--snap-width,360px), 100%); min-height:320px; border:1px solid var(--rp-border); background:#fff; box-shadow:0 18px 40px rgba(15,23,42,.14); }\n.rp-modal-head, .rp-drawer-head { display:flex; align-items:center; justify-content:space-between; padding:14px 16px; border-bottom:1px solid var(--rp-border); font-weight:750; }\n.rp-modal-body, .rp-drawer-body { padding:16px; }\n.rp-modal-footer { display:flex; justify-content:flex-end; gap:8px; padding:12px 16px; border-top:1px solid var(--rp-border); background:#f9fafb; }\nsnap-card, rp-card { display:block; width:auto; min-width:220px; padding:14px; border:1px solid var(--rp-border); border-radius:10px; background:#fff; }\n.rp-card-image { display:grid; place-items:center; height:120px; margin:-14px -14px 12px; border-radius:10px 10px 0 0; background:#f3f4f6; color:#6b7280; }\n.rp-card-title { display:block; color:#111827; font-weight:750; }\n.rp-card-subtitle { display:block; margin-top:4px; color:#6b7280; font-size:13px; }\n.rp-card-footer { display:block; margin:12px -14px -14px; padding:10px 14px; border-top:1px solid var(--rp-border); background:#f9fafb; }\nsnap-stat-card, rp-stat-card { display:grid; gap:6px; width:auto; min-width:0; padding:16px; border:1px solid var(--rp-border); border-radius:10px; background:#fff; }\n.rp-stat-label { color:#6b7280; font-size:12px; font-weight:650; }\n.rp-stat-value { color:#111827; font-size:26px; font-weight:800; }\n.rp-stat-change { font-size:12px; font-weight:700; }\nsnap-stat-card[trend=\"up\"] .rp-stat-change, rp-stat-card[trend=\"up\"] .rp-stat-change { color:var(--rp-success); }\nsnap-stat-card[trend=\"down\"] .rp-stat-change, rp-stat-card[trend=\"down\"] .rp-stat-change { color:var(--rp-danger); }\nsnap-tag, rp-tag { display:inline-flex; align-items:center; gap:5px; height:24px; padding:0 8px; border-radius:999px; background:#eef2ff; color:#3730a3; font-size:12px; font-weight:650; }\nsnap-tag[color=\"green\"], rp-tag[color=\"green\"] { background:#dcfce7; color:#166534; }\nsnap-tag[color=\"orange\"], rp-tag[color=\"orange\"] { background:#ffedd5; color:#9a3412; }\nsnap-tag[color=\"red\"], rp-tag[color=\"red\"] { background:#fee2e2; color:#991b1b; }\nsnap-checkbox, rp-checkbox, snap-radio, rp-radio { display:inline-flex; align-items:center; gap:8px; font-size:13px; }\n.rp-box { display:inline-grid; place-items:center; width:16px; height:16px; border:1px solid var(--rp-border-strong); border-radius:4px; color:#fff; }\nsnap-checkbox[state=\"checked\"] .rp-box, rp-checkbox[state=\"checked\"] .rp-box, snap-radio[state=\"checked\"] .rp-box, rp-radio[state=\"checked\"] .rp-box, snap-checkbox[state=\"indeterminate\"] .rp-box, rp-checkbox[state=\"indeterminate\"] .rp-box { background:var(--rp-primary); border-color:var(--rp-primary); }\nsnap-checkbox[state=\"disabled\"], rp-checkbox[state=\"disabled\"], snap-radio[state=\"disabled\"], rp-radio[state=\"disabled\"] { opacity:.5; }\nsnap-radio .rp-box, rp-radio .rp-box { border-radius:999px; }\nsnap-toggle, rp-toggle { display:inline-flex; align-items:center; gap:8px; font-size:13px; }\n.rp-toggle-track { display:flex; align-items:center; width:34px; height:20px; border-radius:999px; background:#d1d5db; padding:2px; }\n.rp-toggle-dot { display:block; width:16px; height:16px; border-radius:999px; background:#fff; box-shadow:0 1px 2px rgba(0,0,0,.2); transition:none; }\nsnap-toggle[state=\"on\"] .rp-toggle-track, rp-toggle[state=\"on\"] .rp-toggle-track { background:var(--rp-primary); }\nsnap-toggle[state=\"on\"] .rp-toggle-dot, rp-toggle[state=\"on\"] .rp-toggle-dot { margin-left:14px; }\nsnap-toggle[state=\"disabled\"], rp-toggle[state=\"disabled\"] { opacity:.5; }\nsnap-form, rp-form { display:grid; gap:12px; width:fit-content; }\nsnap-form[layout=\"horizontal\"], rp-form[layout=\"horizontal\"] { grid-template-columns:max-content 1fr; align-items:start; }\nsnap-form-item, rp-form-item { display:grid; gap:6px; width:fit-content; }\n.rp-form-label { color:#374151; font-size:12px; font-weight:700; }\n.rp-form-label.required::after { content:\" *\"; color:var(--rp-danger); }\n.rp-form-error { color:var(--rp-danger); font-size:12px; }\nsnap-upload, rp-upload { display:grid; justify-items:center; gap:8px; width:280px; padding:18px; border:1px dashed var(--rp-border-strong); border-radius:10px; background:#fff; color:#6b7280; text-align:center; font-size:13px; }\nsnap-upload[state=\"has-file\"], rp-upload[state=\"has-file\"] { justify-items:start; border-style:solid; color:#374151; }\nsnap-upload[state=\"uploading\"], rp-upload[state=\"uploading\"] { border-color:#bfdbfe; background:#eff6ff; color:#1e40af; }\nsnap-image-placeholder, rp-image-placeholder { display:grid; place-items:center; width:var(--snap-width,160px); height:var(--snap-height,100px); background:#f3f4f6; border:1px dashed var(--rp-border-strong); border-radius:8px; color:#6b7280; font-size:12px; }\nsnap-progress, rp-progress { display:block; width:180px; height:8px; border-radius:999px; background:#e5e7eb; overflow:hidden; }\nsnap-progress[kind=\"circle\"], rp-progress[kind=\"circle\"], snap-progress[style=\"circle\"], rp-progress[style=\"circle\"] { display:grid; place-items:center; width:52px; height:52px; border-radius:999px; background:conic-gradient(var(--rp-primary) var(--progress,40%), #e5e7eb 0); font-size:12px; font-weight:750; }\n.rp-progress-bar { display:block; height:100%; width:var(--progress,40%); background:var(--rp-primary); }\nsnap-progress[status=\"success\"] .rp-progress-bar, rp-progress[status=\"success\"] .rp-progress-bar { background:var(--rp-success); }\nsnap-progress[status=\"error\"] .rp-progress-bar, rp-progress[status=\"error\"] .rp-progress-bar { background:var(--rp-danger); }\nsnap-pagination, rp-pagination { display:inline-flex; align-items:center; gap:6px; width:fit-content; font-size:13px; }\n.rp-page-btn { display:inline-grid; place-items:center; min-width:30px; height:30px; padding:0 8px; border:1px solid var(--rp-border); border-radius:6px; background:#fff; color:#374151; }\n.rp-page-btn.active { border-color:var(--rp-primary); background:var(--rp-primary); color:#fff; font-weight:750; }\nsnap-steps, rp-steps { display:flex; align-items:center; gap:8px; width:fit-content; }\n.rp-step { display:inline-flex; align-items:center; gap:6px; color:#6b7280; font-size:13px; }\n.rp-step-dot { display:inline-grid; place-items:center; width:22px; height:22px; border-radius:999px; border:1px solid var(--rp-border-strong); background:#fff; color:#6b7280; font-size:11px; font-weight:750; }\n.rp-step.active { color:var(--rp-primary); font-weight:750; }\n.rp-step.active .rp-step-dot { border-color:var(--rp-primary); background:var(--rp-primary); color:#fff; }\n.rp-step.done .rp-step-dot { border-color:var(--rp-success); background:var(--rp-success); color:#fff; }\n.rp-step-sep { width:28px; height:1px; background:var(--rp-border); }\nsnap-breadcrumb, rp-breadcrumb { display:inline-flex; align-items:center; gap:6px; color:#6b7280; font-size:13px; }\n.rp-breadcrumb-current { color:#111827; font-weight:650; }\n\n/* --- data input --- */\nsnap-slider, rp-slider { display:inline-flex; align-items:center; gap:10px; width:220px; }\n.rp-slider-track { position:relative; flex:1; height:4px; border-radius:999px; background:#e5e7eb; }\n.rp-slider-fill { position:absolute; height:100%; border-radius:999px; background:var(--rp-primary); }\n.rp-slider-thumb { position:absolute; top:50%; width:16px; height:16px; margin-left:-8px; transform:translateY(-50%); border-radius:50%; background:#fff; border:1px solid var(--rp-border-strong); box-shadow:0 1px 3px rgba(0,0,0,.2); }\n.rp-slider-value { font-size:12px; color:#374151; min-width:24px; }\nsnap-range, rp-range { display:inline-flex; align-items:center; width:220px; }\nsnap-number-input, rp-number-input { display:inline-flex; align-items:center; gap:6px; min-height:34px; padding:0 4px 0 11px; border:1px solid var(--rp-border-strong); border-radius:8px; background:#fff; width:120px; }\n.rp-num-value { flex:1; font-size:13px; }\n.rp-num-steppers { display:flex; flex-direction:column; }\n.rp-num-step { display:grid; place-items:center; width:20px; height:15px; color:#6b7280; cursor:pointer; }\nsnap-rating, rp-rating { display:inline-flex; gap:2px; color:#d1d5db; }\n.rp-star.filled { color:#f59e0b; }\nsnap-pin-input, rp-pin-input { display:inline-flex; gap:8px; }\n.rp-pin-cell { display:grid; place-items:center; width:40px; height:46px; border:1px solid var(--rp-border-strong); border-radius:8px; font-size:18px; font-weight:700; background:#fff; }\n.rp-pin-cell.active { border-color:var(--rp-primary); box-shadow:0 0 0 3px rgba(37,99,235,.12); }\nsnap-color-swatch, rp-color-swatch { display:inline-flex; align-items:center; gap:8px; padding:4px 10px 4px 4px; border:1px solid var(--rp-border); border-radius:8px; background:#fff; }\n.rp-swatch-chip { width:24px; height:24px; border-radius:6px; border:1px solid rgba(0,0,0,.1); }\n.rp-swatch-hex { font-family:ui-monospace,Menlo,monospace; font-size:12px; color:#374151; }\nsnap-autocomplete, rp-autocomplete { display:inline-block; width:280px; }\n.rp-ac-options { display:grid; gap:1px; margin-top:6px; padding:5px; border:1px solid var(--rp-border); border-radius:8px; background:#fff; box-shadow:0 10px 18px rgba(15,23,42,.08); }\n.rp-ac-option { padding:7px 8px; border-radius:6px; font-size:13px; color:#374151; }\n.rp-ac-option:first-child { background:#eff6ff; color:#1d4ed8; }\n\n/* --- data display additions --- */\nsnap-chip, rp-chip { display:inline-flex; align-items:center; gap:5px; height:26px; padding:0 9px; border-radius:999px; border:1px solid var(--rp-border); background:#f9fafb; color:#374151; font-size:12px; }\nsnap-tree, rp-tree { display:flex; flex-direction:column; gap:1px; width:fit-content; min-width:240px; }\n.rp-tree-row { display:flex; align-items:center; gap:6px; padding:5px 8px; border-radius:6px; color:#374151; font-size:13px; padding-left:calc(8px + var(--tree-level,0) * 18px); }\n.rp-tree-row.selected { background:#eff6ff; color:#1d4ed8; font-weight:650; }\n.rp-tree-spacer { display:inline-block; width:12px; }\n.rp-tree-label { flex:1; }\nsnap-timeline, rp-timeline { display:flex; flex-direction:column; width:fit-content; min-width:260px; }\nsnap-timeline-item, rp-timeline-item { display:flex; gap:12px; padding-bottom:16px; position:relative; }\nsnap-timeline-item:not(:last-child)::before, rp-timeline-item:not(:last-child)::before { content:''; position:absolute; left:6px; top:16px; bottom:0; width:2px; background:var(--rp-border); }\n.rp-timeline-dot { flex:0 0 auto; width:14px; height:14px; margin-top:2px; border-radius:50%; background:#fff; border:2px solid var(--rp-border-strong); z-index:1; }\n.rp-timeline-dot.active { border-color:var(--rp-primary); background:var(--rp-primary); }\n.rp-timeline-dot.done { border-color:var(--rp-success); background:var(--rp-success); }\n.rp-timeline-dot.error { border-color:var(--rp-danger); background:var(--rp-danger); }\n.rp-timeline-main { flex:1; }\n.rp-timeline-head { display:flex; align-items:baseline; gap:8px; }\n.rp-timeline-label { font-weight:650; color:#111827; font-size:13px; }\n.rp-timeline-time { font-size:12px; color:#9ca3af; }\n.rp-timeline-content { font-size:13px; color:#6b7280; margin-top:2px; }\nsnap-calendar, rp-calendar { display:inline-block; width:280px; padding:12px; border:1px solid var(--rp-border); border-radius:10px; background:#fff; }\n.rp-cal-head { text-align:center; font-weight:700; font-size:14px; margin-bottom:10px; }\n.rp-cal-grid { display:grid; grid-template-columns:repeat(7,1fr); gap:2px; }\n.rp-cal-dow { display:grid; place-items:center; height:24px; font-size:11px; color:#9ca3af; }\n.rp-cal-cell { display:grid; place-items:center; height:32px; border-radius:6px; font-size:13px; color:#374151; }\n.rp-cal-cell.selected { background:var(--rp-primary); color:#fff; font-weight:700; }\n.rp-cal-cell.muted { color:transparent; }\nsnap-kanban, rp-kanban { display:flex; gap:12px; width:fit-content; align-items:flex-start; }\nsnap-kanban-column, rp-kanban-column { display:flex; flex-direction:column; width:200px; padding:10px; border-radius:10px; background:#f3f4f6; }\n.rp-kanban-head { display:flex; align-items:center; justify-content:space-between; font-weight:650; font-size:13px; margin-bottom:8px; color:#374151; }\n.rp-kanban-count { display:grid; place-items:center; min-width:18px; height:18px; padding:0 5px; border-radius:999px; background:#e5e7eb; font-size:11px; }\n.rp-kanban-body { display:flex; flex-direction:column; gap:8px; }\nsnap-kanban-card, rp-kanban-card { display:block; padding:10px; border-radius:8px; background:#fff; border:1px solid var(--rp-border); }\n.rp-kanban-card-title { display:block; font-size:13px; color:#111827; }\n.rp-kanban-card-tag { display:inline-block; margin-top:6px; padding:1px 7px; border-radius:999px; background:#eef2ff; color:#3730a3; font-size:11px; }\nsnap-code-block, rp-code-block { display:block; width:fit-content; min-width:320px; border:1px solid var(--rp-border); border-radius:8px; overflow:hidden; background:#0f172a; }\n.rp-code-head { padding:6px 12px; font-family:ui-monospace,Menlo,monospace; font-size:11px; color:#94a3b8; background:#1e293b; }\n.rp-code-body { padding:10px 0; }\n.rp-code-line { display:flex; align-items:center; gap:12px; padding:1px 12px; }\n.rp-code-ln { width:20px; text-align:right; color:#475569; font-family:ui-monospace,Menlo,monospace; font-size:11px; }\n.rp-code-bar { height:8px; border-radius:3px; background:#334155; }\nsnap-diff, rp-diff { display:block; width:fit-content; min-width:320px; border:1px solid var(--rp-border); border-radius:8px; overflow:hidden; font-family:ui-monospace,Menlo,monospace; }\n.rp-diff-line { display:flex; align-items:center; gap:10px; padding:2px 10px; }\n.rp-diff-line.add { background:#dcfce7; }\n.rp-diff-line.del { background:#fee2e2; }\n.rp-diff-sign { width:10px; color:#6b7280; }\n.rp-diff-line.add .rp-code-bar { background:#86efac; }\n.rp-diff-line.del .rp-code-bar { background:#fca5a5; }\n.rp-diff-line.ctx .rp-code-bar { background:#e5e7eb; }\nsnap-image-grid, rp-image-grid { display:grid; grid-template-columns:repeat(var(--grid-cols,3),1fr); gap:8px; width:fit-content; }\n.rp-grid-cell { display:grid; place-items:center; width:80px; height:80px; border-radius:8px; background:#f3f4f6; color:#9ca3af; }\nsnap-key-value, rp-key-value { display:flex; flex-direction:column; width:fit-content; min-width:240px; border:1px solid var(--rp-border); border-radius:8px; overflow:hidden; }\nsnap-kv-row, rp-kv-row { display:flex; border-bottom:1px solid var(--rp-border); }\nsnap-kv-row:last-child, rp-kv-row:last-child { border-bottom:0; }\n.rp-kv-key { width:120px; padding:8px 12px; background:#f9fafb; color:#6b7280; font-size:13px; }\n.rp-kv-val { flex:1; padding:8px 12px; color:#111827; font-size:13px; }\nsnap-accordion, rp-accordion { display:flex; flex-direction:column; width:fit-content; min-width:320px; border:1px solid var(--rp-border); border-radius:8px; overflow:hidden; }\nsnap-accordion-item, rp-accordion-item { display:block; border-bottom:1px solid var(--rp-border); }\nsnap-accordion-item:last-child, rp-accordion-item:last-child { border-bottom:0; }\n.rp-accordion-head { display:flex; align-items:center; gap:8px; padding:11px 14px; font-weight:650; font-size:13px; color:#111827; }\n.rp-accordion-body { padding:0 14px 14px 36px; font-size:13px; color:#6b7280; }\nsnap-banner, rp-banner { display:flex; align-items:center; gap:10px; width:fit-content; min-width:480px; padding:12px 16px; border-radius:8px; font-size:13px; background:#eff6ff; color:#1e40af; border:1px solid #bfdbfe; }\nsnap-banner[type=\"success\"], rp-banner[type=\"success\"] { background:#f0fdf4; color:#166534; border-color:#bbf7d0; }\nsnap-banner[type=\"warning\"], rp-banner[type=\"warning\"] { background:#fffbeb; color:#92400e; border-color:#fde68a; }\nsnap-banner[type=\"error\"], rp-banner[type=\"error\"] { background:#fef2f2; color:#991b1b; border-color:#fecaca; }\n.rp-banner-text { flex:1; }\nsnap-skeleton, rp-skeleton { display:flex; flex-direction:column; gap:8px; width:fit-content; min-width:240px; }\n.rp-skel { border-radius:8px; background:linear-gradient(90deg,#f3f4f6,#e5e7eb,#f3f4f6); }\n.rp-skel-block { height:120px; }\n.rp-skel-avatar { width:40px; height:40px; border-radius:50%; }\n.rp-skel-avatar.sm { width:28px; height:28px; }\n.rp-skel-row { display:flex; align-items:center; gap:10px; }\nsnap-countdown, rp-countdown { display:inline-flex; align-items:center; gap:5px; padding:3px 9px; border-radius:999px; background:#fef2f2; color:#991b1b; font-size:12px; font-weight:650; font-variant-numeric:tabular-nums; }\nsnap-result, rp-result { display:grid; justify-items:center; gap:8px; width:fit-content; min-width:280px; padding:32px; text-align:center; }\n.rp-result-icon.success { color:var(--rp-success); }\n.rp-result-icon.error { color:var(--rp-danger); }\n.rp-result-icon.empty { color:#9ca3af; }\n.rp-result-title { font-size:16px; font-weight:700; color:#111827; }\n.rp-result-desc { font-size:13px; color:#6b7280; }\nsnap-permission-gate, rp-permission-gate { display:block; position:relative; width:fit-content; }\n.rp-gate-content { opacity:.4; filter:grayscale(1); pointer-events:none; }\n.rp-gate-overlay { position:absolute; inset:0; display:flex; align-items:center; justify-content:center; gap:6px; background:rgba(255,255,255,.6); color:#6b7280; font-size:12px; font-weight:650; border-radius:8px; }\nsnap-quota-bar, rp-quota-bar { display:block; width:fit-content; min-width:240px; }\n.rp-quota-head { display:flex; justify-content:space-between; font-size:12px; color:#374151; margin-bottom:5px; }\n.rp-quota-num.danger { color:var(--rp-danger); font-weight:700; }\n.rp-quota-track { display:block; height:8px; border-radius:999px; background:#e5e7eb; overflow:hidden; }\n.rp-quota-fill { display:block; height:100%; background:var(--rp-primary); }\n.rp-quota-fill.danger { background:var(--rp-danger); }\nsnap-api-key, rp-api-key { display:inline-flex; align-items:center; gap:8px; padding:6px 8px 6px 12px; border:1px solid var(--rp-border); border-radius:8px; background:#f9fafb; }\n.rp-apikey-val { font-family:ui-monospace,Menlo,monospace; font-size:12px; color:#374151; }\n.rp-apikey-copy { display:grid; place-items:center; width:26px; height:26px; border-radius:6px; color:#6b7280; }\nsnap-audit-row, rp-audit-row { display:flex; align-items:baseline; gap:8px; padding:8px 0; border-bottom:1px solid var(--rp-border); width:fit-content; min-width:320px; font-size:13px; }\n.rp-audit-actor { font-weight:650; color:#111827; }\n.rp-audit-action { flex:1; color:#6b7280; }\n.rp-audit-time { color:#9ca3af; font-size:12px; }\nsnap-workflow-node, rp-workflow-node { display:inline-flex; align-items:center; gap:7px; padding:7px 12px; border:1px solid var(--rp-border); border-radius:8px; background:#fff; font-size:13px; }\n.rp-wf-icon.done { color:var(--rp-success); }\n.rp-wf-icon.active { color:var(--rp-primary); }\n.rp-wf-icon.error { color:var(--rp-danger); }\n.rp-wf-icon.default { color:#9ca3af; }\n\n/* --- navigation & layout additions --- */\nsnap-segmented, rp-segmented { display:inline-flex; padding:2px; border-radius:8px; background:#f3f4f6; gap:2px; }\n.rp-seg-item { padding:5px 14px; border-radius:6px; font-size:13px; color:#6b7280; }\n.rp-seg-item.active { background:#fff; color:#111827; font-weight:650; box-shadow:0 1px 3px rgba(0,0,0,.08); }\nsnap-command-palette, rp-command-palette { display:block; width:520px; border:1px solid var(--rp-border); border-radius:12px; background:#fff; box-shadow:0 24px 48px rgba(15,23,42,.18); overflow:hidden; }\n.rp-cmdk-input { display:flex; align-items:center; gap:10px; padding:14px 16px; border-bottom:1px solid var(--rp-border); }\n.rp-cmdk-list { padding:6px; }\n.rp-cmdk-item { display:flex; align-items:center; gap:10px; padding:9px 10px; border-radius:8px; font-size:13px; color:#374151; }\n.rp-cmdk-item.active { background:#eff6ff; color:#1d4ed8; }\nsnap-context-menu, rp-context-menu, snap-menu, rp-menu { display:inline-flex; flex-direction:column; min-width:180px; padding:5px; border:1px solid var(--rp-border); border-radius:10px; background:#fff; box-shadow:0 12px 24px rgba(15,23,42,.12); }\n.rp-menu-item, snap-menu-item, rp-menu-item { display:flex; align-items:center; gap:8px; padding:7px 10px; border-radius:6px; font-size:13px; color:#374151; }\n.rp-menu-item.danger, snap-menu-item.danger, rp-menu-item.danger { color:var(--rp-danger); }\n.rp-menu-item.disabled, snap-menu-item.disabled, rp-menu-item.disabled { opacity:.45; }\n.rp-menu-label { flex:1; }\n.rp-menu-shortcut { color:#9ca3af; font-size:12px; }\nsnap-toc, rp-toc { display:flex; flex-direction:column; gap:2px; width:fit-content; min-width:160px; border-left:2px solid var(--rp-border); }\n.rp-toc-item { padding:4px 12px; font-size:13px; color:#6b7280; border-left:2px solid transparent; margin-left:-2px; }\n.rp-toc-item.active { color:var(--rp-primary); border-left-color:var(--rp-primary); font-weight:650; }\nsnap-kbd, rp-kbd { display:inline-flex; align-items:center; gap:3px; }\n.rp-kbd-key { display:inline-grid; place-items:center; min-width:20px; height:20px; padding:0 5px; border:1px solid var(--rp-border-strong); border-bottom-width:2px; border-radius:5px; background:#f9fafb; font-size:11px; font-family:var(--rp-font); color:#374151; }\n.rp-kbd-plus { color:#9ca3af; font-size:11px; }\nsnap-split-pane, rp-split-pane { display:grid; grid-template-columns:var(--snap-columns,1fr 1fr); width:fit-content; border:1px solid var(--rp-border); border-radius:8px; overflow:hidden; }\nsnap-split-pane > *, rp-split-pane > * { padding:14px; }\nsnap-split-pane > *:not(:last-child), rp-split-pane > *:not(:last-child) { border-right:1px solid var(--rp-border); }\nsnap-divider, rp-divider { display:block; height:1px; background:var(--rp-border); margin:12px 0; }\nsnap-divider.rp-divider-v, rp-divider.rp-divider-v { display:inline-block; width:1px; height:auto; align-self:stretch; margin:0 12px; }\nsnap-spacer, rp-spacer { display:block; height:var(--snap-size,16px); }\n\n/* --- iOS --- */\nsnap-ios-navbar, rp-ios-navbar { display:block; background:rgba(249,249,249,.94); border-bottom:1px solid #d8d8dc; padding:6px 12px; font-family:-apple-system,BlinkMacSystemFont,sans-serif; }\n.rp-ios-navbar-row { display:grid; grid-template-columns:1fr auto 1fr; align-items:center; min-height:36px; }\n.rp-ios-nav-leading { display:flex; align-items:center; gap:2px; color:#007aff; font-size:15px; }\n.rp-ios-nav-title { text-align:center; font-weight:600; font-size:16px; color:#000; }\n.rp-ios-nav-trailing { text-align:right; color:#007aff; font-size:15px; }\n.rp-ios-nav-large { font-size:30px; font-weight:700; color:#000; padding:2px 2px 6px; }\nsnap-ios-tabbar, rp-ios-tabbar { display:flex; background:rgba(249,249,249,.94); border-top:1px solid #d8d8dc; padding:6px 0 4px; }\n.rp-ios-tab { flex:1; display:flex; flex-direction:column; align-items:center; gap:2px; color:#8e8e93; font-size:10px; }\n.rp-ios-tab.active { color:#007aff; }\n.rp-ios-tab-label { font-size:10px; }\nsnap-ios-list, rp-ios-list { display:block; border-radius:10px; background:#fff; overflow:hidden; width:fit-content; min-width:300px; border:1px solid #e5e5ea; font-family:-apple-system,sans-serif; }\n.rp-ios-list-header { padding:6px 16px; font-size:13px; color:#6d6d72; background:#f2f2f7; text-transform:none; }\nsnap-ios-list-item, rp-ios-list-item { display:flex; align-items:center; gap:10px; padding:11px 16px; border-bottom:1px solid #e5e5ea; font-size:15px; color:#000; }\nsnap-ios-list-item:last-child, rp-ios-list-item:last-child { border-bottom:0; }\n.rp-ios-li-icon { display:grid; place-items:center; width:28px; height:28px; border-radius:6px; background:#007aff; color:#fff; }\n.rp-ios-li-label { flex:1; }\n.rp-ios-li-detail { color:#8e8e93; }\n.rp-ios-li-chevron { color:#c7c7cc; }\nsnap-ios-action-sheet, rp-ios-action-sheet { display:flex; flex-direction:column; gap:8px; width:fit-content; min-width:320px; padding:8px; font-family:-apple-system,sans-serif; }\n.rp-ios-as-group { border-radius:14px; overflow:hidden; background:rgba(255,255,255,.82); backdrop-filter:blur(20px); }\n.rp-ios-as-title { padding:14px; text-align:center; font-size:13px; color:#8e8e93; border-bottom:1px solid #d1d1d6; }\n.rp-ios-as-action { padding:16px; text-align:center; font-size:18px; color:#007aff; border-bottom:1px solid #d1d1d6; }\n.rp-ios-as-action:last-child { border-bottom:0; }\n.rp-ios-as-action.destructive { color:#ff3b30; }\n.rp-ios-as-action.cancel { font-weight:600; }\nsnap-ios-alert, rp-ios-alert { display:block; width:270px; border-radius:14px; overflow:hidden; background:rgba(255,255,255,.92); backdrop-filter:blur(20px); font-family:-apple-system,sans-serif; }\n.rp-ios-alert-body { padding:18px 16px 14px; text-align:center; }\n.rp-ios-alert-title { font-size:17px; font-weight:600; color:#000; }\n.rp-ios-alert-msg { margin-top:3px; font-size:13px; color:#000; }\n.rp-ios-alert-actions { display:flex; border-top:1px solid #d1d1d6; }\n.rp-ios-alert-btn { flex:1; padding:11px; text-align:center; font-size:17px; color:#007aff; }\n.rp-ios-alert-btn.primary { font-weight:600; }\n.rp-ios-alert-btn:not(:last-child) { border-right:1px solid #d1d1d6; }\nsnap-ios-switch, rp-ios-switch { display:inline-flex; align-items:center; gap:8px; font-family:-apple-system,sans-serif; font-size:15px; }\n.rp-ios-switch-track { width:51px; height:31px; border-radius:999px; background:#34c759; padding:2px; }\n.rp-ios-switch-dot { display:block; width:27px; height:27px; border-radius:50%; background:#fff; margin-left:20px; box-shadow:0 2px 4px rgba(0,0,0,.2); }\nsnap-ios-segmented, rp-ios-segmented { display:inline-flex; padding:2px; border-radius:9px; background:#767680; background:rgba(118,118,128,.12); gap:2px; font-family:-apple-system,sans-serif; }\n.rp-ios-seg-item { padding:6px 16px; border-radius:7px; font-size:13px; color:#000; }\n.rp-ios-seg-item.active { background:#fff; font-weight:600; box-shadow:0 1px 3px rgba(0,0,0,.12); }\nsnap-ios-button, rp-ios-button { display:inline-grid; place-items:center; min-height:34px; padding:0 16px; border-radius:8px; background:#007aff; color:#fff; font-size:15px; font-weight:600; font-family:-apple-system,sans-serif; }\nsnap-ios-button[variant=\"tinted\"], rp-ios-button[variant=\"tinted\"] { background:rgba(0,122,255,.15); color:#007aff; }\nsnap-ios-button[variant=\"plain\"], rp-ios-button[variant=\"plain\"] { background:transparent; color:#007aff; }\nsnap-ios-search, rp-ios-search { display:inline-flex; align-items:center; gap:6px; width:280px; height:36px; padding:0 10px; border-radius:10px; background:rgba(118,118,128,.12); color:#8e8e93; font-size:15px; font-family:-apple-system,sans-serif; }\nsnap-ios-stepper, rp-ios-stepper { display:inline-flex; align-items:center; border-radius:8px; background:rgba(118,118,128,.12); }\n.rp-ios-step { display:grid; place-items:center; width:46px; height:32px; color:#000; }\n.rp-ios-step-div { width:1px; height:18px; background:rgba(0,0,0,.15); }\n\n/* --- macOS --- */\nsnap-macos-window, rp-macos-window { display:block; width:fit-content; min-width:480px; border-radius:10px; overflow:hidden; border:1px solid #d1d1d6; background:#fff; box-shadow:0 20px 60px rgba(0,0,0,.25); font-family:-apple-system,sans-serif; }\n.rp-mac-titlebar { display:flex; align-items:center; gap:10px; height:38px; padding:0 14px; background:#ececec; border-bottom:1px solid #d1d1d6; }\n.rp-mac-lights { display:flex; gap:8px; }\n.rp-mac-light { width:12px; height:12px; border-radius:50%; }\n.rp-mac-light.close { background:#ff5f57; }\n.rp-mac-light.min { background:#febc2e; }\n.rp-mac-light.max { background:#28c840; }\n.rp-mac-title { flex:1; text-align:center; font-size:13px; font-weight:600; color:#3c3c43; }\n.rp-mac-window-body { padding:0; }\nsnap-macos-toolbar, rp-macos-toolbar { display:flex; align-items:center; gap:10px; padding:8px 14px; background:#f6f6f6; border-bottom:1px solid #d1d1d6; }\nsnap-macos-menubar, rp-macos-menubar { display:flex; align-items:center; gap:18px; height:26px; padding:0 14px; background:rgba(246,246,246,.9); border-bottom:1px solid #d1d1d6; font-size:13px; font-family:-apple-system,sans-serif; }\n.rp-mac-menubar-apple { color:#000; }\n.rp-mac-menu-title { color:#000; }\n.rp-mac-menu-title.active { background:#007aff; color:#fff; padding:1px 7px; border-radius:4px; }\nsnap-macos-sidebar, rp-macos-sidebar { display:flex; flex-direction:column; gap:1px; width:220px; padding:8px; background:rgba(246,246,246,.85); font-family:-apple-system,sans-serif; }\nsnap-macos-source-item, rp-macos-source-item { display:flex; align-items:center; gap:7px; padding:5px 8px; border-radius:6px; font-size:13px; color:#3c3c43; }\nsnap-macos-source-item.selected, rp-macos-source-item.selected { background:#007aff; color:#fff; }\n.rp-mac-source-group { padding:8px 8px 3px; font-size:11px; font-weight:700; color:#8e8e93; text-transform:uppercase; }\nsnap-macos-segmented, rp-macos-segmented { display:inline-flex; border:1px solid #c4c4c7; border-radius:6px; overflow:hidden; font-family:-apple-system,sans-serif; }\n.rp-mac-seg-item { padding:4px 14px; font-size:13px; color:#000; background:#fff; border-right:1px solid #c4c4c7; }\n.rp-mac-seg-item:last-child { border-right:0; }\n.rp-mac-seg-item.active { background:#007aff; color:#fff; }\nsnap-macos-popover, rp-macos-popover { display:inline-block; position:relative; }\n.rp-mac-pop-arrow { display:block; width:16px; height:8px; margin:0 auto -1px; clip-path:polygon(50% 0,100% 100%,0 100%); background:#fff; border:1px solid #d1d1d6; }\n.rp-mac-pop-body { min-width:220px; padding:12px; border-radius:10px; border:1px solid #d1d1d6; background:#fff; box-shadow:0 12px 40px rgba(0,0,0,.2); }\n.rp-mac-pop-title { font-weight:600; font-size:13px; margin-bottom:8px; }\nsnap-macos-sheet, rp-macos-sheet { display:block; width:fit-content; min-width:420px; border-radius:10px; background:#fff; box-shadow:0 24px 60px rgba(0,0,0,.3); padding:18px; font-family:-apple-system,sans-serif; }\n.rp-mac-sheet-title { font-size:15px; font-weight:700; margin-bottom:12px; }\n.rp-mac-sheet-actions { display:flex; justify-content:flex-end; gap:8px; margin-top:16px; }\nsnap-macos-stepper, rp-macos-stepper { display:inline-flex; flex-direction:column; border:1px solid #c4c4c7; border-radius:5px; overflow:hidden; }\n.rp-mac-step { display:grid; place-items:center; width:22px; height:13px; background:#fff; color:#3c3c43; }\n.rp-mac-step.up { border-bottom:1px solid #c4c4c7; }\nsnap-macos-disclosure, rp-macos-disclosure { display:block; font-family:-apple-system,sans-serif; }\n.rp-mac-disc-head { display:flex; align-items:center; gap:5px; font-size:13px; font-weight:600; color:#000; }\n.rp-mac-disc-tri { display:inline-flex; transition:none; }\n.rp-mac-disc-tri.open { transform:rotate(90deg); }\n.rp-mac-disc-body { padding:8px 0 0 18px; font-size:13px; color:#3c3c43; }\nsnap-macos-table, rp-macos-table { display:flex; flex-direction:column; width:fit-content; min-width:360px; border:1px solid #d1d1d6; border-radius:6px; overflow:hidden; font-family:-apple-system,sans-serif; }\n.rp-mac-tr { display:flex; }\n.rp-mac-tr.rp-mac-th { background:#f6f6f6; border-bottom:1px solid #d1d1d6; font-size:12px; font-weight:600; color:#3c3c43; }\n.rp-mac-tr.alt { background:#f5f8ff; }\n.rp-mac-td { flex:1; display:flex; align-items:center; gap:6px; padding:6px 12px; font-size:13px; color:#3c3c43; }\n.rp-mac-cell-bar { height:8px; border-radius:3px; background:#e5e7eb; }\n\n/* --- agent / conversational UI (Codex-style: single column, de-bubbled) --- */\nsnap-chat, rp-chat { display:flex; flex-direction:column; gap:24px; width:fit-content; min-width:520px; max-width:680px; }\nsnap-user-message, rp-user-message, snap-assistant-message, rp-assistant-message { display:block; }\n.rp-msg-role { font-size:12px; font-weight:700; color:#9ca3af; letter-spacing:.02em; margin:0 0 6px; }\n.rp-msg-content { display:flex; flex-direction:column; gap:12px; font-size:14px; line-height:1.7; color:#1f2937; }\nsnap-user-message .rp-msg-content, rp-user-message .rp-msg-content { color:#111827; }\nsnap-system-message, rp-system-message { display:flex; justify-content:center; }\n.rp-sysmsg-line { padding:3px 12px; border-radius:999px; background:#f3f4f6; color:#6b7280; font-size:12px; }\nsnap-tool-call, rp-tool-call { display:block; width:fit-content; min-width:280px; max-width:600px; }\n.rp-tool-head { display:flex; align-items:center; gap:8px; font-size:13px; color:#6b7280; }\n.rp-tool-glyph { display:inline-flex; }\n.rp-tool-glyph.done { color:var(--rp-success); }\n.rp-tool-glyph.running { color:var(--rp-primary); }\n.rp-tool-glyph.error { color:var(--rp-danger); }\n.rp-tool-name { font-family:ui-monospace,Menlo,monospace; font-weight:650; color:#374151; }\n.rp-tool-args-inline { font-family:ui-monospace,Menlo,monospace; color:#9ca3af; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }\n.rp-tool-body { margin-top:8px; padding-left:21px; }\nsnap-agent-output, rp-agent-output { display:block; width:fit-content; min-width:280px; max-width:600px; border:1px solid var(--rp-border); border-radius:8px; overflow:hidden; background:#f8fafc; }\n.rp-output-head { padding:6px 12px; font-size:12px; color:#6b7280; border-bottom:1px solid var(--rp-border); font-family:ui-monospace,Menlo,monospace; }\n.rp-output-body { padding:12px; font-family:ui-monospace,Menlo,monospace; font-size:12.5px; line-height:1.6; color:#334155; white-space:pre-wrap; }\nsnap-reasoning, rp-reasoning { display:block; width:fit-content; min-width:280px; max-width:600px; }\n.rp-reason-head { display:flex; align-items:center; gap:6px; font-size:13px; color:#9ca3af; }\n.rp-reason-body { margin-top:8px; padding-left:19px; border-left:2px solid var(--rp-border); font-size:13px; line-height:1.7; color:#6b7280; }\nsnap-message-actions, rp-message-actions { display:inline-flex; gap:2px; }\n.rp-msg-action { display:grid; place-items:center; width:28px; height:28px; border-radius:6px; color:#9ca3af; cursor:pointer; }\n.rp-msg-action:hover { background:#f3f4f6; color:#374151; }\nsnap-suggestions, rp-suggestions { display:flex; flex-wrap:wrap; gap:8px; }\n.rp-suggestion { padding:7px 13px; border:1px solid var(--rp-border); border-radius:8px; font-size:13px; color:#374151; background:#fff; cursor:pointer; }\n.rp-suggestion:hover { border-color:var(--rp-border-strong); background:#f9fafb; }\nsnap-typing, rp-typing { display:flex; align-items:center; }\n.rp-typing-dots { display:inline-flex; gap:4px; }\n.rp-typing-dots > span { width:7px; height:7px; border-radius:50%; background:#c7c7cc; }\nsnap-composer, rp-composer { display:flex; align-items:center; gap:10px; width:fit-content; min-width:520px; max-width:680px; padding:9px 9px 9px 14px; border:1px solid var(--rp-border-strong); border-radius:14px; background:#fff; }\n.rp-composer-attach { display:inline-flex; color:#9ca3af; }\n.rp-composer-input { flex:1; font-size:14px; }\n.rp-composer-send { display:grid; place-items:center; width:32px; height:32px; border-radius:8px; background:#111827; color:#fff; }\n.rp-composer-send.streaming { background:var(--rp-danger); }\nsnap-citation, rp-citation { display:inline-flex; align-items:center; gap:6px; max-width:280px; padding:3px 9px 3px 3px; border:1px solid var(--rp-border); border-radius:6px; background:#f9fafb; font-size:12px; color:#374151; }\n.rp-cite-idx { display:grid; place-items:center; width:17px; height:17px; border-radius:4px; background:#e5e7eb; color:#374151; font-size:11px; font-weight:700; }\n.rp-cite-title { overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }\nsnap-token-usage, rp-token-usage { display:inline-flex; align-items:center; gap:7px; font-size:12px; color:#9ca3af; }\n.rp-token-track { width:90px; height:5px; border-radius:999px; background:#e5e7eb; overflow:hidden; }\n.rp-token-fill { display:block; height:100%; background:#9ca3af; }\n`;\n\nexport function injectStyle() {\n if (document.getElementById(RPUI_STYLE_ID)) return;\n const el = document.createElement(\"style\");\n el.id = RPUI_STYLE_ID;\n el.textContent = style;\n document.head.appendChild(el);\n}\n","import { injectStyle } from '../core/style';\nimport { attr, escapeHtml } from '../core/dom';\n\nexport class RpAnnotation extends HTMLElement {\n private ro?: ResizeObserver;\n private frame = 0;\n\n connectedCallback() {\n injectStyle();\n if (this.dataset.rpReady) {\n this.setupSlicePins();\n return;\n }\n this.dataset.rpReady = 'true';\n const existing = Array.from(this.childNodes);\n const depth = this.annotationDepth();\n const id = attr(this, 'id');\n const label = attr(this, 'label', id ? `Annotation ${id}` : 'Annotation');\n\n // Assign section path: top-level uses id, nested uses parent-path + sibling index\n let sectionPath: string;\n if (id) {\n sectionPath = id;\n } else {\n const parentSection = (this.closest('[data-rp-section]') as HTMLElement | null)?.dataset.rpSection ?? '';\n const siblings = this.parentElement ? Array.from(this.parentElement.children).filter(\n el => el.tagName.toLowerCase() === 'rp-annotation' || el.tagName.toLowerCase() === 'proto-annotation'\n ) : [];\n const idx = siblings.indexOf(this) + 1;\n sectionPath = parentSection ? `${parentSection}-${idx}` : String(idx);\n }\n this.dataset.rpSection = sectionPath;\n\n const marker = document.createElement('span');\n const kind = id ? 'drop' : depth <= 1 ? 'circle' : 'triangle';\n marker.className = `rp-annotation-marker ${kind}`;\n // Show the local index (last segment of the section path) inside every marker,\n // so a UI slice annotated one level deeper can be referenced unambiguously.\n const localIndex = id || sectionPath.split('-').pop() || '';\n marker.innerHTML = `<span>${escapeHtml(localIndex)}</span>`;\n\n const head = document.createElement('div');\n head.className = 'rp-annotation-head';\n head.append(marker);\n\n const title = document.createElement('span');\n title.className = 'rp-annotation-title';\n title.textContent = label;\n title.addEventListener('click', () => {\n const url = new URL(location.href);\n url.searchParams.set('section', sectionPath);\n history.pushState(null, '', url);\n window.dispatchEvent(new CustomEvent('rp-section', { detail: sectionPath }));\n });\n head.append(title);\n\n const body = document.createElement('div');\n body.className = 'rp-annotation-body';\n existing.forEach(n => body.appendChild(n));\n this.append(head, body);\n\n this.setupSlicePins();\n }\n\n disconnectedCallback() { this.ro?.disconnect(); if (this.frame) cancelAnimationFrame(this.frame); }\n\n // A UI slice inside this annotation may carry data-pin markers on sub-regions.\n // Render pins on those slices so their numbers connect to the deeper annotations\n // that explain them — mirroring how rp-main-view pins top-level regions.\n private setupSlicePins() {\n const body = this.querySelector<HTMLElement>(':scope > .rp-annotation-body');\n if (!body || !body.querySelector('[data-pin]')) return;\n this.ro?.disconnect();\n this.scheduleSlicePins(body);\n this.ro = new ResizeObserver(() => this.scheduleSlicePins(body));\n this.ro.observe(this);\n }\n\n private scheduleSlicePins(body: HTMLElement) {\n if (this.frame) return;\n this.frame = requestAnimationFrame(() => { this.frame = 0; this.renderSlicePins(body); });\n }\n\n private renderSlicePins(body: HTMLElement) {\n body.querySelectorAll(':scope > .rp-pin').forEach(p => p.remove());\n const bodyRect = body.getBoundingClientRect();\n body.querySelectorAll<HTMLElement>('[data-pin]').forEach(target => {\n // Only own data-pin elements whose nearest annotation ancestor is this one.\n if (target.closest('rp-annotation, proto-annotation') !== this) return;\n const pinId = target.dataset.pin;\n if (!pinId) return;\n const r = target.getBoundingClientRect();\n const pin = document.createElement('span');\n pin.className = 'rp-pin rp-pin-slice';\n pin.style.left = `${r.left - bodyRect.left}px`;\n pin.style.top = `${r.top - bodyRect.top}px`;\n pin.innerHTML = `<span>${escapeHtml(pinId)}</span>`;\n body.appendChild(pin);\n });\n }\n\n annotationDepth() {\n let d = 0; let p = this.parentElement;\n while (p) {\n if (p.tagName.toLowerCase() === 'rp-annotation' || p.tagName.toLowerCase() === 'proto-annotation') d++;\n p = p.parentElement;\n }\n return d;\n }\n}\n\nexport class RpEnum extends HTMLElement { connectedCallback() { injectStyle(); } }\n\nexport class RpEnumItem extends HTMLElement {\n connectedCallback() {\n injectStyle();\n if (this.dataset.rpReady) return;\n this.dataset.rpReady = 'true';\n const children = Array.from(this.childNodes);\n\n // Compute 1-based index among same-tag siblings\n const parent = this.parentElement;\n const siblings = parent ? Array.from(parent.children).filter(\n el => el.tagName.toLowerCase() === 'rp-enum-item' || el.tagName.toLowerCase() === 'proto-enum-item'\n ) : [];\n const idx = siblings.indexOf(this) + 1;\n\n const labelEl = document.createElement('span');\n labelEl.className = 'rp-enum-label';\n\n const idxBadge = document.createElement('span');\n idxBadge.className = 'rp-enum-index';\n idxBadge.textContent = String(idx);\n\n const labelText = document.createElement('span');\n labelText.className = 'rp-enum-label-text';\n labelText.textContent = attr(this, 'label', 'State');\n\n const description = attr(this, 'description');\n if (description) {\n const desc = document.createElement('span');\n desc.className = 'rp-enum-description';\n desc.textContent = description;\n labelText.appendChild(desc);\n }\n\n labelEl.append(idxBadge, labelText);\n\n const content = document.createElement('div');\n content.className = 'rp-enum-content';\n children.forEach(n => content.appendChild(n));\n this.append(labelEl, content);\n }\n}\n\n\n","import { injectStyle } from '../core/style';\nimport { attr, escapeHtml, isViewportNode, resolveHeight, resolveWidth, usesAutoHeight } from '../core/dom';\n\nexport class RpMainView extends HTMLElement {\n private ro?: ResizeObserver;\n private frame = 0;\n\n connectedCallback() {\n injectStyle();\n if (!this.dataset.rpReady) {\n this.dataset.rpReady = 'true';\n const width = resolveWidth(this, 1440);\n const height = resolveHeight(this, 900);\n const autoHeight = usesAutoHeight(this);\n const scale = Number(attr(this, 'scale', '0.7')) || 0.7;\n const children = Array.from(this.childNodes);\n const shell = document.createElement('div');\n shell.className = 'rp-main-shell';\n shell.style.width = `${width * scale}px`;\n if (!autoHeight) shell.style.height = `${height * scale}px`;\n const stage = document.createElement('div');\n stage.className = 'rp-main-stage';\n stage.style.width = `${width}px`;\n stage.style.minHeight = autoHeight ? '0' : `${height}px`;\n stage.style.height = autoHeight ? 'auto' : `${height}px`;\n stage.style.transform = `scale(${scale})`;\n const clip = document.createElement('div');\n clip.className = 'rp-main-stage-clip';\n children.forEach(n => {\n if (isViewportNode(n)) {\n if (!n.hasAttribute('width') && !n.hasAttribute('device')) n.style.setProperty('--snap-width', `${width}px`);\n if (!n.hasAttribute('height')) n.style.setProperty('--snap-height', autoHeight ? 'auto' : `${height}px`);\n }\n stage.appendChild(n);\n });\n clip.appendChild(stage);\n shell.appendChild(clip);\n this.appendChild(shell);\n }\n this.scheduleRender();\n this.ro = new ResizeObserver(() => this.scheduleRender());\n this.ro.observe(this);\n const stage = this.querySelector<HTMLElement>('.rp-main-stage');\n if (stage) this.ro.observe(stage);\n }\n\n disconnectedCallback() { this.ro?.disconnect(); if (this.frame) cancelAnimationFrame(this.frame); }\n\n scheduleRender() {\n if (this.frame) return;\n this.frame = requestAnimationFrame(() => { this.frame = 0; this.syncAutoHeight(); this.renderPins(); });\n }\n\n syncAutoHeight() {\n if (!usesAutoHeight(this)) return;\n const shell = this.querySelector<HTMLElement>('.rp-main-shell');\n const stage = this.querySelector<HTMLElement>('.rp-main-stage');\n if (!shell || !stage) return;\n const scale = Number(attr(this, 'scale', '0.7')) || 0.7;\n const next = `${Math.ceil(stage.scrollHeight * scale)}px`;\n if (shell.style.height !== next) shell.style.height = next;\n }\n\n renderPins() {\n const shell = this.querySelector<HTMLElement>('.rp-main-shell');\n const stage = this.querySelector<HTMLElement>('.rp-main-stage');\n if (!shell || !stage) return;\n shell.querySelectorAll('.rp-pin').forEach(p => p.remove());\n const shellRect = shell.getBoundingClientRect();\n stage.querySelectorAll<HTMLElement>('[data-pin]').forEach(target => {\n const id = target.dataset.pin;\n if (!id) return;\n const r = target.getBoundingClientRect();\n const pin = document.createElement('span');\n pin.className = 'rp-pin';\n pin.style.left = `${r.left - shellRect.left}px`;\n pin.style.top = `${r.top - shellRect.top}px`;\n pin.innerHTML = `<span>${escapeHtml(id)}</span>`;\n pin.addEventListener('click', () => {\n const url = new URL(location.href);\n url.searchParams.set('section', id);\n history.pushState(null, '', url);\n window.dispatchEvent(new CustomEvent('rp-section', { detail: id }));\n });\n shell.appendChild(pin);\n });\n }\n}\n\n","import { injectStyle } from '../core/style';\nimport { attr, escapeHtml, isTopAnnotation } from '../core/dom';\n\nfunction activateSection(path: string, pane: Element | null) {\n document.querySelectorAll('.rp-section-focus').forEach(el => el.classList.remove('rp-section-focus'));\n const target = document.querySelector(`[data-rp-section=\"${CSS.escape(path)}\"]`);\n if (!target) return;\n target.classList.add('rp-section-focus');\n if (pane) {\n const paneEl = pane as HTMLElement;\n const targetRect = (target as HTMLElement).getBoundingClientRect();\n const paneRect = paneEl.getBoundingClientRect();\n paneEl.scrollTo({ top: paneEl.scrollTop + targetRect.top - paneRect.top - 20, behavior: 'smooth' });\n }\n setTimeout(() => target.classList.remove('rp-section-focus'), 3000);\n}\n\nexport class RpPage extends HTMLElement {\n connectedCallback() {\n injectStyle();\n if (this.dataset.rpReady) return;\n this.dataset.rpReady = 'true';\n const pageTitle = attr(this,'title','Untitled');\n const route = attr(this,'route','/');\n const description = attr(this,'description','');\n this.removeAttribute('title');\n const existing = Array.from(this.childNodes);\n\n const header = document.createElement('div');\n header.className = 'rp-page-header';\n header.innerHTML = `<div class=\"rp-page-title-row\"><h1 class=\"rp-page-title\">${escapeHtml(pageTitle)}</h1><span class=\"rp-page-route\">${escapeHtml(route)}</span></div><p class=\"rp-page-description\">${escapeHtml(description)}</p>`;\n\n const body = document.createElement('div');\n body.className = 'rp-page-body';\n const main = document.createElement('main');\n main.className = 'rp-page-main';\n const pane = document.createElement('aside');\n pane.className = 'rp-annotation-pane';\n pane.setAttribute('aria-label', 'Annotations');\n const paneInner = document.createElement('div');\n paneInner.className = 'rp-annotation-pane-inner';\n\n existing.forEach(n => (isTopAnnotation(n) ? paneInner : body).appendChild(n));\n pane.appendChild(paneInner);\n main.append(header, body);\n\n const shell = document.createElement('div');\n shell.className = 'rp-page-shell';\n shell.append(main, pane);\n this.appendChild(shell);\n\n // Bind header max-width to main view rendered width so description never drives page width\n requestAnimationFrame(() => {\n const mv = body.querySelector<HTMLElement>('rp-main-view, proto-main-view');\n if (mv) header.style.maxWidth = `${mv.offsetWidth}px`;\n });\n\n // Section routing: handle URL and clicks\n const go = () => {\n const sec = new URLSearchParams(location.search).get('section');\n if (sec) activateSection(sec, pane);\n };\n window.addEventListener('popstate', go);\n window.addEventListener('rp-section', (e) => activateSection((e as CustomEvent).detail, pane));\n requestAnimationFrame(go);\n }\n}\n\n\n","import { injectStyle } from '../core/style';\nimport { attr, hasExplicitNumericHeight, resolveHeight, resolveWidth, usesAutoHeight } from '../core/dom';\n\nexport class GenericElement extends HTMLElement { connectedCallback() { injectStyle(); } }\nexport class ViewportElement extends HTMLElement {\n connectedCallback() {\n injectStyle();\n if (this.hasAttribute('width') || this.hasAttribute('device')) this.style.setProperty('--snap-width', `${resolveWidth(this,1440)}px`);\n if (hasExplicitNumericHeight(this)) this.style.setProperty('--snap-height', `${resolveHeight(this,900)}px`);\n else if (usesAutoHeight(this)) this.style.setProperty('--snap-height', 'auto');\n }\n}\nexport class LayoutElement extends HTMLElement { connectedCallback() { injectStyle(); this.style.setProperty('--snap-columns', attr(this,'columns','1fr')); this.style.setProperty('--snap-rows', attr(this,'rows','auto')); if (this.hasAttribute('gap')) this.style.setProperty('--snap-gap', `${attr(this,'gap','0')}px`); } }\nexport class PanelElement extends HTMLElement { connectedCallback() { injectStyle(); this.style.setProperty('--snap-padding', `${attr(this,'padding','16')}px`); } }\nexport class NavbarElement extends HTMLElement { connectedCallback() { injectStyle(); this.style.setProperty('--snap-height', `${attr(this,'height','64')}px`); } }\nexport class SidebarElement extends HTMLElement { connectedCallback() { injectStyle(); this.style.setProperty('--snap-width', `${attr(this,'width','260')}px`); } }\nexport class LogoElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.hasAttribute('size')) this.style.setProperty('--snap-size', `${attr(this,'size','82')}px`); if (!this.innerHTML.trim()) this.textContent = attr(this,'label','LOGO'); } }\nexport class SplitPaneElement extends HTMLElement { connectedCallback() { injectStyle(); this.style.setProperty('--snap-columns', attr(this,'columns','1fr 1fr')); } }\nexport class DividerElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.hasAttribute('vertical')) this.classList.add('rp-divider-v'); } }\nexport class SpacerElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.hasAttribute('size')) this.style.setProperty('--snap-size', `${attr(this,'size','16')}px`); } }\n\n","export type IconName = 'search' | 'bell' | 'user' | 'inbox' | 'archive' | 'at-sign' | 'check' | 'trash-2' | 'x' | 'loader' | 'image' | 'circle-alert' | 'chevron-down' | 'layout-dashboard' | 'message-square' | 'settings' | 'plus' | 'file' | 'users' | 'shield' | 'calendar' | 'upload' | 'empty' | 'chevron-left' | 'chevron-right' | 'minus' | 'alert-triangle' | 'info' | 'circle-check' | 'circle' | 'chevron-up' | 'star' | 'copy' | 'lock' | 'circle-x' | 'more-horizontal' | 'more-vertical' | 'grip' | 'folder' | 'file-code' | 'git-branch' | 'clock' | 'key' | 'zap' | 'home' | 'heart' | 'bookmark' | 'download' | 'edit' | 'eye' | 'filter' | 'refresh' | 'sparkles' | 'bot' | 'wrench' | 'terminal' | 'thumbs-up' | 'thumbs-down' | 'send' | 'stop' | 'paperclip' | 'globe';\n\nconst iconPaths: Record<IconName, string> = {\n search: '<circle cx=\"11\" cy=\"11\" r=\"8\"/><path d=\"m21 21-4.3-4.3\"/>',\n bell: '<path d=\"M10.3 21a1.9 1.9 0 0 0 3.4 0\"/><path d=\"M18 8a6 6 0 0 0-12 0c0 7-3 7-3 9h18c0-2-3-2-3-9\"/>',\n user: '<path d=\"M20 21a8 8 0 0 0-16 0\"/><circle cx=\"12\" cy=\"7\" r=\"4\"/>',\n inbox: '<polyline points=\"22 12 16 12 14 15 10 15 8 12 2 12\"/><path d=\"M5.5 5h13L22 12v7a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2v-7z\"/>',\n archive: '<rect width=\"20\" height=\"5\" x=\"2\" y=\"3\" rx=\"1\"/><path d=\"M4 8v11a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8\"/><path d=\"M10 12h4\"/>',\n 'at-sign': '<circle cx=\"12\" cy=\"12\" r=\"4\"/><path d=\"M16 8v5a3 3 0 0 0 6 0v-1a10 10 0 1 0-4 8\"/>',\n check: '<path d=\"M20 6 9 17l-5-5\"/>',\n 'trash-2': '<path d=\"M3 6h18\"/><path d=\"M8 6V4h8v2\"/><path d=\"M19 6l-1 14H6L5 6\"/><path d=\"M10 11v6\"/><path d=\"M14 11v6\"/>',\n x: '<path d=\"M18 6 6 18\"/><path d=\"m6 6 12 12\"/>',\n loader: '<path d=\"M21 12a9 9 0 1 1-6.2-8.6\"/>',\n image: '<rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\"/><circle cx=\"9\" cy=\"9\" r=\"2\"/><path d=\"m21 15-3.1-3.1a2 2 0 0 0-2.8 0L6 21\"/>',\n 'circle-alert': '<circle cx=\"12\" cy=\"12\" r=\"10\"/><path d=\"M12 8v4\"/><path d=\"M12 16h.01\"/>',\n 'chevron-down': '<path d=\"m6 9 6 6 6-6\"/>',\n 'layout-dashboard': '<rect width=\"7\" height=\"9\" x=\"3\" y=\"3\" rx=\"1\"/><rect width=\"7\" height=\"5\" x=\"14\" y=\"3\" rx=\"1\"/><rect width=\"7\" height=\"9\" x=\"14\" y=\"12\" rx=\"1\"/><rect width=\"7\" height=\"5\" x=\"3\" y=\"16\" rx=\"1\"/>',\n 'message-square': '<path d=\"M21 15a4 4 0 0 1-4 4H7l-4 4V7a4 4 0 0 1 4-4h10a4 4 0 0 1 4 4z\"/>',\n settings: '<path d=\"M12.2 2h-.4l-1 3a7 7 0 0 0-1.6.7l-3-1.4-.3.3-2 3 .2.4 2.6 2a7 7 0 0 0 0 2l-2.6 2-.2.4 2 3 .3.3 3-1.4a7 7 0 0 0 1.6.7l1 3h.4l1-3a7 7 0 0 0 1.6-.7l3 1.4.3-.3 2-3-.2-.4-2.6-2a7 7 0 0 0 0-2l2.6-2 .2-.4-2-3-.3-.3-3 1.4a7 7 0 0 0-1.6-.7z\"/><circle cx=\"12\" cy=\"12\" r=\"3\"/>',\n plus: '<path d=\"M5 12h14\"/><path d=\"M12 5v14\"/>',\n file: '<path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\"/><path d=\"M14 2v6h6\"/>',\n users: '<path d=\"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2\"/><circle cx=\"9\" cy=\"7\" r=\"4\"/><path d=\"M22 21v-2a4 4 0 0 0-3-3.9\"/><path d=\"M16 3.1a4 4 0 0 1 0 7.8\"/>',\n shield: '<path d=\"M20 13c0 5-3.5 7.5-8 9-4.5-1.5-8-4-8-9V5l8-3 8 3z\"/>',\n calendar: '<path d=\"M8 2v4\"/><path d=\"M16 2v4\"/><rect width=\"18\" height=\"18\" x=\"3\" y=\"4\" rx=\"2\"/><path d=\"M3 10h18\"/>',\n upload: '<path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\"/><path d=\"m17 8-5-5-5 5\"/><path d=\"M12 3v12\"/>',\n empty: '<path d=\"M4 7h16\"/><path d=\"M5 7l1.5 13h11L19 7\"/><path d=\"M9 11h6\"/>',\n 'chevron-left': '<path d=\"m15 18-6-6 6-6\"/>',\n 'chevron-right': '<path d=\"m9 18 6-6-6-6\"/>',\n minus: '<path d=\"M5 12h14\"/>',\n 'alert-triangle': '<path d=\"m21.7 18-8-14a2 2 0 0 0-3.4 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.7-3Z\"/><path d=\"M12 9v4\"/><path d=\"M12 17h.01\"/>',\n info: '<circle cx=\"12\" cy=\"12\" r=\"10\"/><path d=\"M12 16v-4\"/><path d=\"M12 8h.01\"/>',\n 'circle-check': '<circle cx=\"12\" cy=\"12\" r=\"10\"/><path d=\"m9 12 2 2 4-4\"/>',\n circle: '<circle cx=\"12\" cy=\"12\" r=\"10\"/>',\n 'chevron-up': '<path d=\"m18 15-6-6-6 6\"/>',\n star: '<path d=\"M12 2l3 6.3 6.9 1-5 4.9 1.2 6.8-6.1-3.2-6.1 3.2 1.2-6.8-5-4.9 6.9-1z\"/>',\n copy: '<rect width=\"13\" height=\"13\" x=\"9\" y=\"9\" rx=\"2\"/><path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\"/>',\n lock: '<rect width=\"18\" height=\"11\" x=\"3\" y=\"11\" rx=\"2\"/><path d=\"M7 11V7a5 5 0 0 1 10 0v4\"/>',\n 'circle-x': '<circle cx=\"12\" cy=\"12\" r=\"10\"/><path d=\"m15 9-6 6\"/><path d=\"m9 9 6 6\"/>',\n 'more-horizontal': '<circle cx=\"12\" cy=\"12\" r=\"1\"/><circle cx=\"19\" cy=\"12\" r=\"1\"/><circle cx=\"5\" cy=\"12\" r=\"1\"/>',\n 'more-vertical': '<circle cx=\"12\" cy=\"12\" r=\"1\"/><circle cx=\"12\" cy=\"5\" r=\"1\"/><circle cx=\"12\" cy=\"19\" r=\"1\"/>',\n grip: '<circle cx=\"9\" cy=\"6\" r=\"1\"/><circle cx=\"9\" cy=\"12\" r=\"1\"/><circle cx=\"9\" cy=\"18\" r=\"1\"/><circle cx=\"15\" cy=\"6\" r=\"1\"/><circle cx=\"15\" cy=\"12\" r=\"1\"/><circle cx=\"15\" cy=\"18\" r=\"1\"/>',\n folder: '<path d=\"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2z\"/>',\n 'file-code': '<path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\"/><path d=\"M14 2v6h6\"/><path d=\"m9 13-2 2 2 2\"/><path d=\"m15 13 2 2-2 2\"/>',\n 'git-branch': '<line x1=\"6\" x2=\"6\" y1=\"3\" y2=\"15\"/><circle cx=\"18\" cy=\"6\" r=\"3\"/><circle cx=\"6\" cy=\"18\" r=\"3\"/><path d=\"M18 9a9 9 0 0 1-9 9\"/>',\n clock: '<circle cx=\"12\" cy=\"12\" r=\"10\"/><polyline points=\"12 6 12 12 16 14\"/>',\n key: '<circle cx=\"7.5\" cy=\"15.5\" r=\"5.5\"/><path d=\"m21 2-9.6 9.6\"/><path d=\"m15.5 7.5 3 3L22 7l-3-3\"/>',\n zap: '<path d=\"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z\"/>',\n home: '<path d=\"m3 9 9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z\"/><polyline points=\"9 22 9 12 15 12 15 22\"/>',\n heart: '<path d=\"M19 14c1.49-1.46 3-3.21 3-5.5A5.5 5.5 0 0 0 16.5 3c-1.76 0-3 .5-4.5 2-1.5-1.5-2.74-2-4.5-2A5.5 5.5 0 0 0 2 8.5c0 2.3 1.5 4.05 3 5.5l7 7Z\"/>',\n bookmark: '<path d=\"m19 21-7-4-7 4V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z\"/>',\n download: '<path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\"/><polyline points=\"7 10 12 15 17 10\"/><line x1=\"12\" x2=\"12\" y1=\"15\" y2=\"3\"/>',\n edit: '<path d=\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\"/><path d=\"M18.5 2.5a2.1 2.1 0 0 1 3 3L12 15l-4 1 1-4Z\"/>',\n eye: '<path d=\"M2 12s3-7 10-7 10 7 10 7-3 7-10 7-10-7-10-7Z\"/><circle cx=\"12\" cy=\"12\" r=\"3\"/>',\n filter: '<polygon points=\"22 3 2 3 10 12.46 10 19 14 21 14 12.46 22 3\"/>',\n refresh: '<path d=\"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8\"/><path d=\"M21 3v5h-5\"/><path d=\"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16\"/><path d=\"M3 21v-5h5\"/>',\n sparkles: '<path d=\"M9.9 2.5 12 8l5.5 2.1L12 12l-2.1 5.5L7.8 12 2.3 9.9 7.8 8z\"/><path d=\"M18 5l.9 2.1L21 8l-2.1.9L18 11l-.9-2.1L15 8l2.1-.9z\"/>',\n bot: '<rect width=\"16\" height=\"11\" x=\"4\" y=\"9\" rx=\"2\"/><path d=\"M12 5v4\"/><circle cx=\"12\" cy=\"4\" r=\"1\"/><path d=\"M9 13v1.5\"/><path d=\"M15 13v1.5\"/>',\n wrench: '<path d=\"M14.7 6.3a4 4 0 0 0-5.4 5.4L3 18l3 3 6.3-6.3a4 4 0 0 0 5.4-5.4l-2.6 2.6-2.4-.6-.6-2.4z\"/>',\n terminal: '<polyline points=\"4 17 10 11 4 5\"/><line x1=\"12\" x2=\"20\" y1=\"19\" y2=\"19\"/>',\n 'thumbs-up': '<path d=\"M7 10v11\"/><path d=\"M15 5.9 14 10h5.5a2 2 0 0 1 2 2.4l-1.4 7A2 2 0 0 1 18 21H7V10l4-8a2 2 0 0 1 3 1.7z\"/>',\n 'thumbs-down': '<path d=\"M17 14V3\"/><path d=\"M9 18.1 10 14H4.5a2 2 0 0 1-2-2.4l1.4-7A2 2 0 0 1 6 3h11v11l-4 8a2 2 0 0 1-3-1.7z\"/>',\n send: '<path d=\"M14.5 9.5 21 3l-6.5 18-2.5-7-7-2.5z\"/>',\n stop: '<rect width=\"14\" height=\"14\" x=\"5\" y=\"5\" rx=\"2\"/>',\n paperclip: '<path d=\"m21 8-9.5 9.5a4 4 0 0 1-5.7-5.7L13 4.6a2.7 2.7 0 0 1 3.8 3.8L9.5 15.7a1.3 1.3 0 0 1-1.9-1.9l7.4-7.4\"/>',\n globe: '<circle cx=\"12\" cy=\"12\" r=\"10\"/><path d=\"M2 12h20\"/><path d=\"M12 2a15 15 0 0 1 0 20 15 15 0 0 1 0-20z\"/>'\n};\n\nexport function icon(name?: string, size = 16): string {\n const key = (name || 'file') as IconName;\n const paths = iconPaths[key] || iconPaths.file;\n return `<svg class=\"rp-icon\" width=\"${size}\" height=\"${size}\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">${paths}</svg>`;\n}\n\n\n","import { injectStyle } from '../core/style';\nimport { attr, csv, escapeHtml, intAttr } from '../core/dom';\nimport { icon } from '../core/icons';\n\nexport class FieldElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const value = attr(this,'value'); const placeholder = attr(this,'placeholder','Search'); const label = attr(this,'label'); const error = attr(this,'error-message'); const showValue = value || attr(this,'state') === 'filled'; const content = `${this.fieldIcon()}<span class=\"${showValue ? 'rp-value' : 'rp-placeholder'}\">${escapeHtml(value || placeholder)}</span>${this.hasAttribute('has-clear-button') ? icon('x',14) : ''}`; this.innerHTML = label || error ? `<span class=\"rp-field-label\">${escapeHtml(label)}</span><span class=\"rp-field-control\">${content}</span>${error ? `<span class=\"rp-error-text\">${escapeHtml(error)}</span>` : ''}` : content; } fieldIcon() { return icon(this.tagName.toLowerCase().includes('date-picker') ? 'calendar' : 'search'); } }\nexport class TextareaElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady = 'true'; this.style.setProperty('--snap-rows', attr(this,'rows','3')); const value = attr(this,'value') || attr(this,'placeholder','Textarea'); this.innerHTML = `<span class=\"${attr(this,'value') ? 'rp-value' : 'rp-placeholder'}\">${escapeHtml(value)}</span>`; } }\nexport class SelectElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady = 'true'; const options = csv(this, 'options', '选项 A,选项 B,选项 C'); const value = attr(this, 'value', options[0] || 'Select'); const label = attr(this, 'label'); this.innerHTML = `${label ? `<span class=\"rp-field-label\">${escapeHtml(label)}</span>` : ''}<span class=\"rp-select-control\"><span class=\"rp-select-value\">${escapeHtml(value)}</span>${icon('chevron-down')}</span><span class=\"rp-select-options\">${options.map(o => `<span class=\"rp-select-option${o === value ? ' selected' : ''}\">${escapeHtml(o)}</span>`).join('')}</span>`; } }\nexport class ButtonElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const label = attr(this,'label', this.textContent?.trim() || 'Button'); const ic = attr(this,'icon'); const loading = attr(this,'state') === 'loading'; this.innerHTML = `${loading ? icon('loader') : ic ? icon(ic) : ''}<span>${escapeHtml(label)}</span>`; } }\nexport class CheckboxElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const state = attr(this,'state'); const mark = state === 'checked' ? icon('check',12) : state === 'indeterminate' ? icon('minus',12) : ''; this.innerHTML = `<span class=\"rp-box\">${mark}</span><span>${escapeHtml(attr(this,'label',''))}</span>`; } }\nexport class RadioElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const checked = attr(this,'state') === 'checked'; this.innerHTML = `<span class=\"rp-box\">${checked ? icon('circle',8) : ''}</span><span>${escapeHtml(attr(this,'label',''))}</span>`; } }\nexport class ToggleElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; this.innerHTML = `<span class=\"rp-toggle-track\"><span class=\"rp-toggle-dot\"></span></span><span>${escapeHtml(attr(this,'label',''))}</span>`; } }\nexport class FormElement extends HTMLElement { connectedCallback() { injectStyle(); } }\nexport class FormItemElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady = 'true'; const children = Array.from(this.childNodes); const label = attr(this,'label'); const error = attr(this,'error'); this.innerHTML = `${label ? `<span class=\"rp-form-label${this.hasAttribute('required') ? ' required' : ''}\">${escapeHtml(label)}</span>` : ''}`; children.forEach(n => this.appendChild(n)); if (error) this.insertAdjacentHTML('beforeend', `<span class=\"rp-form-error\">${escapeHtml(error)}</span>`); } }\nexport class DatePickerElement extends FieldElement { fieldIcon() { return icon('calendar'); } }\nexport class UploadElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady = 'true'; const state = attr(this,'state','empty'); if (state === 'has-file') this.innerHTML = `${icon('file')}<span>${escapeHtml(attr(this,'file','document.pdf'))}</span>`; else if (state === 'uploading') this.innerHTML = `${icon('loader')}<span>上传中...</span><span class=\"rp-progress-bar\" style=\"width:${escapeHtml(attr(this,'progress','60'))}%\"></span>`; else this.innerHTML = `${icon('upload',24)}<span>${escapeHtml(attr(this,'label','点击或拖拽文件上传'))}</span>`; } }\nexport class ImagePlaceholderElement extends HTMLElement { connectedCallback() { injectStyle(); this.style.setProperty('--snap-width', `${attr(this,'width','160')}px`); this.style.setProperty('--snap-height', `${attr(this,'height','100')}px`); if (!this.innerHTML.trim()) this.innerHTML = `${icon('image')} ${escapeHtml(attr(this,'label','Image'))}`; } }\nexport class ProgressElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const value = attr(this,'value','40'); this.style.setProperty('--progress', `${value}%`); const kind = attr(this,'kind', attr(this,'style')); this.innerHTML = kind === 'circle' ? `${escapeHtml(value)}%` : '<span class=\"rp-progress-bar\"></span>'; } }\n\nexport class SliderElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const min = intAttr(this,'min',0); const max = intAttr(this,'max',100); const value = intAttr(this,'value',40); const pct = max > min ? Math.max(0, Math.min(100, ((value - min) / (max - min)) * 100)) : 0; const label = attr(this,'label'); this.innerHTML = `${label ? `<span class=\"rp-field-label\">${escapeHtml(label)}</span>` : ''}<span class=\"rp-slider-track\"><span class=\"rp-slider-fill\" style=\"width:${pct}%\"></span><span class=\"rp-slider-thumb\" style=\"left:${pct}%\"></span></span>${this.hasAttribute('show-value') ? `<span class=\"rp-slider-value\">${value}</span>` : ''}`; } }\nexport class RangeElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const min = intAttr(this,'min',0); const max = intAttr(this,'max',100); const low = intAttr(this,'low',25); const high = intAttr(this,'high',75); const span = max - min || 1; const l = ((low - min) / span) * 100; const h = ((high - min) / span) * 100; this.innerHTML = `<span class=\"rp-slider-track\"><span class=\"rp-slider-fill\" style=\"left:${l}%;width:${h - l}%\"></span><span class=\"rp-slider-thumb\" style=\"left:${l}%\"></span><span class=\"rp-slider-thumb\" style=\"left:${h}%\"></span></span>`; } }\nexport class NumberInputElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const value = attr(this,'value','0'); this.innerHTML = `<span class=\"rp-num-value\">${escapeHtml(value)}</span><span class=\"rp-num-steppers\"><span class=\"rp-num-step\">${icon('chevron-up',12)}</span><span class=\"rp-num-step\">${icon('chevron-down',12)}</span></span>`; } }\nexport class RatingElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const max = intAttr(this,'max',5); const value = intAttr(this,'value',3); this.innerHTML = Array.from({length:max},(_,i)=>`<span class=\"rp-star${i < value ? ' filled' : ''}\">${icon('star',16)}</span>`).join(''); } }\nexport class PinInputElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const len = intAttr(this,'length',4); const value = attr(this,'value',''); const chars = value.split(''); this.innerHTML = Array.from({length:len},(_,i)=>`<span class=\"rp-pin-cell${i === chars.length ? ' active' : ''}\">${escapeHtml(chars[i] || '')}</span>`).join(''); } }\nexport class ColorSwatchElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const value = attr(this,'value','#2563eb'); this.innerHTML = `<span class=\"rp-swatch-chip\" style=\"background:${escapeHtml(value)}\"></span><span class=\"rp-swatch-hex\">${escapeHtml(attr(this,'label', value))}</span>`; } }\nexport class AutocompleteElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const value = attr(this,'value'); const options = csv(this,'options','选项一,选项二,选项三'); this.innerHTML = `<span class=\"rp-field-control\">${icon('search')}<span class=\"${value ? 'rp-value' : 'rp-placeholder'}\">${escapeHtml(value || attr(this,'placeholder','输入以搜索'))}</span></span>${this.hasAttribute('open') ? `<span class=\"rp-ac-options\">${options.map(o=>`<span class=\"rp-ac-option\">${escapeHtml(o)}</span>`).join('')}</span>` : ''}`; } }\n\n","import { injectStyle } from '../core/style';\nimport { attr, csv, intAttr, escapeHtml } from '../core/dom';\nimport { icon } from '../core/icons';\n\nexport class BadgeElement extends HTMLElement { connectedCallback() { injectStyle(); const count = attr(this,'count','0'); const max = intAttr(this,'max',99); const n = Number(count); this.textContent = Number.isFinite(n) && n > max ? `${max}+` : count; } }\nexport class AvatarElement extends HTMLElement { connectedCallback() { injectStyle(); const size = attr(this,'size','32'); this.style.setProperty('--snap-size', `${size}px`); if (!this.textContent?.trim()) this.textContent = attr(this,'initials','U'); } }\nexport class ListElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady || this.children.length) return; this.dataset.rpReady='true'; const items = intAttr(this,'items',3); const state = attr(this,'state'); this.innerHTML = Array.from({length: items}, (_,i)=>`<snap-list-item label=\"${['全部','未读','@ 我','已归档','设置'][i] || `Item ${i+1}`}\" icon=\"${['inbox','message-square','at-sign','archive','settings'][i] || 'file'}\"${state === 'first-selected' && i === 0 ? ' state=\"selected\"' : ''}></snap-list-item>`).join(''); } }\nexport class ListItemElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const label = attr(this,'label', this.textContent?.trim() || 'Item'); const badge = attr(this,'badge'); const ic = attr(this,'icon'); this.innerHTML = `${ic ? icon(ic) : ''}<span class=\"rp-list-label\">${escapeHtml(label)}</span>${badge ? `<span class=\"rp-list-badge\">${escapeHtml(badge)}</span>` : ''}`; } }\nexport class TabsElement extends HTMLElement { connectedCallback() { injectStyle(); const active = attr(this,'active','0'); const numeric = Number(active); const children = Array.from(this.children) as HTMLElement[]; children.forEach((child, i) => { const label = child.getAttribute('label') || child.textContent?.trim() || ''; const isActive = Number.isFinite(numeric) ? i === numeric : label === active; child.classList.toggle('rp-tab-active', isActive); }); } }\nexport class TabElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const label = attr(this,'label', this.textContent?.trim() || 'Tab'); const badge = attr(this,'badge'); this.innerHTML = `<span>${escapeHtml(label)}</span>${badge ? `<span class=\"rp-list-badge\">${escapeHtml(badge)}</span>` : ''}`; } }\nexport class PaginationElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady = 'true'; const total = intAttr(this,'total',10); const current = intAttr(this,'current',1); const pageSize = intAttr(this,'page-size',10); const pages = Math.max(1, Math.ceil(total / pageSize)); const visible = Array.from({length: Math.min(pages,5)}, (_,i)=>i+1); this.innerHTML = `<span class=\"rp-page-btn\">${icon('chevron-left',14)}</span>${visible.map(p=>`<span class=\"rp-page-btn${p===current?' active':''}\">${p}</span>`).join('')}<span class=\"rp-page-btn\">${icon('chevron-right',14)}</span><span>共 ${total} 条</span>`; } }\nexport class StepsElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady = 'true'; const steps = csv(this,'steps','步骤一,步骤二,步骤三'); const active = intAttr(this,'active',0); this.innerHTML = steps.map((s,i)=>`<span class=\"rp-step ${i < active ? 'done' : i === active ? 'active' : ''}\"><span class=\"rp-step-dot\">${i < active ? icon('check',12) : i + 1}</span>${escapeHtml(s)}</span>${i < steps.length - 1 ? '<span class=\"rp-step-sep\"></span>' : ''}`).join(''); } }\nexport class BreadcrumbElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady = 'true'; const items = csv(this,'items','首页,当前页'); this.innerHTML = items.map((item,i)=>`<span class=\"${i===items.length-1?'rp-breadcrumb-current':''}\">${escapeHtml(item)}</span>${i < items.length - 1 ? '<span>/</span>' : ''}`).join(''); } }\n\nexport class SegmentedElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const options = csv(this,'options','日,周,月'); const active = attr(this,'active','0'); const idx = Number(active); this.innerHTML = options.map((o,i)=>`<span class=\"rp-seg-item${(Number.isFinite(idx) ? i===idx : o===active) ? ' active' : ''}\">${escapeHtml(o)}</span>`).join(''); } }\nexport class CommandPaletteElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const query = attr(this,'query'); const results = csv(this,'results','新建文件,打开设置,搜索工单,切换主题'); this.innerHTML = `<div class=\"rp-cmdk-input\">${icon('search')}<span class=\"${query ? 'rp-value' : 'rp-placeholder'}\">${escapeHtml(query || '输入命令…')}</span></div><div class=\"rp-cmdk-list\">${results.map((r,i)=>`<div class=\"rp-cmdk-item${i===0?' active':''}\">${icon('zap',14)}<span>${escapeHtml(r)}</span></div>`).join('')}</div>`; } }\nexport class ContextMenuElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady || this.children.length) return; this.dataset.rpReady='true'; const items = csv(this,'items','复制,重命名,移动到,删除'); this.innerHTML = items.map(it=>`<div class=\"rp-menu-item${it==='删除'?' danger':''}\"><span>${escapeHtml(it)}</span></div>`).join(''); } }\nexport class MenuElement extends HTMLElement { connectedCallback() { injectStyle(); } }\nexport class MenuItemElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const label = attr(this,'label', this.textContent?.trim() || '菜单项'); const ic = attr(this,'icon'); const shortcut = attr(this,'shortcut'); const disabled = attr(this,'state')==='disabled'; this.innerHTML = `${ic ? icon(ic,14) : ''}<span class=\"rp-menu-label\">${escapeHtml(label)}</span>${shortcut ? `<span class=\"rp-menu-shortcut\">${escapeHtml(shortcut)}</span>` : ''}`; if (disabled) this.classList.add('disabled'); } }\nexport class TocElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady || this.children.length) return; this.dataset.rpReady='true'; const items = csv(this,'items','概述,安装,用法,API,常见问题'); this.innerHTML = items.map((it,i)=>`<span class=\"rp-toc-item${i===0?' active':''}\">${escapeHtml(it)}</span>`).join(''); } }\nexport class KbdElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const keys = csv(this,'keys','⌘,K'); this.innerHTML = keys.map(k=>`<kbd class=\"rp-kbd-key\">${escapeHtml(k)}</kbd>`).join('<span class=\"rp-kbd-plus\">+</span>'); } }\n\n\n","import { injectStyle } from '../core/style';\nimport { attr, csv, escapeHtml, intAttr } from '../core/dom';\nimport { icon } from '../core/icons';\n\nexport function sampleCell(c:string, j:number, i:number) { const lower = c.toLowerCase(); if (c.includes('发件') || lower.includes('name')) return ['张三','李四','系统通知','运营助手','王五','安全团队'][i%6]; if (c.includes('预览') || lower.includes('preview')) return ['请确认新的项目评审时间','本周周报已发送','你的账号存在新的登录','活动报名已通过审核','附件已更新','安全策略变更提醒'][i%6]; if (c.includes('时间') || lower.includes('time')) return ['09:12','昨天','周二','5月30日','5月28日','5月20日'][i%6]; if (c.includes('状态') || lower.includes('status')) return i % 2 ? '未读' : '已读'; return `Data ${i+1}-${j+1}`; }\nexport class TableElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const cols = csv(this,'columns','Name,Preview,Time,Status'); const rows = intAttr(this,'rows',4); const hasCheckbox = this.hasAttribute('has-checkbox'); const hasAction = this.hasAttribute('has-action'); const finalCols = hasAction ? [...cols, '操作'] : cols; const headCells = `${hasCheckbox ? '<span class=\"rp-table-cell\">✓</span>' : ''}${finalCols.map(c=>`<span class=\"rp-table-cell\">${escapeHtml(c)}</span>`).join('')}`; const body = Array.from({length: rows}, (_,i) => `<div class=\"rp-table-row\">${hasCheckbox ? `<span class=\"rp-table-cell\"><span class=\"rp-box\">${i===1 ? icon('check',12) : ''}</span></span>` : ''}${finalCols.map((c,j)=>`<span class=\"rp-table-cell\">${c === '操作' ? '<snap-button label=\"查看\" variant=\"link\"></snap-button>' : escapeHtml(sampleCell(c,j,i))}</span>`).join('')}</div>`).join(''); this.innerHTML = `<div class=\"rp-table-row rp-table-head\">${headCells}</div>${body}`; } }\nexport class TableRowElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; this.innerHTML = `<span><span class=\"rp-box\">${attr(this,'state')==='selected'?icon('check',12):''}</span></span><span>张三</span><span>消息内容预览文本</span><span>09:12</span><span>${escapeHtml(attr(this,'state','default'))}</span>`; } }\nexport class BulkActionBarElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const count = attr(this,'count','1'); const actions = csv(this,'actions','确认,取消'); this.innerHTML = `${icon('check')}<span>已选 ${escapeHtml(count)} 项</span>${actions.map(a=>`<snap-button label=\"${escapeHtml(a)}\" variant=\"ghost\"></snap-button>`).join('')}`; } }\nexport class EmptyElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; this.innerHTML = `${icon('empty',28)}<span class=\"rp-empty-title\">${escapeHtml(attr(this,'label','暂无数据'))}</span><span class=\"rp-empty-desc\">${escapeHtml(attr(this,'description',''))}</span>${this.hasAttribute('has-action') ? '<snap-button label=\"新建\" variant=\"primary\" icon=\"plus\"></snap-button>' : ''}`; } }\nexport class LoadingElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const rows = intAttr(this,'rows',3); this.innerHTML = attr(this,'kind') === 'spinner' || attr(this,'style') === 'spinner' ? `<span class=\"rp-spinner\">${icon('loader',24)}</span>` : Array.from({length: rows}, (_,i)=>`<span class=\"rp-skeleton-line\" style=\"width:${220 - i*24}px\"></span>`).join(''); } }\nexport class AlertElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const type = attr(this,'type','info'); const title = attr(this,'title', type === 'error' ? '错误' : '提示'); const message = attr(this,'message',''); const ic = type === 'error' ? 'circle-alert' : type === 'warning' ? 'alert-triangle' : type === 'success' ? 'circle-check' : 'info'; this.innerHTML = `${icon(ic)}<span><strong>${escapeHtml(title)}</strong>${message ? `<br>${escapeHtml(message)}` : ''}</span>${this.hasAttribute('closable') ? icon('x',14) : ''}`; } }\nexport class OverlayElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady = 'true'; const children = Array.from(this.childNodes); const title = attr(this,'title'); if (!title) return; const head = document.createElement('div'); head.className = 'rp-overlay-title'; head.textContent = title; this.prepend(head); children.forEach(n => this.appendChild(n)); } }\nexport class TooltipElement extends HTMLElement { connectedCallback() { injectStyle(); if (!this.textContent?.trim()) this.textContent = attr(this,'text','提示内容'); } }\nexport class ModalElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady = 'true'; this.style.setProperty('--snap-width', `${attr(this,'width','480')}px`); const children = Array.from(this.childNodes); const body = document.createElement('div'); body.className = 'rp-modal-body'; children.forEach(n => body.appendChild(n)); this.innerHTML = `<div class=\"rp-modal-head\"><span>${escapeHtml(attr(this,'title','标题'))}</span>${icon('x',14)}</div>`; this.appendChild(body); if (this.hasAttribute('has-footer')) this.insertAdjacentHTML('beforeend', '<div class=\"rp-modal-footer\"><snap-button label=\"取消\"></snap-button><snap-button label=\"确认\" variant=\"primary\"></snap-button></div>'); } }\nexport class DrawerElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady = 'true'; this.style.setProperty('--snap-width', `${attr(this,'width','360')}px`); const children = Array.from(this.childNodes); const body = document.createElement('div'); body.className = 'rp-drawer-body'; children.forEach(n => body.appendChild(n)); this.innerHTML = `<div class=\"rp-drawer-head\"><span>${escapeHtml(attr(this,'title','抽屉'))}</span>${icon('x',14)}</div>`; this.appendChild(body); } }\nexport class CardElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady = 'true'; const children = Array.from(this.childNodes); const title = attr(this,'title'); const subtitle = attr(this,'subtitle'); this.innerHTML = `${this.hasAttribute('has-image') ? `<span class=\"rp-card-image\">${icon('image')} Image</span>` : ''}${title ? `<span class=\"rp-card-title\">${escapeHtml(title)}</span>` : ''}${subtitle ? `<span class=\"rp-card-subtitle\">${escapeHtml(subtitle)}</span>` : ''}`; children.forEach(n => this.appendChild(n)); if (this.hasAttribute('has-footer')) this.insertAdjacentHTML('beforeend', '<span class=\"rp-card-footer\"><snap-button label=\"查看\" variant=\"secondary\"></snap-button></span>'); } }\nexport class StatCardElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady = 'true'; this.innerHTML = `<span class=\"rp-stat-label\">${escapeHtml(attr(this,'label','指标'))}</span><span class=\"rp-stat-value\">${escapeHtml(attr(this,'value','128'))}</span><span class=\"rp-stat-change\">${escapeHtml(attr(this,'change','0%'))}</span>`; } }\nexport class TagElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady = 'true'; const label = attr(this,'label', this.textContent?.trim() || 'Tag'); this.innerHTML = `<span>${escapeHtml(label)}</span>${this.hasAttribute('closable') ? icon('x',12) : ''}`; } }\n\nexport class ChipElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const label = attr(this,'label', this.textContent?.trim() || 'Chip'); const ic = attr(this,'icon'); this.innerHTML = `${ic ? icon(ic,12) : ''}<span>${escapeHtml(label)}</span>${this.hasAttribute('closable') ? icon('x',11) : ''}`; } }\nexport class TreeElement extends HTMLElement { connectedCallback() { injectStyle(); } }\nexport class TreeItemElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const level = intAttr(this,'level',0); const label = attr(this,'label','Node'); const ic = attr(this,'icon'); const expandable = this.hasAttribute('expanded') || this.hasAttribute('collapsed'); const expanded = this.hasAttribute('expanded'); const caret = expandable ? icon(expanded ? 'chevron-down' : 'chevron-right',12) : '<span class=\"rp-tree-spacer\"></span>'; this.style.setProperty('--tree-level', String(level)); this.innerHTML = `<span class=\"rp-tree-row${attr(this,'state')==='selected' ? ' selected' : ''}\">${caret}${icon(ic || (expandable ? 'folder' : 'file'),14)}<span class=\"rp-tree-label\">${escapeHtml(label)}</span></span>`; } }\nexport class TimelineElement extends HTMLElement { connectedCallback() { injectStyle(); } }\nexport class TimelineItemElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const children = Array.from(this.childNodes); const label = attr(this,'label'); const time = attr(this,'time'); const state = attr(this,'state','default'); const dot = `<span class=\"rp-timeline-dot ${state}\"></span>`; const head = `<div class=\"rp-timeline-head\"><span class=\"rp-timeline-label\">${escapeHtml(label)}</span>${time ? `<span class=\"rp-timeline-time\">${escapeHtml(time)}</span>` : ''}</div>`; const body = document.createElement('div'); body.className = 'rp-timeline-content'; children.forEach(n=>body.appendChild(n)); this.innerHTML = `${dot}<div class=\"rp-timeline-main\">${head}</div>`; this.querySelector('.rp-timeline-main')!.appendChild(body); } }\nexport class CalendarElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const month = attr(this,'month','2026 年 6 月'); const selected = intAttr(this,'selected',15); const dows = ['一','二','三','四','五','六','日']; const cells = Array.from({length:35},(_,i)=>{ const day = i - 1; const valid = day >= 1 && day <= 30; return `<span class=\"rp-cal-cell${valid && day===selected ? ' selected' : ''}${valid ? '' : ' muted'}\">${valid ? day : ''}</span>`; }).join(''); this.innerHTML = `<div class=\"rp-cal-head\"><span>${escapeHtml(month)}</span></div><div class=\"rp-cal-grid\">${dows.map(d=>`<span class=\"rp-cal-dow\">${d}</span>`).join('')}${cells}</div>`; } }\nexport class KanbanElement extends HTMLElement { connectedCallback() { injectStyle(); } }\nexport class KanbanColumnElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const children = Array.from(this.childNodes); const title = attr(this,'title','列'); const count = attr(this,'count'); const head = document.createElement('div'); head.className = 'rp-kanban-head'; head.innerHTML = `<span>${escapeHtml(title)}</span>${count ? `<span class=\"rp-kanban-count\">${escapeHtml(count)}</span>` : ''}`; const body = document.createElement('div'); body.className = 'rp-kanban-body'; children.forEach(n=>body.appendChild(n)); this.append(head, body); } }\nexport class KanbanCardElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const label = attr(this,'label','卡片'); const tag = attr(this,'tag'); this.innerHTML = `<span class=\"rp-kanban-card-title\">${escapeHtml(label)}</span>${tag ? `<span class=\"rp-kanban-card-tag\">${escapeHtml(tag)}</span>` : ''}`; } }\nexport class CodeBlockElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const lines = intAttr(this,'lines',5); const lang = attr(this,'lang','ts'); const body = Array.from({length:lines},(_,i)=>`<span class=\"rp-code-line\"><span class=\"rp-code-ln\">${i+1}</span><span class=\"rp-code-bar\" style=\"width:${40 + ((i*37)%50)}%\"></span></span>`).join(''); this.innerHTML = `<div class=\"rp-code-head\">${escapeHtml(lang)}</div><div class=\"rp-code-body\">${body}</div>`; } }\nexport class DiffElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const rows = intAttr(this,'rows',4); const body = Array.from({length:rows},(_,i)=>{ const kind = i%3===0 ? 'add' : i%3===1 ? 'del' : 'ctx'; const sign = kind==='add'?'+':kind==='del'?'-':' '; return `<span class=\"rp-diff-line ${kind}\"><span class=\"rp-diff-sign\">${sign}</span><span class=\"rp-code-bar\" style=\"width:${45+((i*29)%45)}%\"></span></span>`; }).join(''); this.innerHTML = body; } }\nexport class ImageGridElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const count = intAttr(this,'count',6); const cols = intAttr(this,'columns',3); this.style.setProperty('--grid-cols', String(cols)); this.innerHTML = Array.from({length:count},()=>`<span class=\"rp-grid-cell\">${icon('image',20)}</span>`).join(''); } }\nexport class KeyValueElement extends HTMLElement { connectedCallback() { injectStyle(); } }\nexport class KvRowElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; this.innerHTML = `<span class=\"rp-kv-key\">${escapeHtml(attr(this,'label','键'))}</span><span class=\"rp-kv-val\">${escapeHtml(attr(this,'value','值'))}</span>`; } }\nexport class AccordionElement extends HTMLElement { connectedCallback() { injectStyle(); } }\nexport class AccordionItemElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const children = Array.from(this.childNodes); const label = attr(this,'label','分节'); const expanded = this.hasAttribute('expanded'); const head = document.createElement('div'); head.className = 'rp-accordion-head'; head.innerHTML = `${icon(expanded ? 'chevron-down' : 'chevron-right',14)}<span>${escapeHtml(label)}</span>`; this.appendChild(head); if (expanded) { const body = document.createElement('div'); body.className = 'rp-accordion-body'; children.forEach(n=>body.appendChild(n)); this.appendChild(body); } } }\nexport class BannerElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const type = attr(this,'type','info'); const ic = type==='error'?'circle-alert':type==='warning'?'alert-triangle':type==='success'?'circle-check':'info'; this.innerHTML = `${icon(ic)}<span class=\"rp-banner-text\"><strong>${escapeHtml(attr(this,'title','通知'))}</strong>${attr(this,'message') ? ` ${escapeHtml(attr(this,'message'))}` : ''}</span>${this.hasAttribute('has-action') ? '<snap-button label=\"查看\" variant=\"link\"></snap-button>' : ''}${this.hasAttribute('closable') ? icon('x',14) : ''}`; } }\nexport class SkeletonElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const shape = attr(this,'shape','line'); if (shape==='avatar') this.innerHTML = '<span class=\"rp-skel rp-skel-avatar\"></span>'; else if (shape==='card') this.innerHTML = '<span class=\"rp-skel rp-skel-block\"></span><span class=\"rp-skeleton-line\" style=\"width:70%\"></span><span class=\"rp-skeleton-line\" style=\"width:50%\"></span>'; else if (shape==='list') this.innerHTML = Array.from({length:3},()=>'<span class=\"rp-skel-row\"><span class=\"rp-skel rp-skel-avatar sm\"></span><span class=\"rp-skeleton-line\" style=\"width:60%\"></span></span>').join(''); else this.innerHTML = '<span class=\"rp-skeleton-line\"></span>'; } }\nexport class CountdownElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; this.innerHTML = `${icon('clock',13)}<span>${escapeHtml(attr(this,'value','02:45:18'))}</span>`; } }\nexport class ResultElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const status = attr(this,'status','success'); const ic = status==='error'?'circle-x':status==='empty'?'empty':'circle-check'; this.innerHTML = `<span class=\"rp-result-icon ${status}\">${icon(ic,40)}</span><span class=\"rp-result-title\">${escapeHtml(attr(this,'title','操作成功'))}</span><span class=\"rp-result-desc\">${escapeHtml(attr(this,'description',''))}</span>${this.hasAttribute('has-action') ? '<snap-button label=\"返回\" variant=\"primary\"></snap-button>' : ''}`; } }\nexport class PermissionGateElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const children = Array.from(this.childNodes); const wrap = document.createElement('div'); wrap.className = 'rp-gate-content'; children.forEach(n=>wrap.appendChild(n)); const overlay = document.createElement('div'); overlay.className = 'rp-gate-overlay'; overlay.innerHTML = `${icon('lock',16)}<span>${escapeHtml(attr(this,'reason','无权限'))}</span>`; this.append(wrap, overlay); } }\nexport class QuotaBarElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const used = intAttr(this,'used',70); const limit = intAttr(this,'limit',100); const pct = limit ? Math.min(100,(used/limit)*100) : 0; const danger = pct >= 90; this.innerHTML = `<div class=\"rp-quota-head\"><span>${escapeHtml(attr(this,'label','用量'))}</span><span class=\"rp-quota-num${danger ? ' danger' : ''}\">${used} / ${limit}</span></div><span class=\"rp-quota-track\"><span class=\"rp-quota-fill${danger ? ' danger' : ''}\" style=\"width:${pct}%\"></span></span>`; } }\nexport class ApiKeyElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const value = attr(this,'value','sk_live_••••••••••••3f9a'); this.innerHTML = `<span class=\"rp-apikey-val\">${escapeHtml(value)}</span><span class=\"rp-apikey-copy\">${icon('copy',14)}</span>`; } }\nexport class AuditRowElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; this.innerHTML = `<span class=\"rp-audit-actor\">${escapeHtml(attr(this,'actor','用户'))}</span><span class=\"rp-audit-action\">${escapeHtml(attr(this,'action','执行了操作'))}</span><span class=\"rp-audit-time\">${escapeHtml(attr(this,'time','刚刚'))}</span>`; } }\nexport class WorkflowNodeElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const state = attr(this,'state','default'); const ic = state==='done'?'circle-check':state==='active'?'circle':state==='error'?'circle-x':'circle'; this.innerHTML = `<span class=\"rp-wf-icon ${state}\">${icon(ic,16)}</span><span class=\"rp-wf-label\">${escapeHtml(attr(this,'label','节点'))}</span>`; } }\n\n","import { injectStyle } from '../core/style';\nimport { attr, csv, escapeHtml, intAttr } from '../core/dom';\nimport { icon } from '../core/icons';\n\n// iOS (Apple HIG) platform primitives. Static visual approximations only.\nexport class IosNavbarElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const title = attr(this,'title','标题'); const large = this.hasAttribute('large'); const back = attr(this,'back'); const trailing = attr(this,'trailing'); this.innerHTML = `<div class=\"rp-ios-navbar-row\"><span class=\"rp-ios-nav-leading\">${back ? `${icon('chevron-left',18)}<span>${escapeHtml(back)}</span>` : ''}</span><span class=\"rp-ios-nav-title${large ? ' inline' : ''}\">${large ? '' : escapeHtml(title)}</span><span class=\"rp-ios-nav-trailing\">${trailing ? escapeHtml(trailing) : ''}</span></div>${large ? `<div class=\"rp-ios-nav-large\">${escapeHtml(title)}</div>` : ''}`; } }\nexport class IosTabbarElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const items = csv(this,'items','首页,搜索,通知,我的'); const icons = csv(this,'icons','home,search,bell,user'); const active = intAttr(this,'active',0); this.innerHTML = items.map((it,i)=>`<span class=\"rp-ios-tab${i===active?' active':''}\">${icon(icons[i] || 'circle',22)}<span class=\"rp-ios-tab-label\">${escapeHtml(it)}</span></span>`).join(''); } }\nexport class IosListElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const header = attr(this,'header'); if (header) { const h = document.createElement('div'); h.className = 'rp-ios-list-header'; h.textContent = header; this.insertBefore(h, this.firstChild); } } }\nexport class IosListItemElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const label = attr(this,'label','项'); const detail = attr(this,'detail'); const ic = attr(this,'icon'); const chevron = this.hasAttribute('chevron'); this.innerHTML = `${ic ? `<span class=\"rp-ios-li-icon\">${icon(ic,16)}</span>` : ''}<span class=\"rp-ios-li-label\">${escapeHtml(label)}</span>${detail ? `<span class=\"rp-ios-li-detail\">${escapeHtml(detail)}</span>` : ''}${chevron ? `<span class=\"rp-ios-li-chevron\">${icon('chevron-right',16)}</span>` : ''}`; } }\nexport class IosActionSheetElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const title = attr(this,'title'); const actions = csv(this,'actions','拍照,从相册选择,选择文件'); const destructive = attr(this,'destructive'); const group = `<div class=\"rp-ios-as-group\">${title ? `<div class=\"rp-ios-as-title\">${escapeHtml(title)}</div>` : ''}${actions.map(a=>`<div class=\"rp-ios-as-action${a===destructive?' destructive':''}\">${escapeHtml(a)}</div>`).join('')}</div>`; const cancel = `<div class=\"rp-ios-as-group\"><div class=\"rp-ios-as-action cancel\">取消</div></div>`; this.innerHTML = group + cancel; } }\nexport class IosAlertElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const title = attr(this,'title','提示'); const message = attr(this,'message',''); const actions = csv(this,'actions','取消,确定'); this.innerHTML = `<div class=\"rp-ios-alert-body\"><div class=\"rp-ios-alert-title\">${escapeHtml(title)}</div>${message ? `<div class=\"rp-ios-alert-msg\">${escapeHtml(message)}</div>` : ''}</div><div class=\"rp-ios-alert-actions\">${actions.map((a,i)=>`<span class=\"rp-ios-alert-btn${i===actions.length-1?' primary':''}\">${escapeHtml(a)}</span>`).join('')}</div>`; } }\nexport class IosSwitchElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const label = attr(this,'label'); this.innerHTML = `${label ? `<span class=\"rp-ios-switch-label\">${escapeHtml(label)}</span>` : ''}<span class=\"rp-ios-switch-track\"><span class=\"rp-ios-switch-dot\"></span></span>`; } }\nexport class IosSegmentedElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const options = csv(this,'options','第一,第二,第三'); const active = intAttr(this,'active',0); this.innerHTML = options.map((o,i)=>`<span class=\"rp-ios-seg-item${i===active?' active':''}\">${escapeHtml(o)}</span>`).join(''); } }\nexport class IosButtonElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; this.innerHTML = `<span>${escapeHtml(attr(this,'label', this.textContent?.trim() || '按钮'))}</span>`; } }\nexport class IosSearchElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const value = attr(this,'value'); this.innerHTML = `${icon('search',15)}<span class=\"${value ? 'rp-value' : 'rp-placeholder'}\">${escapeHtml(value || attr(this,'placeholder','搜索'))}</span>`; } }\nexport class IosStepperElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; this.innerHTML = `<span class=\"rp-ios-step minus\">${icon('minus',16)}</span><span class=\"rp-ios-step-div\"></span><span class=\"rp-ios-step plus\">${icon('plus',16)}</span>`; } }\n","import { injectStyle } from '../core/style';\nimport { attr, csv, escapeHtml, intAttr } from '../core/dom';\nimport { icon } from '../core/icons';\n\n// macOS (Apple HIG) platform primitives. Static visual approximations only.\nexport class MacWindowElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const children = Array.from(this.childNodes); const title = attr(this,'title','窗口'); const titlebar = `<div class=\"rp-mac-titlebar\"><span class=\"rp-mac-lights\"><span class=\"rp-mac-light close\"></span><span class=\"rp-mac-light min\"></span><span class=\"rp-mac-light max\"></span></span><span class=\"rp-mac-title\">${escapeHtml(title)}</span></div>`; const body = document.createElement('div'); body.className = 'rp-mac-window-body'; children.forEach(n=>body.appendChild(n)); this.innerHTML = titlebar; this.appendChild(body); } }\nexport class MacToolbarElement extends HTMLElement { connectedCallback() { injectStyle(); } }\nexport class MacMenubarElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const items = csv(this,'items','文件,编辑,显示,窗口,帮助'); this.innerHTML = `<span class=\"rp-mac-menubar-apple\">${icon('home',14)}</span>` + items.map((it,i)=>`<span class=\"rp-mac-menu-title${i===0?' active':''}\">${escapeHtml(it)}</span>`).join(''); } }\nexport class MacSidebarElement extends HTMLElement { connectedCallback() { injectStyle(); } }\nexport class MacSourceItemElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const label = attr(this,'label','项'); const ic = attr(this,'icon'); if (this.hasAttribute('group')) { this.classList.add('rp-mac-source-group'); this.textContent = label; return; } this.innerHTML = `${ic ? icon(ic,15) : ''}<span class=\"rp-mac-source-label\">${escapeHtml(label)}</span>`; if (attr(this,'state')==='selected') this.classList.add('selected'); } }\nexport class MacSegmentedElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const options = csv(this,'options','全部,未读,标记'); const active = intAttr(this,'active',0); this.innerHTML = options.map((o,i)=>`<span class=\"rp-mac-seg-item${i===active?' active':''}\">${escapeHtml(o)}</span>`).join(''); } }\nexport class MacPopoverElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const children = Array.from(this.childNodes); const title = attr(this,'title'); const arrow = '<span class=\"rp-mac-pop-arrow\"></span>'; const body = document.createElement('div'); body.className = 'rp-mac-pop-body'; if (title) { const h = document.createElement('div'); h.className='rp-mac-pop-title'; h.textContent = title; body.appendChild(h); } children.forEach(n=>body.appendChild(n)); this.innerHTML = arrow; this.appendChild(body); } }\nexport class MacSheetElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const children = Array.from(this.childNodes); const title = attr(this,'title','操作'); const body = document.createElement('div'); body.className = 'rp-mac-sheet-body'; children.forEach(n=>body.appendChild(n)); this.innerHTML = `<div class=\"rp-mac-sheet-title\">${escapeHtml(title)}</div>`; this.appendChild(body); this.insertAdjacentHTML('beforeend','<div class=\"rp-mac-sheet-actions\"><snap-button label=\"取消\"></snap-button><snap-button label=\"完成\" variant=\"primary\"></snap-button></div>'); } }\nexport class MacStepperElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; this.innerHTML = `<span class=\"rp-mac-step up\">${icon('chevron-up',11)}</span><span class=\"rp-mac-step down\">${icon('chevron-down',11)}</span>`; } }\nexport class MacDisclosureElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const children = Array.from(this.childNodes); const label = attr(this,'label','详情'); const expanded = this.hasAttribute('expanded'); const head = document.createElement('div'); head.className = 'rp-mac-disc-head'; head.innerHTML = `<span class=\"rp-mac-disc-tri${expanded?' open':''}\">${icon('chevron-right',12)}</span><span>${escapeHtml(label)}</span>`; this.appendChild(head); if (expanded) { const body = document.createElement('div'); body.className='rp-mac-disc-body'; children.forEach(n=>body.appendChild(n)); this.appendChild(body); } } }\nexport class MacTableElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const cols = csv(this,'columns','名称,类型,大小'); const rows = intAttr(this,'rows',5); const head = `<div class=\"rp-mac-tr rp-mac-th\">${cols.map((c,i)=>`<span class=\"rp-mac-td\">${escapeHtml(c)}${i===0?icon('chevron-up',10):''}</span>`).join('')}</div>`; const body = Array.from({length:rows},(_,r)=>`<div class=\"rp-mac-tr${r%2?' alt':''}\">${cols.map((c,ci)=>`<span class=\"rp-mac-td\">${ci===0?icon('file',13):''}<span class=\"rp-mac-cell-bar\" style=\"width:${50+((r*17+ci*23)%40)}%\"></span></span>`).join('')}</div>`).join(''); this.innerHTML = head + body; } }\n","import { injectStyle } from '../core/style';\nimport { attr, csv, escapeHtml, intAttr } from '../core/dom';\nimport { icon } from '../core/icons';\n\n// Agent / conversational UI primitives. Static, Codex-style: single column,\n// de-bubbled, no assistant avatar, text + structure only (no markdown/highlight).\n\n// Conversation container — vertical single-column stack.\nexport class ChatElement extends HTMLElement { connectedCallback() { injectStyle(); } }\n\n// User message: a restrained light surface block, left-aligned, no avatar.\nexport class UserMessageElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const children = Array.from(this.childNodes); const text = attr(this,'text'); const content = document.createElement('div'); content.className = 'rp-msg-content'; if (text) content.textContent = text; else children.forEach(n=>content.appendChild(n)); this.innerHTML = `<div class=\"rp-msg-role\">You</div>`; this.appendChild(content); } }\n\n// Assistant message: plain flowing text, NO avatar, NO bubble.\nexport class AssistantMessageElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const children = Array.from(this.childNodes); const text = attr(this,'text'); const name = attr(this,'name','Assistant'); const content = document.createElement('div'); content.className = 'rp-msg-content'; if (text) content.textContent = text; else children.forEach(n=>content.appendChild(n)); this.innerHTML = `<div class=\"rp-msg-role\">${escapeHtml(name)}</div>`; this.appendChild(content); } }\n\n// System / context note line.\nexport class SystemMessageElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const text = attr(this,'text', this.textContent?.trim() || '系统消息'); this.innerHTML = `<span class=\"rp-sysmsg-line\">${escapeHtml(text)}</span>`; } }\n\n// Tool/function call: compact inline row with a status glyph + optional args/output.\nexport class ToolCallElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const children = Array.from(this.childNodes); const name = attr(this,'name','tool'); const state = attr(this,'state','done'); const glyph = state==='running' ? icon('loader',13) : state==='error' ? icon('circle-x',13) : icon('check',13); const args = attr(this,'args'); const head = `<div class=\"rp-tool-head\"><span class=\"rp-tool-glyph ${state}\">${glyph}</span><span class=\"rp-tool-name\">${escapeHtml(name)}</span>${args ? `<span class=\"rp-tool-args-inline\">${escapeHtml(args)}</span>` : ''}</div>`; const body = document.createElement('div'); body.className = 'rp-tool-body'; children.forEach(n=>body.appendChild(n)); this.innerHTML = head; if (children.length) this.appendChild(body); } }\n\n// Command / output block — monospace, plain text (no syntax highlight).\nexport class AgentOutputElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const children = Array.from(this.childNodes); const label = attr(this,'label'); const head = label ? `<div class=\"rp-output-head\">${escapeHtml(label)}</div>` : ''; const body = document.createElement('div'); body.className = 'rp-output-body'; const text = attr(this,'text'); if (text) body.textContent = text; else children.forEach(n=>body.appendChild(n)); this.innerHTML = head; this.appendChild(body); } }\n\n// Reasoning / thinking collapsible block.\nexport class ReasoningElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const children = Array.from(this.childNodes); const expanded = this.hasAttribute('expanded'); const head = `<div class=\"rp-reason-head\">${icon(expanded?'chevron-down':'chevron-right',13)}<span>Thought for a few seconds</span></div>`; this.innerHTML = head; if (expanded) { const body = document.createElement('div'); body.className='rp-reason-body'; children.forEach(n=>body.appendChild(n)); this.appendChild(body); } } }\n\n// Message action buttons (copy / retry / thumbs).\nexport class MessageActionsElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady || this.children.length) return; this.dataset.rpReady='true'; const actions = csv(this,'actions','copy,retry,up,down'); const map: Record<string,[string,string]> = { copy:['copy','复制'], retry:['refresh','重试'], up:['thumbs-up','赞'], down:['thumbs-down','踩'], edit:['edit','编辑'], share:['send','分享'] }; this.innerHTML = actions.map(a=>{ const m = map[a] || ['circle', a]; return `<span class=\"rp-msg-action\" title=\"${escapeHtml(m[1])}\">${icon(m[0],14)}</span>`; }).join(''); } }\n\n// Suggested reply / prompt chips.\nexport class SuggestionsElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const items = csv(this,'items','总结要点,继续,给个例子'); this.innerHTML = items.map(t=>`<span class=\"rp-suggestion\">${escapeHtml(t)}</span>`).join(''); } }\n\n// Streaming typing indicator (no avatar).\nexport class TypingElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; this.innerHTML = `<span class=\"rp-typing-dots\"><span></span><span></span><span></span></span>`; } }\n\n// Composer / prompt input.\nexport class ComposerElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const value = attr(this,'value'); const state = attr(this,'state','idle'); const sendIcon = state==='streaming' ? icon('stop',16) : icon('send',16); this.innerHTML = `<span class=\"rp-composer-attach\">${icon('paperclip',16)}</span><span class=\"rp-composer-input ${value?'rp-value':'rp-placeholder'}\">${escapeHtml(value || attr(this,'placeholder','给助手发消息…'))}</span><span class=\"rp-composer-send ${state}\">${sendIcon}</span>`; } }\n\n// Citation / source reference chip.\nexport class CitationElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const index = attr(this,'index','1'); const title = attr(this,'title', this.textContent?.trim() || '来源'); this.innerHTML = `<span class=\"rp-cite-idx\">${escapeHtml(index)}</span><span class=\"rp-cite-title\">${escapeHtml(title)}</span>`; } }\n\n// Token / usage meter.\nexport class TokenUsageElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const used = intAttr(this,'used',1840); const limit = intAttr(this,'limit',8000); const pct = limit ? Math.min(100,(used/limit)*100) : 0; this.innerHTML = `<span>${used.toLocaleString()} / ${limit.toLocaleString()} tokens</span><span class=\"rp-token-track\"><span class=\"rp-token-fill\" style=\"width:${pct}%\"></span></span>`; } }\n","import { define } from './core/dom';\nimport { RpAnnotation, RpEnum, RpEnumItem } from './canvas/annotation';\nimport { RpMainView } from './canvas/main-view';\nimport { RpPage } from './canvas/page';\nimport { DividerElement, GenericElement, LayoutElement, LogoElement, NavbarElement, PanelElement, SidebarElement, SpacerElement, SplitPaneElement, ViewportElement } from './primitives/layout';\nimport { AutocompleteElement, ButtonElement, CheckboxElement, ColorSwatchElement, DatePickerElement, FieldElement, FormElement, FormItemElement, ImagePlaceholderElement, NumberInputElement, PinInputElement, ProgressElement, RadioElement, RangeElement, RatingElement, SelectElement, SliderElement, TextareaElement, ToggleElement, UploadElement } from './primitives/controls';\nimport { AvatarElement, BadgeElement, BreadcrumbElement, CommandPaletteElement, ContextMenuElement, KbdElement, ListElement, ListItemElement, MenuElement, MenuItemElement, PaginationElement, SegmentedElement, StepsElement, TabElement, TabsElement, TocElement } from './primitives/navigation';\nimport { AccordionElement, AccordionItemElement, AlertElement, ApiKeyElement, AuditRowElement, BannerElement, BulkActionBarElement, CalendarElement, CardElement, ChipElement, CodeBlockElement, CountdownElement, DiffElement, DrawerElement, EmptyElement, ImageGridElement, KanbanCardElement, KanbanColumnElement, KanbanElement, KeyValueElement, KvRowElement, LoadingElement, ModalElement, OverlayElement, PermissionGateElement, QuotaBarElement, ResultElement, SkeletonElement, StatCardElement, TableElement, TableRowElement, TagElement, TimelineElement, TimelineItemElement, TooltipElement, TreeElement, TreeItemElement, WorkflowNodeElement } from './primitives/data-display';\nimport { IosActionSheetElement, IosAlertElement, IosButtonElement, IosListElement, IosListItemElement, IosNavbarElement, IosSearchElement, IosSegmentedElement, IosStepperElement, IosSwitchElement, IosTabbarElement } from './primitives/ios';\nimport { MacDisclosureElement, MacMenubarElement, MacPopoverElement, MacSegmentedElement, MacSheetElement, MacSidebarElement, MacSourceItemElement, MacStepperElement, MacTableElement, MacToolbarElement, MacWindowElement } from './primitives/macos';\nimport { AgentOutputElement, AssistantMessageElement, ChatElement, CitationElement, ComposerElement, MessageActionsElement, ReasoningElement, SuggestionsElement, SystemMessageElement, TokenUsageElement, ToolCallElement, TypingElement, UserMessageElement } from './primitives/agent';\n\nexport function registerAll() {\n define('rp-page', RpPage); define('proto-page', RpPage);\n define('rp-main-view', RpMainView); define('proto-main-view', RpMainView);\n define('rp-annotation', RpAnnotation); define('proto-annotation', RpAnnotation);\n define('rp-enum', RpEnum); define('proto-enum', RpEnum);\n define('rp-enum-item', RpEnumItem); define('proto-enum-item', RpEnumItem);\n const pairs: Array<[string, CustomElementConstructor]> = [\n // layout\n ['viewport', ViewportElement], ['layout', LayoutElement], ['panel', PanelElement], ['navbar', NavbarElement], ['sidebar', SidebarElement], ['logo', LogoElement], ['split-pane', SplitPaneElement], ['divider', DividerElement], ['spacer', SpacerElement],\n // controls\n ['search', FieldElement], ['input', FieldElement], ['textarea', TextareaElement], ['select', SelectElement], ['button', ButtonElement], ['button-group', GenericElement], ['checkbox', CheckboxElement], ['radio', RadioElement], ['toggle', ToggleElement], ['form', FormElement], ['form-item', FormItemElement], ['date-picker', DatePickerElement], ['upload', UploadElement], ['image-placeholder', ImagePlaceholderElement], ['progress', ProgressElement], ['slider', SliderElement], ['range', RangeElement], ['number-input', NumberInputElement], ['rating', RatingElement], ['pin-input', PinInputElement], ['color-swatch', ColorSwatchElement], ['autocomplete', AutocompleteElement],\n // navigation\n ['badge', BadgeElement], ['avatar', AvatarElement], ['list', ListElement], ['list-item', ListItemElement], ['tabs', TabsElement], ['tab', TabElement], ['pagination', PaginationElement], ['steps', StepsElement], ['breadcrumb', BreadcrumbElement], ['segmented', SegmentedElement], ['command-palette', CommandPaletteElement], ['context-menu', ContextMenuElement], ['menu', MenuElement], ['menu-item', MenuItemElement], ['toc', TocElement], ['kbd', KbdElement],\n // data display\n ['table', TableElement], ['table-row', TableRowElement], ['bulk-action-bar', BulkActionBarElement], ['empty', EmptyElement], ['loading', LoadingElement], ['alert', AlertElement], ['toast', AlertElement], ['dropdown', OverlayElement], ['popover', OverlayElement], ['tooltip', TooltipElement], ['modal', ModalElement], ['drawer', DrawerElement], ['card', CardElement], ['stat-card', StatCardElement], ['tag', TagElement], ['chip', ChipElement], ['tree', TreeElement], ['tree-item', TreeItemElement], ['timeline', TimelineElement], ['timeline-item', TimelineItemElement], ['calendar', CalendarElement], ['kanban', KanbanElement], ['kanban-column', KanbanColumnElement], ['kanban-card', KanbanCardElement], ['code-block', CodeBlockElement], ['diff', DiffElement], ['image-grid', ImageGridElement], ['key-value', KeyValueElement], ['kv-row', KvRowElement], ['accordion', AccordionElement], ['accordion-item', AccordionItemElement], ['banner', BannerElement], ['skeleton', SkeletonElement], ['countdown', CountdownElement], ['result', ResultElement], ['permission-gate', PermissionGateElement], ['quota-bar', QuotaBarElement], ['api-key', ApiKeyElement], ['audit-row', AuditRowElement], ['workflow-node', WorkflowNodeElement],\n // iOS\n ['ios-navbar', IosNavbarElement], ['ios-tabbar', IosTabbarElement], ['ios-list', IosListElement], ['ios-list-item', IosListItemElement], ['ios-action-sheet', IosActionSheetElement], ['ios-alert', IosAlertElement], ['ios-switch', IosSwitchElement], ['ios-segmented', IosSegmentedElement], ['ios-button', IosButtonElement], ['ios-search', IosSearchElement], ['ios-stepper', IosStepperElement],\n // macOS\n ['macos-window', MacWindowElement], ['macos-toolbar', MacToolbarElement], ['macos-menubar', MacMenubarElement], ['macos-sidebar', MacSidebarElement], ['macos-source-item', MacSourceItemElement], ['macos-segmented', MacSegmentedElement], ['macos-popover', MacPopoverElement], ['macos-sheet', MacSheetElement], ['macos-stepper', MacStepperElement], ['macos-disclosure', MacDisclosureElement], ['macos-table', MacTableElement],\n // agent / conversational UI\n ['chat', ChatElement], ['user-message', UserMessageElement], ['assistant-message', AssistantMessageElement], ['system-message', SystemMessageElement], ['tool-call', ToolCallElement], ['agent-output', AgentOutputElement], ['reasoning', ReasoningElement], ['message-actions', MessageActionsElement], ['suggestions', SuggestionsElement], ['typing', TypingElement], ['composer', ComposerElement], ['citation', CitationElement], ['token-usage', TokenUsageElement]\n ];\n for (const [suffix, ctor] of pairs) { define(`snap-${suffix}`, ctor); define(`rp-${suffix}`, ctor); }\n}\n","import { registerAll } from './registry';\n\nregisterAll();\n\nexport { registerAll };\n"],"names":["stage"],"mappings":"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A;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA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"}
|
|
1
|
+
{"version":3,"file":"rpui.js","sources":["../src/core/dom.ts","../../parser/src/vocabulary.ts","../../parser/src/index.ts","../src/core/style.ts","../src/canvas/annotation.ts","../src/canvas/main-view.ts","../src/canvas/page.ts","../src/primitives/layout.ts","../src/core/icons.ts","../src/primitives/controls.ts","../src/primitives/navigation.ts","../src/primitives/data-display.ts","../src/primitives/ios.ts","../src/primitives/macos.ts","../src/primitives/agent.ts","../src/registry.ts","../src/rpui.ts"],"sourcesContent":["export function attr(el: Element, name: string, fallback = ''): string { return el.getAttribute(name) ?? fallback; }\nexport function intAttr(el: Element, name: string, fallback: number): number { const raw = el.getAttribute(name); const value = raw === null || raw === '' ? NaN : Number(raw); return Number.isFinite(value) ? value : fallback; }\nexport function escapeHtml(value: string): string { return value.replace(/[&<>'\"]/g, c => ({ '&':'&', '<':'<', '>':'>', \"'\":''', '\"':'"' }[c] || c)); }\nexport function csv(el: Element, name: string, fallback: string): string[] { return attr(el, name, fallback).split(',').map(s => s.trim()).filter(Boolean); }\n\nexport const deviceWidths: Record<string, number> = { web: 1440, ipad: 834, mobile: 390 };\nexport function resolveWidth(el: Element, fallback: number): number { const raw = el.getAttribute('width'); const width = raw === null || raw === '' ? NaN : Number(raw); if (Number.isFinite(width)) return width; return deviceWidths[attr(el,'device')] ?? fallback; }\nexport function hasExplicitNumericHeight(el: Element): boolean { const raw = el.getAttribute('height'); return raw !== null && raw !== '' && Number.isFinite(Number(raw)); }\nexport function usesAutoHeight(el: Element): boolean { const raw = el.getAttribute('height'); return raw === 'auto' || el.hasAttribute('auto-height') || (!!el.getAttribute('device') && !hasExplicitNumericHeight(el)); }\nexport function resolveHeight(el: Element, fallback: number): number { const raw = el.getAttribute('height'); const height = raw === null || raw === '' ? NaN : Number(raw); return Number.isFinite(height) ? height : fallback; }\nexport function isTopAnnotation(node: Node): node is HTMLElement { if (!(node instanceof HTMLElement)) return false; const tag = node.tagName.toLowerCase(); return tag === 'annotation-el' || tag === 'annotation-el'; }\nexport function isViewportNode(node: Node): node is HTMLElement { if (!(node instanceof HTMLElement)) return false; const tag = node.tagName.toLowerCase(); return tag === 'viewport-el' || tag === 'viewport-el'; }\nexport function define(name: string, ctor: CustomElementConstructor) {\n if (customElements.get(name)) return;\n const Alias = class extends (ctor as { new(): HTMLElement }) {};\n customElements.define(name, Alias as CustomElementConstructor);\n}\n\n\n","/** RPML vocabulary: the mapping between the *language* and the *renderer*.\n *\n * RPML the language speaks clean, curated names (`page`, `view`, `navigator`,\n * `button`, …). The Web Components runtime needs tag names that contain a\n * hyphen (an HTML custom-element requirement) and that avoid colliding with\n * native HTML elements (`button`, `table`, `form`, …). This module is the\n * single source of truth that bridges the two so the language is decoupled\n * from the rendering technology.\n *\n * - LANG_TO_COMPONENT: every language tag → its Web Component tag.\n * - COMPONENT_TO_LANG: the inverse, derived (so the two can never drift).\n * - toComponentTag / toLangTag: identity for anything not in the map\n * (native HTML, comments, unknown tags pass through untouched).\n */\n\n/** Primitive language names. Single words get an `-el` suffix at the component\n * layer; names already containing a hyphen are used verbatim. This list is the\n * authority the renderer's registry registers against. */\nexport const PRIMITIVES: readonly string[] = [\n // layout\n 'viewport', 'layout', 'panel', 'sidebar', 'logo', 'split-pane', 'divider', 'spacer',\n // controls\n 'search', 'input', 'textarea', 'select', 'button', 'button-group', 'checkbox', 'radio', 'toggle', 'form', 'form-item', 'date-picker', 'upload', 'image-placeholder', 'progress', 'slider', 'range', 'number-input', 'rating', 'pin-input', 'color-swatch', 'autocomplete',\n // navigation\n 'badge', 'avatar', 'list', 'list-item', 'tabs', 'tab', 'pagination', 'steps', 'breadcrumb', 'segmented', 'command-palette', 'context-menu', 'menu', 'menu-item', 'toc', 'kbd',\n // data display\n 'table', 'table-row', 'bulk-action-bar', 'empty', 'loading', 'alert', 'toast', 'dropdown', 'popover', 'tooltip', 'modal', 'drawer', 'card', 'stat-card', 'tag', 'chip', 'tree', 'tree-item', 'timeline', 'timeline-item', 'calendar', 'kanban', 'kanban-column', 'kanban-card', 'code-block', 'diff', 'image-grid', 'key-value', 'kv-row', 'accordion', 'accordion-item', 'banner', 'skeleton', 'countdown', 'result', 'permission-gate', 'quota-bar', 'api-key', 'audit-row', 'workflow-node',\n // iOS\n 'ios-navbar', 'ios-tabbar', 'ios-list', 'ios-list-item', 'ios-action-sheet', 'ios-alert', 'ios-switch', 'ios-segmented', 'ios-button', 'ios-search', 'ios-stepper',\n // macOS\n 'macos-window', 'macos-toolbar', 'macos-menubar', 'macos-sidebar', 'macos-source-item', 'macos-segmented', 'macos-popover', 'macos-sheet', 'macos-stepper', 'macos-disclosure', 'macos-table',\n // agent / conversational UI\n 'chat', 'user-message', 'assistant-message', 'system-message', 'tool-call', 'agent-output', 'reasoning', 'message-actions', 'suggestions', 'typing', 'composer', 'citation', 'token-usage'\n];\n\n/** Component tag for a primitive: single words get `-el`, compounds are bare. */\nfunction primitiveComponentTag(lang: string): string {\n return lang.includes('-') ? lang : `${lang}-el`;\n}\n\n/** Curated renames where the language name differs from the mechanical rule.\n * Canvas tags plus the one primitive (`navigator`) that reads better than its\n * component tag (`navbar-el`). */\nconst EXPLICIT: Record<string, string> = {\n // canvas\n page: 'page-el',\n view: 'main-view',\n annotation: 'annotation-el',\n enum: 'enum-el',\n 'enum-item': 'enum-item',\n viewport: 'viewport-el',\n // curated primitive rename\n navigator: 'navbar-el'\n};\n\n/** Language tag → Web Component tag. */\nexport const LANG_TO_COMPONENT: Record<string, string> = (() => {\n const map: Record<string, string> = {};\n for (const lang of PRIMITIVES) map[lang] = primitiveComponentTag(lang);\n // Explicit entries override the mechanical rule (and add canvas tags).\n for (const [lang, comp] of Object.entries(EXPLICIT)) map[lang] = comp;\n return map;\n})();\n\n/** Web Component tag → language tag (derived inverse). */\nexport const COMPONENT_TO_LANG: Record<string, string> = (() => {\n const map: Record<string, string> = {};\n for (const [lang, comp] of Object.entries(LANG_TO_COMPONENT)) map[comp] = lang;\n return map;\n})();\n\n/** Translate a language tag to its component tag (identity if unmapped). */\nexport function toComponentTag(tag: string): string {\n return LANG_TO_COMPONENT[tag.toLowerCase()] ?? tag;\n}\n\n/** Translate a component tag back to its language tag (identity if unmapped). */\nexport function toLangTag(tag: string): string {\n return COMPONENT_TO_LANG[tag.toLowerCase()] ?? tag;\n}\n","/** RPML AST types and shared parsing utilities.\n *\n * This is the single source of truth for:\n * - RpmlNode — the AST shape\n * - expandSelfClosing — normalize self-closing tags before HTML injection\n * - parse — browser: DOMParser → RpmlNode AST\n * - parseToPage — browser: innerHTML → live Element (for renderer-web / viewer)\n * - parseNode — universal: regex SAX → RpmlNode AST (works in Bun/Node, no DOMParser)\n *\n * validator/cli and VS Code extension use parseNode.\n * renderer-web/rpml-loader uses parseToPage.\n * Everything else uses parse.\n */\n\nimport { toComponentTag } from './vocabulary';\nexport { LANG_TO_COMPONENT, COMPONENT_TO_LANG, toComponentTag, toLangTag, PRIMITIVES } from './vocabulary';\n\nexport interface RpmlNode {\n tag: string;\n attrs: Record<string, string>;\n children: RpmlNode[];\n text?: string;\n}\n\n/** Expand self-closing custom-element tags (`<button ... />`) into explicit\n * open+close pairs before HTML injection.\n * The HTML parser ignores `/>` on custom elements; quoted attribute values\n * (which may contain `/>`) are preserved verbatim. */\nexport function expandSelfClosing(source: string): string {\n return source.replace(\n /<([a-zA-Z][\\w:-]*)((?:\"[^\"]*\"|'[^']*'|[^>\"'])*?)\\/>/g,\n (_m, tag: string, attrs: string) => `<${tag}${attrs}></${tag}>`\n );\n}\n\n/** Rewrite RPML *language* tag names to their Web Component tag names.\n * Matches a complete opening/closing tag and rewrites only the tag NAME.\n * The attribute portion is consumed with quoted-string awareness, so a literal\n * `<tag` inside an attribute value (e.g. label=\"use <button>\") is never seen as\n * a tag start. Native HTML tags and comments (`<!--`) fall through unchanged.\n * Run AFTER expandSelfClosing so every tag is a well-formed `<...>` pair. */\nexport function rewriteTags(source: string): string {\n return source.replace(\n /<(\\/?)([a-zA-Z][\\w:-]*)((?:\"[^\"]*\"|'[^']*'|[^>])*)>/g,\n (_m, slash: string, tag: string, rest: string) => `<${slash}${toComponentTag(tag)}${rest}>`\n );\n}\n\n/** Normalize RPML source for parsing: expand self-closing tags, then map\n * language tag names onto Web Component tag names. */\nexport function normalize(source: string): string {\n return rewriteTags(expandSelfClosing(source.trim()));\n}\n\n/** Parse a .rpml string into an AST via browser DOMParser.\n * Requires a browser environment (DOMParser available). */\nexport function parse(source: string): RpmlNode {\n const doc = new DOMParser().parseFromString(normalize(source), 'text/html');\n const root = doc.body.querySelector('page-el') ?? doc.body.firstElementChild;\n if (!root) throw new Error('RPML parse error: no <page> root element found');\n return domToAst(root);\n}\n\nfunction domToAst(el: Element): RpmlNode {\n const attrs: Record<string, string> = {};\n for (let i = 0; i < el.attributes.length; i++) { const a = el.attributes[i]; attrs[a.name] = a.value; }\n const children: RpmlNode[] = [];\n let text: string | undefined;\n for (let i = 0; i < el.childNodes.length; i++) {\n const child = el.childNodes[i];\n if (child.nodeType === 1) children.push(domToAst(child as Element));\n else if (child.nodeType === 3) { const t = child.textContent?.trim(); if (t) text = (text ?? '') + t; }\n }\n return { tag: el.tagName.toLowerCase(), attrs, children, ...(text ? { text } : {}) };\n}\n\n/** Parse a .rpml string into a DOM Element using the live document's HTML parser.\n * Requires a browser environment. Language tags are rewritten to component tags\n * first; custom elements then upgrade against the live registry — identical to\n * inlining the component-tag markup in a .html file. */\nexport function parseToPage(source: string): Element {\n const holder = document.createElement('div');\n holder.innerHTML = normalize(source);\n const root = holder.querySelector('page-el') ?? holder.firstElementChild;\n if (!root) throw new Error('RPML parse error: no <page> root element found');\n return root;\n}\n\n/** Render an AST back into DOM elements. Requires a browser environment. */\nexport function astToDom(node: RpmlNode): Element {\n const el = document.createElement(node.tag);\n for (const [k, v] of Object.entries(node.attrs)) el.setAttribute(k, v);\n for (const child of node.children) el.appendChild(astToDom(child));\n if (node.text && node.children.length === 0) el.textContent = node.text;\n return el;\n}\n\n/** Parse a .rpml string into an AST using a regex SAX walker.\n * Works in any JS environment (Bun, Node, browsers) — no DOMParser needed.\n * Used by validator CLI and VS Code extension. */\nexport function parseNode(source: string): RpmlNode {\n const norm = normalize(source);\n const stack: RpmlNode[] = [];\n let root: RpmlNode | null = null;\n const tagRe = /<([/]?)([a-zA-Z][\\w:-]*)([^>]*)>/g;\n let m: RegExpExecArray | null;\n while ((m = tagRe.exec(norm)) !== null) {\n const [, closing, tag, attrStr] = m;\n if (closing) {\n const node = stack.pop()!;\n if (stack.length) stack[stack.length - 1].children.push(node);\n else root = node;\n } else {\n const attrs: Record<string, string> = {};\n const attrRe = /([\\w:-]+)(?:=\"([^\"]*)\")?/g;\n let am: RegExpExecArray | null;\n while ((am = attrRe.exec(attrStr)) !== null) {\n if (am[1] !== attrStr.trim()) attrs[am[1]] = am[2] ?? '';\n }\n stack.push({ tag: tag.toLowerCase(), attrs, children: [] });\n }\n }\n if (!root && stack.length) root = stack[0];\n if (!root) throw new Error('RPML parse error: no root element found');\n return root;\n}\n\nexport { parse as default };\n","export const RPUI_STYLE_ID = \"rpui-runtime-style\";\n\nexport const style = `\n:root { --rp-bg:#f0f2f5; --rp-surface:#fff; --rp-surface-soft:#f9fafb; --rp-text:#111827; --rp-muted:#6b7280; --rp-border:#e5e7eb; --rp-border-strong:#d1d5db; --rp-primary:#2563eb; --rp-success:#059669; --rp-warning:#d97706; --rp-danger:#dc2626; --rp-purple:#7c3aed; --rp-radius-sm:4px; --rp-radius-md:8px; --rp-radius-lg:12px; --rp-shadow:0 8px 28px rgba(15,23,42,.08); --rp-font:-apple-system,BlinkMacSystemFont,\"Segoe UI\",sans-serif; }\n* { box-sizing:border-box; }\nbody { margin:0; font-family:var(--rp-font); color:var(--rp-text); background:var(--rp-bg); }\n.rp-icon { display:inline-block; flex:0 0 auto; vertical-align:-0.16em; }\npage-el, page-el { display:block; min-height:100vh; padding:32px 40px; overflow:auto; }\n.page-el-shell { display:grid; grid-template-columns:max-content max-content; gap:24px; min-height:100vh; align-items:start; }\n.page-el-main { display:flex; flex-direction:column; min-width:0; overflow:visible; }\n.page-el-header { flex:0 0 auto; width:fit-content; max-width:none; margin:0 0 22px; }\n.page-el-title-row { display:flex; align-items:baseline; gap:12px; flex-wrap:wrap; }\n.page-el-title { margin:0; font-size:28px; line-height:1.2; letter-spacing:-.02em; }\n.page-el-route { font-size:13px; color:var(--rp-muted); font-family:ui-monospace,SFMono-Regular,Menlo,monospace; background:rgba(255,255,255,.7); border:1px solid var(--rp-border); border-radius:999px; padding:3px 9px; }\n.page-el-description { margin:10px 0 0; color:#374151; line-height:1.6; font-size:14px; }\n.page-el-body { flex:0 1 auto; display:block; width:fit-content; max-width:100%; min-height:0; overflow:visible; }\n.annotation-el-pane { min-width:380px; max-width:680px; position:sticky; top:0; height:100vh; overflow-y:auto; overflow-x:auto; padding:0 0 48px 0; align-self:start; }\n.annotation-el-pane-inner { padding:4px 12px 24px 6px; }\nmain-view, main-view { display:block; width:fit-content; margin:0 0 28px; position:relative; }\n.rp-main-shell { position:relative; overflow:visible; border:1px solid var(--rp-border-strong); border-radius:var(--rp-radius-md); background:var(--rp-surface); box-shadow:var(--rp-shadow); }\n.rp-main-stage-clip { overflow:hidden; border-radius:var(--rp-radius-md); }\n.rp-main-stage { position:relative; transform-origin:top left; background:var(--rp-surface); }\n.rp-pin { position:absolute; z-index:20; display:grid; place-items:center; width:24px; height:24px; color:#fff; font-size:11px; font-weight:700; background:var(--rp-primary); border-radius:50% 50% 50% 0; transform:translate(-6px,-6px) rotate(-45deg); box-shadow:0 2px 8px rgba(37,99,235,.25); cursor:pointer; }\n.rp-pin > span { transform:rotate(45deg); }\n.rp-pin:hover { opacity:0.85; }\nannotation-el, annotation-el { display:block; width:fit-content; max-width:980px; margin:14px 0; line-height:1.65; color:#1f2937; font-size:14px; }\nannotation-el annotation-el, annotation-el annotation-el, annotation-el annotation-el, annotation-el annotation-el { margin:10px 0 8px 22px; }\n.annotation-el-head { display:flex; align-items:center; gap:8px; margin:0 0 4px; width:fit-content; }\n.annotation-el-title { font-weight:700; color:#111827; }\n.annotation-el-marker { display:inline-grid; place-items:center; flex:0 0 auto; color:#fff; font-size:10px; font-weight:700; line-height:1; }\n.annotation-el-marker.drop { width:22px; height:22px; background:var(--rp-primary); border-radius:50% 50% 50% 0; transform:rotate(-45deg); }\n.annotation-el-marker.drop > span { transform:rotate(45deg); }\n.annotation-el-marker.circle { width:16px; height:16px; background:var(--rp-purple); border-radius:50%; }\n.annotation-el-marker.triangle { width:18px; height:16px; background:var(--rp-success); clip-path:polygon(50% 0, 100% 100%, 0 100%); }\n.annotation-el-marker.triangle > span { transform:translateY(2px); font-size:9px; }\n.annotation-el-body { display:block; position:relative; width:fit-content; max-width:920px; }\n.rp-pin-slice { width:18px; height:18px; font-size:10px; box-shadow:0 1px 5px rgba(37,99,235,.3); }\n.annotation-el-body > :not(annotation-el):not(annotation-el):not(enum-el):not(enum-el) { max-width:820px; }\n.annotation-el-pane annotation-el, .annotation-el-pane annotation-el { max-width:none; }\n.annotation-el-pane .annotation-el-body { max-width:none; }\n.annotation-el-pane .annotation-el-body > :not(annotation-el):not(annotation-el):not(enum-el):not(enum-el) { max-width:420px; }\n.annotation-el-body p { margin:0 0 8px; }\nenum-el, enum-el { display:flex; align-items:flex-start; flex-wrap:wrap; gap:10px; width:fit-content; margin:8px 0 12px; }\n.annotation-el-pane enum-el, .annotation-el-pane enum-el { flex-wrap:wrap; }\nenum-item, enum-item { display:block; flex:0 0 auto; width:fit-content; min-width:180px; max-width:600px; border:1px solid #f0f0f0; border-radius:var(--rp-radius-md); background:#fff; overflow:hidden; }\n.enum-el-label { display:flex; align-items:flex-start; gap:6px; padding:5px 9px 4px; font-size:12px; font-weight:650; color:#374151; }\n.enum-el-index { display:inline-grid; place-items:center; min-width:16px; height:16px; padding:0 4px; background:#111827; color:#fff; font-size:10px; font-weight:750; border-radius:3px; flex:0 0 auto; margin-top:1px; }\n.enum-el-label-text { display:block; }\n.enum-el-description { display:block; margin-top:2px; font-size:11px; line-height:1.35; font-weight:400; color:var(--rp-muted); }\n.enum-el-content { display:block; width:fit-content; padding:8px; }\n.annotation-el-title { font-weight:700; color:#111827; cursor:pointer; }\n.annotation-el-title:hover { color:var(--rp-primary); }\n.rp-section-focus { outline:2px dashed var(--rp-primary); outline-offset:4px; border-radius:4px; }\nviewport-el, viewport-el { display:flex; flex-direction:column; width:var(--snap-width,1440px); height:var(--snap-height,900px); background:#f8fafc; overflow:hidden; color:#111827; }\nlayout-el, layout-el { display:grid; grid-template-columns:var(--snap-columns,1fr); grid-template-rows:var(--snap-rows,auto); gap:var(--snap-gap,0); align-content:start; width:fit-content; max-width:100%; min-width:0; }\nlayout-el > *, layout-el > * { min-width:0; }\nviewport-el layout-el, viewport-el layout-el { width:100%; }\nviewport-el > layout-el, viewport-el > layout-el { flex:1 1 auto; min-height:0; }\nviewport-el > navbar-el, viewport-el > navbar-el { flex:0 0 auto; }\npanel-el, panel-el { display:block; width:fit-content; max-width:100%; background:#fff; border:1px solid var(--rp-border); border-radius:var(--rp-radius-md); padding:var(--snap-padding,16px); }\nviewport-el panel-el, viewport-el panel-el { width:auto; min-width:0; }\npanel-el[elevation=\"1\"], panel-el[elevation=\"1\"] { box-shadow:0 4px 16px rgba(15,23,42,.06); }\npanel-el[elevation=\"2\"], panel-el[elevation=\"2\"] { box-shadow:var(--rp-shadow); }\nnavbar-el, navbar-el { display:flex; align-items:center; gap:14px; height:var(--snap-height,64px); padding:0 24px; background:#fff; border-bottom:1px solid var(--rp-border); }\nsidebar-el, sidebar-el { display:block; width:var(--snap-width,260px); min-height:0; background:#fff; border-right:1px solid var(--rp-border); padding:14px; }\nviewport-el sidebar-el, viewport-el sidebar-el { min-height:100%; }\nsidebar-el[collapsed], sidebar-el[collapsed] { width:72px; }\nlogo-el, logo-el { display:inline-grid; place-items:center; width:var(--snap-size,82px); height:32px; border-radius:8px; background:#111827; color:#fff; font-size:12px; font-weight:800; letter-spacing:.08em; }\nsearch-el, search-el, input-el, input-el, date-picker, date-picker { display:inline-flex; align-items:center; gap:8px; width:280px; min-height:36px; padding:0 11px; border:1px solid var(--rp-border-strong); border-radius:8px; background:#fff; color:#111827; }\ntextarea-el, textarea-el { display:block; width:320px; min-height:calc(var(--snap-rows,3) * 24px + 22px); padding:9px 11px; border:1px solid var(--rp-border-strong); border-radius:8px; background:#fff; color:#111827; white-space:pre-wrap; }\nsearch-el[state=\"focus\"], search-el[state=\"focus\"], input-el[state=\"focus\"], input-el[state=\"focus\"], textarea-el[state=\"focus\"], textarea-el[state=\"focus\"], date-picker[state=\"focus\"], date-picker[state=\"focus\"] { border-color:var(--rp-primary); box-shadow:0 0 0 3px rgba(37,99,235,.12); }\nsearch-el[state=\"filled\"], search-el[state=\"filled\"], input-el[state=\"filled\"], input-el[state=\"filled\"], textarea-el[state=\"filled\"], textarea-el[state=\"filled\"], date-picker[state=\"filled\"], date-picker[state=\"filled\"] { border-color:#93c5fd; background:#f8fbff; }\nsearch-el[state=\"error\"], search-el[state=\"error\"], input-el[state=\"error\"], input-el[state=\"error\"], textarea-el[state=\"error\"], textarea-el[state=\"error\"], date-picker[state=\"error\"], date-picker[state=\"error\"] { border-color:var(--rp-danger); box-shadow:0 0 0 3px rgba(220,38,38,.1); }\nsearch-el[state=\"disabled\"], search-el[state=\"disabled\"], input-el[state=\"disabled\"], input-el[state=\"disabled\"], textarea-el[state=\"disabled\"], textarea-el[state=\"disabled\"], date-picker[state=\"disabled\"], date-picker[state=\"disabled\"] { opacity:.55; background:#f3f4f6; }\ninput-el[label], input-el[label], date-picker[label], date-picker[label] { display:inline-grid; align-items:start; gap:6px; width:280px; min-height:0; padding:0; border:0; background:transparent; box-shadow:none; }\ninput-el[label][state=\"focus\"], input-el[label][state=\"focus\"], input-el[label][state=\"filled\"], input-el[label][state=\"filled\"], input-el[label][state=\"error\"], input-el[label][state=\"error\"], date-picker[label][state=\"focus\"], date-picker[label][state=\"focus\"], date-picker[label][state=\"filled\"], date-picker[label][state=\"filled\"], date-picker[label][state=\"error\"], date-picker[label][state=\"error\"] { border:0; background:transparent; box-shadow:none; }\n.rp-field-control { display:flex; align-items:center; gap:8px; min-height:36px; padding:0 11px; border:1px solid var(--rp-border-strong); border-radius:8px; background:#fff; color:#111827; }\ninput-el[state=\"focus\"] .rp-field-control, input-el[state=\"focus\"] .rp-field-control, date-picker[state=\"focus\"] .rp-field-control, date-picker[state=\"focus\"] .rp-field-control { border-color:var(--rp-primary); box-shadow:0 0 0 3px rgba(37,99,235,.12); }\ninput-el[state=\"filled\"] .rp-field-control, input-el[state=\"filled\"] .rp-field-control, date-picker[state=\"filled\"] .rp-field-control, date-picker[state=\"filled\"] .rp-field-control { border-color:#93c5fd; background:#f8fbff; }\ninput-el[state=\"error\"] .rp-field-control, input-el[state=\"error\"] .rp-field-control, date-picker[state=\"error\"] .rp-field-control, date-picker[state=\"error\"] .rp-field-control { border-color:var(--rp-danger); box-shadow:0 0 0 3px rgba(220,38,38,.1); }\n.rp-field-label { display:block; margin:0 0 6px; color:#374151; font-size:12px; font-weight:650; }\n.rp-placeholder { color:#9ca3af; }\n.rp-value { color:#111827; }\n.rp-error-text { color:var(--rp-danger); font-size:12px; }\nselect-el, select-el { display:inline-block; width:280px; max-width:100%; }\n.select-el-control { display:flex; align-items:center; gap:8px; min-height:36px; padding:0 11px; border:1px solid var(--rp-border-strong); border-radius:8px; background:#fff; }\nselect-el[state=\"expanded\"] .select-el-control, select-el[state=\"expanded\"] .select-el-control { border-color:var(--rp-primary); box-shadow:0 0 0 3px rgba(37,99,235,.12); }\nselect-el[state=\"disabled\"], select-el[state=\"disabled\"] { opacity:.55; }\n.select-el-value { flex:1 1 auto; min-width:0; }\n.select-el-options { display:none; margin-top:6px; padding:5px; border:1px solid var(--rp-border); border-radius:8px; background:#fff; box-shadow:0 10px 18px rgba(15,23,42,.08); }\nselect-el[state=\"expanded\"] .select-el-options, select-el[state=\"expanded\"] .select-el-options { display:grid; gap:2px; }\n.select-el-option { padding:7px 8px; border-radius:6px; font-size:13px; color:#374151; }\n.select-el-option.selected { background:#eff6ff; color:#1d4ed8; font-weight:700; }\nbadge-el, badge-el { display:inline-grid; place-items:center; min-width:20px; height:20px; padding:0 6px; border-radius:999px; background:#ef4444; color:#fff; font-size:11px; font-weight:750; }\navatar-el, avatar-el { display:inline-grid; place-items:center; width:var(--snap-size,32px); height:var(--snap-size,32px); border-radius:999px; background:#e0e7ff; color:#3730a3; font-size:12px; font-weight:800; }\nlist-el, list-el { display:flex; flex-direction:column; gap:4px; width:100%; }\nlist-item, list-item { display:flex; align-items:center; gap:8px; width:100%; min-width:180px; height:36px; padding:0 10px; border-radius:8px; color:#374151; }\nlist-item[state=\"selected\"], list-item[state=\"selected\"] { background:#eff6ff; color:#1d4ed8; font-weight:700; }\nlist-item[state=\"disabled\"], list-item[state=\"disabled\"] { opacity:.5; }\n.list-el-label { flex:1 1 auto; }\n.list-el-badge { margin-left:auto; min-width:18px; height:18px; border-radius:999px; display:grid; place-items:center; padding:0 6px; background:#e5e7eb; color:#374151; font-size:11px; font-weight:700; }\ntabs-el, tabs-el { display:flex; gap:6px; border-bottom:1px solid var(--rp-border); margin-bottom:12px; width:fit-content; }\ntab-el, tab-el { display:inline-flex; align-items:center; gap:6px; padding:9px 13px; border-bottom:2px solid transparent; color:#6b7280; font-size:14px; }\ntab-el.tab-el-active, tab-el.tab-el-active { color:var(--rp-primary); border-bottom-color:var(--rp-primary); font-weight:700; }\nbutton-el, button-el { display:inline-flex; align-items:center; justify-content:center; gap:7px; min-height:34px; padding:0 12px; border-radius:8px; border:1px solid var(--rp-border); background:#fff; color:#374151; font-size:13px; font-weight:650; }\nbutton-el[size=\"sm\"], button-el[size=\"sm\"] { min-height:28px; padding:0 9px; font-size:12px; border-radius:6px; }\nbutton-el[size=\"lg\"], button-el[size=\"lg\"] { min-height:40px; padding:0 16px; font-size:14px; }\nbutton-el[variant=\"primary\"], button-el[variant=\"primary\"] { border-color:var(--rp-primary); background:var(--rp-primary); color:#fff; }\nbutton-el[variant=\"secondary\"], button-el[variant=\"secondary\"] { border-color:#bfdbfe; background:#eff6ff; color:#1d4ed8; }\nbutton-el[variant=\"danger\"], button-el[variant=\"danger\"] { border-color:var(--rp-danger); color:var(--rp-danger); }\nbutton-el[variant=\"link\"], button-el[variant=\"link\"] { border-color:transparent; background:transparent; color:var(--rp-primary); padding-inline:2px; }\nbutton-el[variant=\"ghost\"], button-el[variant=\"ghost\"] { border-color:transparent; background:transparent; }\nbutton-el[state=\"disabled\"], button-el[state=\"disabled\"], button-el[disabled], button-el[disabled] { opacity:.5; }\nbutton-group, button-group { display:inline-flex; gap:0; width:fit-content; }\nbutton-group > button-el, button-group > button-el { border-radius:0; margin-left:-1px; }\nbutton-group > :first-child { border-radius:8px 0 0 8px; margin-left:0; }\nbutton-group > :last-child { border-radius:0 8px 8px 0; }\ntable-el, table-el { display:table; border-collapse:collapse; width:fit-content; min-width:720px; max-width:980px; background:#fff; border:1px solid var(--rp-border); border-radius:8px; overflow:hidden; }\nviewport-el table-el, viewport-el table-el { width:100%; max-width:none; }\n.table-row { display:table-row; }\n.table-el-cell { display:table-cell; padding:11px 12px; border-bottom:1px solid var(--rp-border); font-size:13px; vertical-align:middle; white-space:nowrap; }\n.table-el-head .table-el-cell { background:#f9fafb; color:#6b7280; font-size:12px; font-weight:750; }\n.table-row:last-child .table-el-cell { border-bottom:0; }\ntable-row, table-row { display:grid; grid-template-columns:44px 150px 240px 90px 90px; align-items:center; min-width:560px; border:1px solid var(--rp-border); border-radius:8px; overflow:hidden; background:#fff; }\ntable-row > span, table-row > span { padding:10px 12px; font-size:13px; }\ntable-row[state=\"unread\"], table-row[state=\"unread\"] { background:#eff6ff; font-weight:700; }\ntable-row[state=\"selected\"], table-row[state=\"selected\"] { outline:2px solid rgba(37,99,235,.35); background:#f8fbff; }\ntable-row[state=\"highlighted\"], table-row[state=\"highlighted\"] { background:#fffbeb; }\ntable-row[state=\"disabled\"], table-row[state=\"disabled\"] { opacity:.5; }\nbulk-action-bar, bulk-action-bar { display:flex; align-items:center; gap:8px; width:fit-content; padding:8px 10px; margin:0 0 10px; border:1px solid #bfdbfe; background:#eff6ff; border-radius:8px; color:#1e40af; font-size:13px; font-weight:650; }\nempty-el, empty-el { display:grid; justify-items:center; gap:8px; width:fit-content; min-width:240px; padding:24px; border:1px dashed var(--rp-border-strong); border-radius:10px; background:#fff; color:#6b7280; text-align:center; }\n.empty-el-title { color:#111827; font-weight:700; }\n.empty-el-desc { font-size:13px; }\nloading-el, loading-el { display:grid; gap:8px; min-width:260px; color:var(--rp-primary); }\n.skeleton-el-line { height:14px; border-radius:999px; background:linear-gradient(90deg,#f3f4f6,#e5e7eb,#f3f4f6); }\n.rp-spinner { display:inline-grid; place-items:center; width:32px; height:32px; }\nalert-el, alert-el, toast-el, toast-el { display:flex; align-items:flex-start; gap:8px; width:fit-content; max-width:420px; padding:10px 12px; border:1px solid var(--rp-border); border-radius:8px; background:#fff; font-size:13px; }\nalert-el[type=\"info\"], alert-el[type=\"info\"], toast-el[type=\"info\"], toast-el[type=\"info\"] { border-color:#bfdbfe; background:#eff6ff; color:#1e40af; }\nalert-el[type=\"success\"], alert-el[type=\"success\"], toast-el[type=\"success\"], toast-el[type=\"success\"] { border-color:#bbf7d0; background:#f0fdf4; color:#166534; }\nalert-el[type=\"warning\"], alert-el[type=\"warning\"], toast-el[type=\"warning\"], toast-el[type=\"warning\"] { border-color:#fde68a; background:#fffbeb; color:#92400e; }\nalert-el[type=\"error\"], alert-el[type=\"error\"], toast-el[type=\"error\"], toast-el[type=\"error\"] { border-color:#fecaca; background:#fef2f2; color:#991b1b; }\ndropdown-el, dropdown-el, popover-el, popover-el { display:block; width:var(--snap-width,300px); padding:8px; border:1px solid var(--rp-border); border-radius:10px; background:#fff; box-shadow:0 12px 24px rgba(15,23,42,.1); }\ntooltip-el, tooltip-el { display:inline-block; width:fit-content; max-width:240px; padding:6px 8px; border-radius:6px; background:#111827; color:#fff; font-size:12px; }\n.rp-overlay-title { margin:0 0 8px; color:#111827; font-size:14px; font-weight:750; }\nmodal-el, modal-el { display:block; width:min(var(--snap-width,480px), 100%); border:1px solid var(--rp-border); border-radius:12px; background:#fff; box-shadow:0 24px 48px rgba(15,23,42,.18); overflow:hidden; }\ndrawer-el, drawer-el { display:block; width:min(var(--snap-width,360px), 100%); min-height:320px; border:1px solid var(--rp-border); background:#fff; box-shadow:0 18px 40px rgba(15,23,42,.14); }\n.modal-el-head, .drawer-el-head { display:flex; align-items:center; justify-content:space-between; padding:14px 16px; border-bottom:1px solid var(--rp-border); font-weight:750; }\n.modal-el-body, .drawer-el-body { padding:16px; }\n.modal-el-footer { display:flex; justify-content:flex-end; gap:8px; padding:12px 16px; border-top:1px solid var(--rp-border); background:#f9fafb; }\ncard-el, card-el { display:block; width:auto; min-width:220px; padding:14px; border:1px solid var(--rp-border); border-radius:10px; background:#fff; }\n.card-el-image { display:grid; place-items:center; height:120px; margin:-14px -14px 12px; border-radius:10px 10px 0 0; background:#f3f4f6; color:#6b7280; }\n.card-el-title { display:block; color:#111827; font-weight:750; }\n.card-el-subtitle { display:block; margin-top:4px; color:#6b7280; font-size:13px; }\n.card-el-footer { display:block; margin:12px -14px -14px; padding:10px 14px; border-top:1px solid var(--rp-border); background:#f9fafb; }\nstat-card, stat-card { display:grid; gap:6px; width:auto; min-width:0; padding:16px; border:1px solid var(--rp-border); border-radius:10px; background:#fff; }\n.rp-stat-label { color:#6b7280; font-size:12px; font-weight:650; }\n.rp-stat-value { color:#111827; font-size:26px; font-weight:800; }\n.rp-stat-change { font-size:12px; font-weight:700; }\nstat-card[trend=\"up\"] .rp-stat-change, stat-card[trend=\"up\"] .rp-stat-change { color:var(--rp-success); }\nstat-card[trend=\"down\"] .rp-stat-change, stat-card[trend=\"down\"] .rp-stat-change { color:var(--rp-danger); }\ntag-el, tag-el { display:inline-flex; align-items:center; gap:5px; height:24px; padding:0 8px; border-radius:999px; background:#eef2ff; color:#3730a3; font-size:12px; font-weight:650; }\ntag-el[color=\"green\"], tag-el[color=\"green\"] { background:#dcfce7; color:#166534; }\ntag-el[color=\"orange\"], tag-el[color=\"orange\"] { background:#ffedd5; color:#9a3412; }\ntag-el[color=\"red\"], tag-el[color=\"red\"] { background:#fee2e2; color:#991b1b; }\ncheckbox-el, checkbox-el, radio-el, radio-el { display:inline-flex; align-items:center; gap:8px; font-size:13px; }\n.rp-box { display:inline-grid; place-items:center; width:16px; height:16px; border:1px solid var(--rp-border-strong); border-radius:4px; color:#fff; }\ncheckbox-el[state=\"checked\"] .rp-box, checkbox-el[state=\"checked\"] .rp-box, radio-el[state=\"checked\"] .rp-box, radio-el[state=\"checked\"] .rp-box, checkbox-el[state=\"indeterminate\"] .rp-box, checkbox-el[state=\"indeterminate\"] .rp-box { background:var(--rp-primary); border-color:var(--rp-primary); }\ncheckbox-el[state=\"disabled\"], checkbox-el[state=\"disabled\"], radio-el[state=\"disabled\"], radio-el[state=\"disabled\"] { opacity:.5; }\nradio-el .rp-box, radio-el .rp-box { border-radius:999px; }\ntoggle-el, toggle-el { display:inline-flex; align-items:center; gap:8px; font-size:13px; }\n.toggle-el-track { display:flex; align-items:center; width:34px; height:20px; border-radius:999px; background:#d1d5db; padding:2px; }\n.toggle-el-dot { display:block; width:16px; height:16px; border-radius:999px; background:#fff; box-shadow:0 1px 2px rgba(0,0,0,.2); transition:none; }\ntoggle-el[state=\"on\"] .toggle-el-track, toggle-el[state=\"on\"] .toggle-el-track { background:var(--rp-primary); }\ntoggle-el[state=\"on\"] .toggle-el-dot, toggle-el[state=\"on\"] .toggle-el-dot { margin-left:14px; }\ntoggle-el[state=\"disabled\"], toggle-el[state=\"disabled\"] { opacity:.5; }\nform-el, form-el { display:grid; gap:12px; width:fit-content; max-width:100%; }\nform-el[layout=\"horizontal\"], form-el[layout=\"horizontal\"] { grid-template-columns:max-content 1fr; align-items:start; }\nform-item, form-item { display:grid; gap:6px; width:fit-content; max-width:100%; }\nform-item > *, form-item > * { max-width:100%; }\n.form-el-label { color:#374151; font-size:12px; font-weight:700; }\n.form-el-label.required::after { content:\" *\"; color:var(--rp-danger); }\n.form-el-error { color:var(--rp-danger); font-size:12px; }\nupload-el, upload-el { display:grid; justify-items:center; gap:8px; width:280px; padding:18px; border:1px dashed var(--rp-border-strong); border-radius:10px; background:#fff; color:#6b7280; text-align:center; font-size:13px; }\nupload-el[state=\"has-file\"], upload-el[state=\"has-file\"] { justify-items:start; border-style:solid; color:#374151; }\nupload-el[state=\"uploading\"], upload-el[state=\"uploading\"] { border-color:#bfdbfe; background:#eff6ff; color:#1e40af; }\nimage-placeholder, image-placeholder { display:grid; place-items:center; width:var(--snap-width,160px); height:var(--snap-height,100px); background:#f3f4f6; border:1px dashed var(--rp-border-strong); border-radius:8px; color:#6b7280; font-size:12px; }\nprogress-el, progress-el { display:block; width:180px; height:8px; border-radius:999px; background:#e5e7eb; overflow:hidden; }\nprogress-el[kind=\"circle\"], progress-el[kind=\"circle\"], progress-el[style=\"circle\"], progress-el[style=\"circle\"] { display:grid; place-items:center; width:52px; height:52px; border-radius:999px; background:conic-gradient(var(--rp-primary) var(--progress,40%), #e5e7eb 0); font-size:12px; font-weight:750; }\n.progress-el-bar { display:block; height:100%; width:var(--progress,40%); background:var(--rp-primary); }\nprogress-el[status=\"success\"] .progress-el-bar, progress-el[status=\"success\"] .progress-el-bar { background:var(--rp-success); }\nprogress-el[status=\"error\"] .progress-el-bar, progress-el[status=\"error\"] .progress-el-bar { background:var(--rp-danger); }\npagination-el, pagination-el { display:inline-flex; align-items:center; gap:6px; width:fit-content; font-size:13px; }\n.page-el-btn { display:inline-grid; place-items:center; min-width:30px; height:30px; padding:0 8px; border:1px solid var(--rp-border); border-radius:6px; background:#fff; color:#374151; }\n.page-el-btn.active { border-color:var(--rp-primary); background:var(--rp-primary); color:#fff; font-weight:750; }\nsteps-el, steps-el { display:flex; align-items:center; gap:8px; width:fit-content; }\n.rp-step { display:inline-flex; align-items:center; gap:6px; color:#6b7280; font-size:13px; }\n.rp-step-dot { display:inline-grid; place-items:center; width:22px; height:22px; border-radius:999px; border:1px solid var(--rp-border-strong); background:#fff; color:#6b7280; font-size:11px; font-weight:750; }\n.rp-step.active { color:var(--rp-primary); font-weight:750; }\n.rp-step.active .rp-step-dot { border-color:var(--rp-primary); background:var(--rp-primary); color:#fff; }\n.rp-step.done .rp-step-dot { border-color:var(--rp-success); background:var(--rp-success); color:#fff; }\n.rp-step-sep { width:28px; height:1px; background:var(--rp-border); }\nbreadcrumb-el, breadcrumb-el { display:inline-flex; align-items:center; gap:6px; color:#6b7280; font-size:13px; }\n.breadcrumb-el-current { color:#111827; font-weight:650; }\n\n/* --- data input --- */\nslider-el, slider-el { display:inline-flex; align-items:center; gap:10px; width:220px; }\n.slider-el-track { position:relative; flex:1; height:4px; border-radius:999px; background:#e5e7eb; }\n.slider-el-fill { position:absolute; height:100%; border-radius:999px; background:var(--rp-primary); }\n.slider-el-thumb { position:absolute; top:50%; width:16px; height:16px; margin-left:-8px; transform:translateY(-50%); border-radius:50%; background:#fff; border:1px solid var(--rp-border-strong); }\n.slider-el-value { font-size:12px; color:#374151; min-width:24px; }\nrange-el, range-el { display:inline-flex; align-items:center; width:220px; }\nnumber-input, number-input { display:inline-flex; align-items:center; gap:6px; min-height:34px; padding:0 4px 0 11px; border:1px solid var(--rp-border-strong); border-radius:8px; background:#fff; width:120px; }\n.rp-num-value { flex:1; font-size:13px; }\n.rp-num-steppers { display:flex; flex-direction:column; }\n.rp-num-step { display:grid; place-items:center; width:20px; height:15px; color:#6b7280; cursor:pointer; }\nrating-el, rating-el { display:inline-flex; gap:2px; color:#d1d5db; }\n.rp-star.filled { color:#f59e0b; }\npin-input, pin-input { display:inline-flex; gap:8px; }\n.rp-pin-cell { display:grid; place-items:center; width:40px; height:46px; border:1px solid var(--rp-border-strong); border-radius:8px; font-size:18px; font-weight:700; background:#fff; }\n.rp-pin-cell.active { border-color:var(--rp-primary); }\ncolor-swatch, color-swatch { display:inline-flex; align-items:center; gap:8px; padding:4px 10px 4px 4px; border:1px solid var(--rp-border); border-radius:8px; background:#fff; }\n.rp-swatch-chip { width:24px; height:24px; border-radius:6px; border:1px solid rgba(0,0,0,.1); }\n.rp-swatch-hex { font-family:ui-monospace,Menlo,monospace; font-size:12px; color:#374151; }\nautocomplete-el, autocomplete-el { display:inline-block; width:280px; }\n.rp-ac-options { display:grid; gap:1px; margin-top:6px; padding:5px; border:1px solid var(--rp-border); border-radius:8px; background:#fff; }\n.rp-ac-option { padding:7px 8px; border-radius:6px; font-size:13px; color:#374151; }\n.rp-ac-option:first-child { background:#eff6ff; color:#1d4ed8; }\n\n/* --- data display additions --- */\nchip-el, chip-el { display:inline-flex; align-items:center; gap:5px; height:26px; padding:0 9px; border-radius:999px; border:1px solid var(--rp-border); background:#f9fafb; color:#374151; font-size:12px; }\ntree-el, tree-el { display:flex; flex-direction:column; gap:1px; width:fit-content; min-width:240px; }\n.tree-el-row { display:flex; align-items:center; gap:6px; padding:5px 8px; border-radius:6px; color:#374151; font-size:13px; padding-left:calc(8px + var(--tree-level,0) * 18px); }\n.tree-el-row.selected { background:#eff6ff; color:#1d4ed8; font-weight:650; }\n.tree-el-spacer { display:inline-block; width:12px; }\n.tree-el-label { flex:1; }\ntimeline-el, timeline-el { display:flex; flex-direction:column; width:fit-content; min-width:260px; }\ntimeline-item, timeline-item { display:flex; gap:12px; padding-bottom:16px; position:relative; }\ntimeline-item:not(:last-child)::before, timeline-item:not(:last-child)::before { content:''; position:absolute; left:6px; top:16px; bottom:0; width:2px; background:var(--rp-border); }\n.timeline-el-dot { flex:0 0 auto; width:14px; height:14px; margin-top:2px; border-radius:50%; background:#fff; border:2px solid var(--rp-border-strong); z-index:1; }\n.timeline-el-dot.active { border-color:var(--rp-primary); background:var(--rp-primary); }\n.timeline-el-dot.done { border-color:var(--rp-success); background:var(--rp-success); }\n.timeline-el-dot.error { border-color:var(--rp-danger); background:var(--rp-danger); }\n.timeline-el-main { flex:1; }\n.timeline-el-head { display:flex; align-items:baseline; gap:8px; }\n.timeline-el-label { font-weight:650; color:#111827; font-size:13px; }\n.timeline-el-time { font-size:12px; color:#9ca3af; }\n.timeline-el-content { font-size:13px; color:#6b7280; margin-top:2px; }\ncalendar-el, calendar-el { display:inline-block; width:280px; padding:12px; border:1px solid var(--rp-border); border-radius:10px; background:#fff; }\n.rp-cal-head { text-align:center; font-weight:700; font-size:14px; margin-bottom:10px; }\n.rp-cal-grid { display:grid; grid-template-columns:repeat(7,1fr); gap:2px; }\n.rp-cal-dow { display:grid; place-items:center; height:24px; font-size:11px; color:#9ca3af; }\n.rp-cal-cell { display:grid; place-items:center; height:32px; border-radius:6px; font-size:13px; color:#374151; }\n.rp-cal-cell.selected { background:var(--rp-primary); color:#fff; font-weight:700; }\n.rp-cal-cell.muted { color:transparent; }\nkanban-el, kanban-el { display:flex; gap:12px; width:fit-content; align-items:flex-start; }\nkanban-column, kanban-column { display:flex; flex-direction:column; width:200px; padding:10px; border-radius:10px; background:#f3f4f6; }\n.kanban-el-head { display:flex; align-items:center; justify-content:space-between; font-weight:650; font-size:13px; margin-bottom:8px; color:#374151; }\n.kanban-el-count { display:grid; place-items:center; min-width:18px; height:18px; padding:0 5px; border-radius:999px; background:#e5e7eb; font-size:11px; }\n.kanban-el-body { display:flex; flex-direction:column; gap:8px; }\nkanban-card, kanban-card { display:block; padding:10px; border-radius:8px; background:#fff; border:1px solid var(--rp-border); }\n.kanban-card-title { display:block; font-size:13px; color:#111827; }\n.kanban-card-tag { display:inline-block; margin-top:6px; padding:1px 7px; border-radius:999px; background:#eef2ff; color:#3730a3; font-size:11px; }\ncode-block, code-block { display:block; width:fit-content; min-width:320px; border:1px solid var(--rp-border); border-radius:8px; overflow:hidden; background:#0f172a; }\n.rp-code-head { padding:6px 12px; font-family:ui-monospace,Menlo,monospace; font-size:11px; color:#94a3b8; background:#1e293b; }\n.rp-code-body { padding:10px 0; }\n.rp-code-line { display:flex; align-items:center; gap:12px; padding:1px 12px; }\n.rp-code-ln { width:20px; text-align:right; color:#475569; font-family:ui-monospace,Menlo,monospace; font-size:11px; }\n.rp-code-bar { height:8px; border-radius:3px; background:#334155; }\ndiff-el, diff-el { display:block; width:fit-content; min-width:320px; border:1px solid var(--rp-border); border-radius:8px; overflow:hidden; font-family:ui-monospace,Menlo,monospace; }\n.diff-el-line { display:flex; align-items:center; gap:10px; padding:2px 10px; }\n.diff-el-line.add { background:#dcfce7; }\n.diff-el-line.del { background:#fee2e2; }\n.diff-el-sign { width:10px; color:#6b7280; }\n.diff-el-line.add .rp-code-bar { background:#86efac; }\n.diff-el-line.del .rp-code-bar { background:#fca5a5; }\n.diff-el-line.ctx .rp-code-bar { background:#e5e7eb; }\nimage-grid, image-grid { display:grid; grid-template-columns:repeat(var(--grid-cols,3),1fr); gap:8px; width:fit-content; }\n.rp-grid-cell { display:grid; place-items:center; width:80px; height:80px; border-radius:8px; background:#f3f4f6; color:#9ca3af; }\nkey-value, key-value { display:flex; flex-direction:column; width:fit-content; min-width:240px; border:1px solid var(--rp-border); border-radius:8px; overflow:hidden; }\nkv-row, kv-row { display:flex; border-bottom:1px solid var(--rp-border); }\nkv-row:last-child, kv-row:last-child { border-bottom:0; }\n.rp-kv-key { width:120px; padding:8px 12px; background:#f9fafb; color:#6b7280; font-size:13px; }\n.rp-kv-val { flex:1; padding:8px 12px; color:#111827; font-size:13px; }\naccordion-el, accordion-el { display:flex; flex-direction:column; width:fit-content; min-width:320px; border:1px solid var(--rp-border); border-radius:8px; overflow:hidden; }\naccordion-item, accordion-item { display:block; border-bottom:1px solid var(--rp-border); }\naccordion-item:last-child, accordion-item:last-child { border-bottom:0; }\n.accordion-el-head { display:flex; align-items:center; gap:8px; padding:11px 14px; font-weight:650; font-size:13px; color:#111827; }\n.accordion-el-body { padding:0 14px 14px 36px; font-size:13px; color:#6b7280; }\nbanner-el, banner-el { display:flex; align-items:center; gap:10px; width:fit-content; min-width:480px; padding:12px 16px; border-radius:8px; font-size:13px; background:#eff6ff; color:#1e40af; border:1px solid #bfdbfe; }\nbanner-el[type=\"success\"], banner-el[type=\"success\"] { background:#f0fdf4; color:#166534; border-color:#bbf7d0; }\nbanner-el[type=\"warning\"], banner-el[type=\"warning\"] { background:#fffbeb; color:#92400e; border-color:#fde68a; }\nbanner-el[type=\"error\"], banner-el[type=\"error\"] { background:#fef2f2; color:#991b1b; border-color:#fecaca; }\n.banner-el-text { flex:1; }\nskeleton-el, skeleton-el { display:flex; flex-direction:column; gap:8px; width:fit-content; min-width:240px; }\n.rp-skel { border-radius:8px; background:linear-gradient(90deg,#f3f4f6,#e5e7eb,#f3f4f6); }\n.rp-skel-block { height:120px; }\n.rp-skel-avatar { width:40px; height:40px; border-radius:50%; }\n.rp-skel-avatar.sm { width:28px; height:28px; }\n.rp-skel-row { display:flex; align-items:center; gap:10px; }\ncountdown-el, countdown-el { display:inline-flex; align-items:center; gap:5px; padding:3px 9px; border-radius:999px; background:#fef2f2; color:#991b1b; font-size:12px; font-weight:650; font-variant-numeric:tabular-nums; }\nresult-el, result-el { display:grid; justify-items:center; gap:8px; width:fit-content; min-width:280px; padding:32px; text-align:center; }\n.result-el-icon.success { color:var(--rp-success); }\n.result-el-icon.error { color:var(--rp-danger); }\n.result-el-icon.empty { color:#9ca3af; }\n.result-el-title { font-size:16px; font-weight:700; color:#111827; }\n.result-el-desc { font-size:13px; color:#6b7280; }\npermission-gate, permission-gate { display:block; position:relative; width:fit-content; }\n.rp-gate-content { opacity:.4; filter:grayscale(1); pointer-events:none; }\n.rp-gate-overlay { position:absolute; inset:0; display:flex; align-items:center; justify-content:center; gap:6px; background:rgba(255,255,255,.6); color:#6b7280; font-size:12px; font-weight:650; border-radius:8px; }\nquota-bar, quota-bar { display:block; width:fit-content; min-width:240px; }\n.rp-quota-head { display:flex; justify-content:space-between; font-size:12px; color:#374151; margin-bottom:5px; }\n.rp-quota-num.danger { color:var(--rp-danger); font-weight:700; }\n.rp-quota-track { display:block; height:8px; border-radius:999px; background:#e5e7eb; overflow:hidden; }\n.rp-quota-fill { display:block; height:100%; background:var(--rp-primary); }\n.rp-quota-fill.danger { background:var(--rp-danger); }\napi-key, api-key { display:inline-flex; align-items:center; gap:8px; padding:6px 8px 6px 12px; border:1px solid var(--rp-border); border-radius:8px; background:#f9fafb; }\n.rp-apikey-val { font-family:ui-monospace,Menlo,monospace; font-size:12px; color:#374151; }\n.rp-apikey-copy { display:grid; place-items:center; width:26px; height:26px; border-radius:6px; color:#6b7280; }\naudit-row, audit-row { display:flex; align-items:baseline; gap:8px; padding:8px 0; border-bottom:1px solid var(--rp-border); width:fit-content; min-width:320px; font-size:13px; }\n.rp-audit-actor { font-weight:650; color:#111827; }\n.rp-audit-action { flex:1; color:#6b7280; }\n.rp-audit-time { color:#9ca3af; font-size:12px; }\nworkflow-node, workflow-node { display:inline-flex; align-items:center; gap:7px; padding:7px 12px; border:1px solid var(--rp-border); border-radius:8px; background:#fff; font-size:13px; }\n.rp-wf-icon.done { color:var(--rp-success); }\n.rp-wf-icon.active { color:var(--rp-primary); }\n.rp-wf-icon.error { color:var(--rp-danger); }\n.rp-wf-icon.default { color:#9ca3af; }\n\n/* --- navigation & layout additions --- */\nsegmented-el, segmented-el { display:inline-flex; padding:2px; border-radius:8px; background:#f3f4f6; gap:2px; }\n.rp-seg-item { padding:5px 14px; border-radius:6px; font-size:13px; color:#6b7280; }\n.rp-seg-item.active { background:#fff; color:#111827; font-weight:650; }\ncommand-palette, command-palette { display:block; width:520px; border:1px solid var(--rp-border); border-radius:12px; background:#fff; overflow:hidden; }\n.rp-cmdk-input { display:flex; align-items:center; gap:10px; padding:14px 16px; border-bottom:1px solid var(--rp-border); }\n.rp-cmdk-list { padding:6px; }\n.rp-cmdk-item { display:flex; align-items:center; gap:10px; padding:9px 10px; border-radius:8px; font-size:13px; color:#374151; }\n.rp-cmdk-item.active { background:#eff6ff; color:#1d4ed8; }\ncontext-menu, context-menu, menu-el, menu-el { display:inline-flex; flex-direction:column; min-width:180px; padding:5px; border:1px solid var(--rp-border); border-radius:10px; background:#fff; }\n.menu-item, menu-item, menu-item { display:flex; align-items:center; gap:8px; padding:7px 10px; border-radius:6px; font-size:13px; color:#374151; }\n.menu-item.danger, menu-item.danger, menu-item.danger { color:var(--rp-danger); }\n.menu-item.disabled, menu-item.disabled, menu-item.disabled { opacity:.45; }\n.menu-el-label { flex:1; }\n.menu-el-shortcut { color:#9ca3af; font-size:12px; }\ntoc-el, toc-el { display:flex; flex-direction:column; gap:2px; width:fit-content; min-width:160px; border-left:2px solid var(--rp-border); }\n.toc-el-item { padding:4px 12px; font-size:13px; color:#6b7280; border-left:2px solid transparent; margin-left:-2px; }\n.toc-el-item.active { color:var(--rp-primary); border-left-color:var(--rp-primary); font-weight:650; }\nkbd-el, kbd-el { display:inline-flex; align-items:center; gap:3px; }\n.kbd-el-key { display:inline-grid; place-items:center; min-width:20px; height:20px; padding:0 5px; border:1px solid var(--rp-border-strong); border-bottom-width:2px; border-radius:5px; background:#f9fafb; font-size:11px; font-family:var(--rp-font); color:#374151; }\n.kbd-el-plus { color:#9ca3af; font-size:11px; }\nsplit-pane, split-pane { display:grid; grid-template-columns:var(--snap-columns,1fr 1fr); width:fit-content; border:1px solid var(--rp-border); border-radius:8px; overflow:hidden; }\nsplit-pane > *, split-pane > * { padding:14px; }\nsplit-pane > *:not(:last-child), split-pane > *:not(:last-child) { border-right:1px solid var(--rp-border); }\ndivider-el, divider-el { display:block; height:1px; background:var(--rp-border); margin:12px 0; }\ndivider-el.divider-el-v, divider-el.divider-el-v { display:inline-block; width:1px; height:auto; align-self:stretch; margin:0 12px; }\nspacer-el, spacer-el { display:block; height:var(--snap-size,16px); }\n\n/* --- iOS --- */\nios-navbar, ios-navbar { display:block; background:rgba(249,249,249,.94); border-bottom:1px solid #d8d8dc; padding:6px 12px; font-family:-apple-system,BlinkMacSystemFont,sans-serif; }\n.ios-navbar-row { display:grid; grid-template-columns:1fr auto 1fr; align-items:center; min-height:36px; }\n.rp-ios-nav-leading { display:flex; align-items:center; gap:2px; color:#007aff; font-size:15px; }\n.rp-ios-nav-title { text-align:center; font-weight:600; font-size:16px; color:#000; }\n.rp-ios-nav-trailing { text-align:right; color:#007aff; font-size:15px; }\n.rp-ios-nav-large { font-size:30px; font-weight:700; color:#000; padding:2px 2px 6px; }\nios-tabbar, ios-tabbar { display:flex; background:rgba(249,249,249,.94); border-top:1px solid #d8d8dc; padding:6px 0 4px; }\n.rp-ios-tab { flex:1; display:flex; flex-direction:column; align-items:center; gap:2px; color:#8e8e93; font-size:10px; }\n.rp-ios-tab.active { color:#007aff; }\n.rp-ios-tab-label { font-size:10px; }\nios-list, ios-list { display:block; border-radius:10px; background:#fff; overflow:hidden; width:fit-content; min-width:300px; border:1px solid #e5e5ea; font-family:-apple-system,sans-serif; }\n.ios-list-header { padding:6px 16px; font-size:13px; color:#6d6d72; background:#f2f2f7; text-transform:none; }\nios-list-item, ios-list-item { display:flex; align-items:center; gap:10px; padding:11px 16px; border-bottom:1px solid #e5e5ea; font-size:15px; color:#000; }\nios-list-item:last-child, ios-list-item:last-child { border-bottom:0; }\n.rp-ios-li-icon { display:grid; place-items:center; width:28px; height:28px; border-radius:6px; background:#007aff; color:#fff; }\n.rp-ios-li-label { flex:1; }\n.rp-ios-li-detail { color:#8e8e93; }\n.rp-ios-li-chevron { color:#c7c7cc; }\nios-action-sheet, ios-action-sheet { display:flex; flex-direction:column; gap:8px; width:fit-content; min-width:320px; padding:8px; font-family:-apple-system,sans-serif; }\n.rp-ios-as-group { border-radius:14px; overflow:hidden; background:rgba(255,255,255,.82); backdrop-filter:blur(20px); }\n.rp-ios-as-title { padding:14px; text-align:center; font-size:13px; color:#8e8e93; border-bottom:1px solid #d1d1d6; }\n.rp-ios-as-action { padding:16px; text-align:center; font-size:18px; color:#007aff; border-bottom:1px solid #d1d1d6; }\n.rp-ios-as-action:last-child { border-bottom:0; }\n.rp-ios-as-action.destructive { color:#ff3b30; }\n.rp-ios-as-action.cancel { font-weight:600; }\nios-alert, ios-alert { display:block; width:270px; border-radius:14px; overflow:hidden; background:rgba(255,255,255,.92); backdrop-filter:blur(20px); font-family:-apple-system,sans-serif; }\n.ios-alert-body { padding:18px 16px 14px; text-align:center; }\n.ios-alert-title { font-size:17px; font-weight:600; color:#000; }\n.ios-alert-msg { margin-top:3px; font-size:13px; color:#000; }\n.ios-alert-actions { display:flex; border-top:1px solid #d1d1d6; }\n.ios-alert-btn { flex:1; padding:11px; text-align:center; font-size:17px; color:#007aff; }\n.ios-alert-btn.primary { font-weight:600; }\n.ios-alert-btn:not(:last-child) { border-right:1px solid #d1d1d6; }\nios-switch, ios-switch { display:inline-flex; align-items:center; gap:8px; font-family:-apple-system,sans-serif; font-size:15px; }\n.ios-switch-track { width:51px; height:31px; border-radius:999px; background:#34c759; padding:2px; }\n.ios-switch-dot { display:block; width:27px; height:27px; border-radius:50%; background:#fff; margin-left:20px; }\nios-segmented, ios-segmented { display:inline-flex; padding:2px; border-radius:9px; background:#767680; background:rgba(118,118,128,.12); gap:2px; font-family:-apple-system,sans-serif; }\n.rp-ios-seg-item { padding:6px 16px; border-radius:7px; font-size:13px; color:#000; }\n.rp-ios-seg-item.active { background:#fff; font-weight:600; }\nios-button, ios-button { display:inline-grid; place-items:center; min-height:34px; padding:0 16px; border-radius:8px; background:#007aff; color:#fff; font-size:15px; font-weight:600; font-family:-apple-system,sans-serif; }\nios-button[variant=\"tinted\"], ios-button[variant=\"tinted\"] { background:rgba(0,122,255,.15); color:#007aff; }\nios-button[variant=\"plain\"], ios-button[variant=\"plain\"] { background:transparent; color:#007aff; }\nios-search, ios-search { display:inline-flex; align-items:center; gap:6px; width:280px; height:36px; padding:0 10px; border-radius:10px; background:rgba(118,118,128,.12); color:#8e8e93; font-size:15px; font-family:-apple-system,sans-serif; }\nios-stepper, ios-stepper { display:inline-flex; align-items:center; border-radius:8px; background:rgba(118,118,128,.12); }\n.rp-ios-step { display:grid; place-items:center; width:46px; height:32px; color:#000; }\n.rp-ios-step-div { width:1px; height:18px; background:rgba(0,0,0,.15); }\n\n/* --- macOS --- */\nmacos-window, macos-window { display:block; width:fit-content; min-width:480px; border-radius:10px; overflow:hidden; border:1px solid #d1d1d6; background:#fff; font-family:-apple-system,sans-serif; }\n.rp-mac-titlebar { display:flex; align-items:center; gap:10px; height:38px; padding:0 14px; background:#ececec; border-bottom:1px solid #d1d1d6; }\n.rp-mac-lights { display:flex; gap:8px; }\n.rp-mac-light { width:12px; height:12px; border-radius:50%; }\n.rp-mac-light.close { background:#ff5f57; }\n.rp-mac-light.min { background:#febc2e; }\n.rp-mac-light.max { background:#28c840; }\n.rp-mac-title { flex:1; text-align:center; font-size:13px; font-weight:600; color:#3c3c43; }\n.rp-mac-window-body { padding:0; }\nmacos-toolbar, macos-toolbar { display:flex; align-items:center; gap:10px; padding:8px 14px; background:#f6f6f6; border-bottom:1px solid #d1d1d6; }\nmacos-menubar, macos-menubar { display:flex; align-items:center; gap:18px; height:26px; padding:0 14px; background:rgba(246,246,246,.9); border-bottom:1px solid #d1d1d6; font-size:13px; font-family:-apple-system,sans-serif; }\n.rp-mac-menubar-apple { color:#000; }\n.rp-mac-menu-title { color:#000; }\n.rp-mac-menu-title.active { background:#007aff; color:#fff; padding:1px 7px; border-radius:4px; }\nmacos-sidebar, macos-sidebar { display:flex; flex-direction:column; gap:1px; width:220px; padding:8px; background:rgba(246,246,246,.85); font-family:-apple-system,sans-serif; }\nmacos-source-item, macos-source-item { display:flex; align-items:center; gap:7px; padding:5px 8px; border-radius:6px; font-size:13px; color:#3c3c43; }\nmacos-source-item.selected, macos-source-item.selected { background:#007aff; color:#fff; }\n.rp-mac-source-group { padding:8px 8px 3px; font-size:11px; font-weight:700; color:#8e8e93; text-transform:uppercase; }\nmacos-segmented, macos-segmented { display:inline-flex; border:1px solid #c4c4c7; border-radius:6px; overflow:hidden; font-family:-apple-system,sans-serif; }\n.rp-mac-seg-item { padding:4px 14px; font-size:13px; color:#000; background:#fff; border-right:1px solid #c4c4c7; }\n.rp-mac-seg-item:last-child { border-right:0; }\n.rp-mac-seg-item.active { background:#007aff; color:#fff; }\nmacos-popover, macos-popover { display:inline-block; position:relative; }\n.rp-mac-pop-arrow { display:block; width:16px; height:8px; margin:0 auto -1px; clip-path:polygon(50% 0,100% 100%,0 100%); background:#fff; border:1px solid #d1d1d6; }\n.rp-mac-pop-body { min-width:220px; padding:12px; border-radius:10px; border:1px solid #d1d1d6; background:#fff; }\n.rp-mac-pop-title { font-weight:600; font-size:13px; margin-bottom:8px; }\nmacos-sheet, macos-sheet { display:block; width:fit-content; min-width:420px; border-radius:10px; background:#fff; box-shadow:0 24px 60px rgba(0,0,0,.3); padding:18px; font-family:-apple-system,sans-serif; }\n.rp-mac-sheet-title { font-size:15px; font-weight:700; margin-bottom:12px; }\n.rp-mac-sheet-actions { display:flex; justify-content:flex-end; gap:8px; margin-top:16px; }\nmacos-stepper, macos-stepper { display:inline-flex; flex-direction:column; border:1px solid #c4c4c7; border-radius:5px; overflow:hidden; }\n.rp-mac-step { display:grid; place-items:center; width:22px; height:13px; background:#fff; color:#3c3c43; }\n.rp-mac-step.up { border-bottom:1px solid #c4c4c7; }\nmacos-disclosure, macos-disclosure { display:block; font-family:-apple-system,sans-serif; }\n.rp-mac-disc-head { display:flex; align-items:center; gap:5px; font-size:13px; font-weight:600; color:#000; }\n.rp-mac-disc-tri { display:inline-flex; transition:none; }\n.rp-mac-disc-tri.open { transform:rotate(90deg); }\n.rp-mac-disc-body { padding:8px 0 0 18px; font-size:13px; color:#3c3c43; }\nmacos-table, macos-table { display:flex; flex-direction:column; width:fit-content; min-width:360px; border:1px solid #d1d1d6; border-radius:6px; overflow:hidden; font-family:-apple-system,sans-serif; }\n.rp-mac-tr { display:flex; }\n.rp-mac-tr.rp-mac-th { background:#f6f6f6; border-bottom:1px solid #d1d1d6; font-size:12px; font-weight:600; color:#3c3c43; }\n.rp-mac-tr.alt { background:#f5f8ff; }\n.rp-mac-td { flex:1; display:flex; align-items:center; gap:6px; padding:6px 12px; font-size:13px; color:#3c3c43; }\n.rp-mac-cell-bar { height:8px; border-radius:3px; background:#e5e7eb; }\n\n/* --- agent / conversational UI (Codex-style: single column, de-bubbled) --- */\nchat-el, chat-el { display:flex; flex-direction:column; gap:24px; width:fit-content; min-width:520px; max-width:680px; }\nuser-message, user-message, assistant-message, assistant-message { display:block; }\n.rp-msg-role { font-size:12px; font-weight:700; color:#9ca3af; letter-spacing:.02em; margin:0 0 6px; }\n.rp-msg-content { display:flex; flex-direction:column; gap:12px; font-size:14px; line-height:1.7; color:#1f2937; }\nuser-message .rp-msg-content, user-message .rp-msg-content { color:#111827; }\nsystem-message, system-message { display:flex; justify-content:center; }\n.rp-sysmsg-line { padding:3px 12px; border-radius:999px; background:#f3f4f6; color:#6b7280; font-size:12px; }\ntool-call, tool-call { display:block; width:fit-content; min-width:280px; max-width:600px; }\n.rp-tool-head { display:flex; align-items:center; gap:8px; font-size:13px; color:#6b7280; }\n.rp-tool-glyph { display:inline-flex; }\n.rp-tool-glyph.done { color:var(--rp-success); }\n.rp-tool-glyph.running { color:var(--rp-primary); }\n.rp-tool-glyph.error { color:var(--rp-danger); }\n.rp-tool-name { font-family:ui-monospace,Menlo,monospace; font-weight:650; color:#374151; }\n.rp-tool-args-inline { font-family:ui-monospace,Menlo,monospace; color:#9ca3af; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }\n.rp-tool-body { margin-top:8px; padding-left:21px; }\nagent-output, agent-output { display:block; width:fit-content; min-width:280px; max-width:600px; border:1px solid var(--rp-border); border-radius:8px; overflow:hidden; background:#f8fafc; }\n.rp-output-head { padding:6px 12px; font-size:12px; color:#6b7280; border-bottom:1px solid var(--rp-border); font-family:ui-monospace,Menlo,monospace; }\n.rp-output-body { padding:12px; font-family:ui-monospace,Menlo,monospace; font-size:12.5px; line-height:1.6; color:#334155; white-space:pre-wrap; }\nreasoning-el, reasoning-el { display:block; width:fit-content; min-width:280px; max-width:600px; }\n.rp-reason-head { display:flex; align-items:center; gap:6px; font-size:13px; color:#9ca3af; }\n.rp-reason-body { margin-top:8px; padding-left:19px; border-left:2px solid var(--rp-border); font-size:13px; line-height:1.7; color:#6b7280; }\nmessage-actions, message-actions { display:inline-flex; gap:2px; }\n.rp-msg-action { display:grid; place-items:center; width:28px; height:28px; border-radius:6px; color:#9ca3af; cursor:pointer; }\n.rp-msg-action:hover { background:#f3f4f6; color:#374151; }\nsuggestions-el, suggestions-el { display:flex; flex-wrap:wrap; gap:8px; }\n.rp-suggestion { padding:7px 13px; border:1px solid var(--rp-border); border-radius:8px; font-size:13px; color:#374151; background:#fff; cursor:pointer; }\n.rp-suggestion:hover { border-color:var(--rp-border-strong); background:#f9fafb; }\ntyping-el, typing-el { display:flex; align-items:center; }\n.typing-el-dots { display:inline-flex; gap:4px; }\n.typing-el-dots > span { width:7px; height:7px; border-radius:50%; background:#c7c7cc; }\ncomposer-el, composer-el { display:flex; align-items:center; gap:10px; width:fit-content; min-width:520px; max-width:680px; padding:9px 9px 9px 14px; border:1px solid var(--rp-border-strong); border-radius:14px; background:#fff; }\n.composer-el-attach { display:inline-flex; color:#9ca3af; }\n.composer-el-input { flex:1; font-size:14px; }\n.composer-el-send { display:grid; place-items:center; width:32px; height:32px; border-radius:8px; background:#111827; color:#fff; }\n.composer-el-send.streaming { background:var(--rp-danger); }\ncitation-el, citation-el { display:inline-flex; align-items:center; gap:6px; max-width:280px; padding:3px 9px 3px 3px; border:1px solid var(--rp-border); border-radius:6px; background:#f9fafb; font-size:12px; color:#374151; }\n.rp-cite-idx { display:grid; place-items:center; width:17px; height:17px; border-radius:4px; background:#e5e7eb; color:#374151; font-size:11px; font-weight:700; }\n.rp-cite-title { overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }\ntoken-usage, token-usage { display:inline-flex; align-items:center; gap:7px; font-size:12px; color:#9ca3af; }\n.rp-token-track { width:90px; height:5px; border-radius:999px; background:#e5e7eb; overflow:hidden; }\n.rp-token-fill { display:block; height:100%; background:#9ca3af; }\n`;\n\nexport function injectStyle() {\n if (document.getElementById(RPUI_STYLE_ID)) return;\n const el = document.createElement(\"style\");\n el.id = RPUI_STYLE_ID;\n el.textContent = style;\n document.head.appendChild(el);\n}\n","import { injectStyle } from '../core/style';\nimport { attr, escapeHtml } from '../core/dom';\n\nexport class RpAnnotation extends HTMLElement {\n private ro?: ResizeObserver;\n private frame = 0;\n\n connectedCallback() {\n injectStyle();\n if (this.dataset.rpReady) {\n this.setupSlicePins();\n return;\n }\n this.dataset.rpReady = 'true';\n const existing = Array.from(this.childNodes);\n const depth = this.annotationDepth();\n const id = attr(this, 'id');\n const label = attr(this, 'label', id ? `Annotation ${id}` : 'Annotation');\n\n // Assign section path: top-level uses id, nested uses parent-path + sibling index\n let sectionPath: string;\n if (id) {\n sectionPath = id;\n } else {\n const parentSection = (this.closest('[data-rp-section]') as HTMLElement | null)?.dataset.rpSection ?? '';\n const siblings = this.parentElement ? Array.from(this.parentElement.children).filter(\n el => el.tagName.toLowerCase() === 'annotation-el' || el.tagName.toLowerCase() === 'annotation-el'\n ) : [];\n const idx = siblings.indexOf(this) + 1;\n sectionPath = parentSection ? `${parentSection}-${idx}` : String(idx);\n }\n this.dataset.rpSection = sectionPath;\n\n const marker = document.createElement('span');\n const kind = id ? 'drop' : depth <= 1 ? 'circle' : 'triangle';\n marker.className = `annotation-el-marker ${kind}`;\n // Show the local index (last segment of the section path) inside every marker,\n // so a UI slice annotated one level deeper can be referenced unambiguously.\n const localIndex = id || sectionPath.split('-').pop() || '';\n marker.innerHTML = `<span>${escapeHtml(localIndex)}</span>`;\n\n const head = document.createElement('div');\n head.className = 'annotation-el-head';\n head.append(marker);\n\n const title = document.createElement('span');\n title.className = 'annotation-el-title';\n title.textContent = label;\n title.addEventListener('click', () => {\n const url = new URL(location.href);\n url.searchParams.set('section', sectionPath);\n history.pushState(null, '', url);\n window.dispatchEvent(new CustomEvent('rp-section', { detail: sectionPath }));\n });\n head.append(title);\n\n const body = document.createElement('div');\n body.className = 'annotation-el-body';\n existing.forEach(n => body.appendChild(n));\n this.append(head, body);\n\n this.setupSlicePins();\n }\n\n disconnectedCallback() { this.ro?.disconnect(); if (this.frame) cancelAnimationFrame(this.frame); }\n\n // A UI slice inside this annotation may carry data-pin markers on sub-regions.\n // Render pins on those slices so their numbers connect to the deeper annotations\n // that explain them — mirroring how main-view pins top-level regions.\n private setupSlicePins() {\n const body = this.querySelector<HTMLElement>(':scope > .annotation-el-body');\n if (!body || !body.querySelector('[data-pin]')) return;\n this.ro?.disconnect();\n this.scheduleSlicePins(body);\n this.ro = new ResizeObserver(() => this.scheduleSlicePins(body));\n this.ro.observe(this);\n }\n\n private scheduleSlicePins(body: HTMLElement) {\n if (this.frame) return;\n this.frame = requestAnimationFrame(() => { this.frame = 0; this.renderSlicePins(body); });\n }\n\n private renderSlicePins(body: HTMLElement) {\n body.querySelectorAll(':scope > .rp-pin').forEach(p => p.remove());\n const bodyRect = body.getBoundingClientRect();\n body.querySelectorAll<HTMLElement>('[data-pin]').forEach(target => {\n // Only own data-pin elements whose nearest annotation ancestor is this one.\n if (target.closest('annotation-el, annotation-el') !== this) return;\n const pinId = target.dataset.pin;\n if (!pinId) return;\n const r = target.getBoundingClientRect();\n const pin = document.createElement('span');\n pin.className = 'rp-pin rp-pin-slice';\n pin.style.left = `${r.left - bodyRect.left}px`;\n pin.style.top = `${r.top - bodyRect.top}px`;\n pin.innerHTML = `<span>${escapeHtml(pinId)}</span>`;\n body.appendChild(pin);\n });\n }\n\n annotationDepth() {\n let d = 0; let p = this.parentElement;\n while (p) {\n if (p.tagName.toLowerCase() === 'annotation-el' || p.tagName.toLowerCase() === 'annotation-el') d++;\n p = p.parentElement;\n }\n return d;\n }\n}\n\nexport class RpEnum extends HTMLElement { connectedCallback() { injectStyle(); } }\n\nexport class RpEnumItem extends HTMLElement {\n connectedCallback() {\n injectStyle();\n if (this.dataset.rpReady) return;\n this.dataset.rpReady = 'true';\n const children = Array.from(this.childNodes);\n\n // Compute 1-based index among same-tag siblings\n const parent = this.parentElement;\n const siblings = parent ? Array.from(parent.children).filter(\n el => el.tagName.toLowerCase() === 'enum-item' || el.tagName.toLowerCase() === 'enum-item'\n ) : [];\n const idx = siblings.indexOf(this) + 1;\n\n const labelEl = document.createElement('span');\n labelEl.className = 'enum-el-label';\n\n const idxBadge = document.createElement('span');\n idxBadge.className = 'enum-el-index';\n idxBadge.textContent = String(idx);\n\n const labelText = document.createElement('span');\n labelText.className = 'enum-el-label-text';\n labelText.textContent = attr(this, 'label', 'State');\n\n const description = attr(this, 'description');\n if (description) {\n const desc = document.createElement('span');\n desc.className = 'enum-el-description';\n desc.textContent = description;\n labelText.appendChild(desc);\n }\n\n labelEl.append(idxBadge, labelText);\n\n const content = document.createElement('div');\n content.className = 'enum-el-content';\n children.forEach(n => content.appendChild(n));\n this.append(labelEl, content);\n }\n}\n\n\n","import { injectStyle } from '../core/style';\nimport { attr, escapeHtml, isViewportNode, resolveHeight, resolveWidth, usesAutoHeight } from '../core/dom';\n\nexport class RpMainView extends HTMLElement {\n private ro?: ResizeObserver;\n private frame = 0;\n\n connectedCallback() {\n injectStyle();\n if (!this.dataset.rpReady) {\n this.dataset.rpReady = 'true';\n const width = resolveWidth(this, 1440);\n const height = resolveHeight(this, 900);\n const autoHeight = usesAutoHeight(this);\n const scale = Number(attr(this, 'scale', '0.7')) || 0.7;\n const children = Array.from(this.childNodes);\n const shell = document.createElement('div');\n shell.className = 'rp-main-shell';\n shell.style.width = `${width * scale}px`;\n if (!autoHeight) shell.style.height = `${height * scale}px`;\n const stage = document.createElement('div');\n stage.className = 'rp-main-stage';\n stage.style.width = `${width}px`;\n stage.style.minHeight = autoHeight ? '0' : `${height}px`;\n stage.style.height = autoHeight ? 'auto' : `${height}px`;\n stage.style.transform = `scale(${scale})`;\n const clip = document.createElement('div');\n clip.className = 'rp-main-stage-clip';\n children.forEach(n => {\n if (isViewportNode(n)) {\n if (!n.hasAttribute('width') && !n.hasAttribute('device')) n.style.setProperty('--snap-width', `${width}px`);\n if (!n.hasAttribute('height')) n.style.setProperty('--snap-height', autoHeight ? 'auto' : `${height}px`);\n }\n stage.appendChild(n);\n });\n clip.appendChild(stage);\n shell.appendChild(clip);\n this.appendChild(shell);\n }\n this.scheduleRender();\n this.ro = new ResizeObserver(() => this.scheduleRender());\n this.ro.observe(this);\n const stage = this.querySelector<HTMLElement>('.rp-main-stage');\n if (stage) this.ro.observe(stage);\n }\n\n disconnectedCallback() {\n this.ro?.disconnect();\n if (this.frame) { cancelAnimationFrame(this.frame); this.frame = 0; }\n }\n\n scheduleRender() {\n if (this.frame) return;\n this.frame = requestAnimationFrame(() => { this.frame = 0; this.syncAutoHeight(); this.renderPins(); });\n }\n\n syncAutoHeight() {\n if (!usesAutoHeight(this)) return;\n const shell = this.querySelector<HTMLElement>('.rp-main-shell');\n const stage = this.querySelector<HTMLElement>('.rp-main-stage');\n if (!shell || !stage) return;\n const scale = Number(attr(this, 'scale', '0.7')) || 0.7;\n const next = `${Math.ceil(stage.scrollHeight * scale)}px`;\n if (shell.style.height !== next) shell.style.height = next;\n }\n\n renderPins() {\n const shell = this.querySelector<HTMLElement>('.rp-main-shell');\n const stage = this.querySelector<HTMLElement>('.rp-main-stage');\n if (!shell || !stage) return;\n shell.querySelectorAll('.rp-pin').forEach(p => p.remove());\n const shellRect = shell.getBoundingClientRect();\n stage.querySelectorAll<HTMLElement>('[data-pin]').forEach(target => {\n const id = target.dataset.pin;\n if (!id) return;\n const r = target.getBoundingClientRect();\n const pin = document.createElement('span');\n pin.className = 'rp-pin';\n pin.style.left = `${r.left - shellRect.left}px`;\n pin.style.top = `${r.top - shellRect.top}px`;\n pin.innerHTML = `<span>${escapeHtml(id)}</span>`;\n pin.addEventListener('click', () => {\n const url = new URL(location.href);\n url.searchParams.set('section', id);\n history.pushState(null, '', url);\n window.dispatchEvent(new CustomEvent('rp-section', { detail: id }));\n });\n shell.appendChild(pin);\n });\n }\n}\n\n","import { injectStyle } from '../core/style';\nimport { attr, escapeHtml, isTopAnnotation } from '../core/dom';\n\nfunction activateSection(path: string, pane: Element | null) {\n document.querySelectorAll('.rp-section-focus').forEach(el => el.classList.remove('rp-section-focus'));\n const target = document.querySelector(`[data-rp-section=\"${CSS.escape(path)}\"]`);\n if (!target) return;\n target.classList.add('rp-section-focus');\n if (pane) {\n const paneEl = pane as HTMLElement;\n const targetRect = (target as HTMLElement).getBoundingClientRect();\n const paneRect = paneEl.getBoundingClientRect();\n paneEl.scrollTo({ top: paneEl.scrollTop + targetRect.top - paneRect.top - 20, behavior: 'smooth' });\n }\n setTimeout(() => target.classList.remove('rp-section-focus'), 3000);\n}\n\nexport class RpPage extends HTMLElement {\n connectedCallback() {\n injectStyle();\n if (this.dataset.rpReady) return;\n this.dataset.rpReady = 'true';\n const pageTitle = attr(this,'title','Untitled');\n const route = attr(this,'route','/');\n const description = attr(this,'description','');\n this.removeAttribute('title');\n const existing = Array.from(this.childNodes);\n\n const header = document.createElement('div');\n header.className = 'page-el-header';\n header.innerHTML = `<div class=\"page-el-title-row\"><h1 class=\"page-el-title\">${escapeHtml(pageTitle)}</h1><span class=\"page-el-route\">${escapeHtml(route)}</span></div><p class=\"page-el-description\">${escapeHtml(description)}</p>`;\n\n const body = document.createElement('div');\n body.className = 'page-el-body';\n const main = document.createElement('main');\n main.className = 'page-el-main';\n const pane = document.createElement('aside');\n pane.className = 'annotation-el-pane';\n pane.setAttribute('aria-label', 'Annotations');\n const paneInner = document.createElement('div');\n paneInner.className = 'annotation-el-pane-inner';\n\n existing.forEach(n => (isTopAnnotation(n) ? paneInner : body).appendChild(n));\n pane.appendChild(paneInner);\n main.append(header, body);\n\n const shell = document.createElement('div');\n shell.className = 'page-el-shell';\n shell.append(main, pane);\n this.appendChild(shell);\n\n // Bind header max-width to main view rendered width so description never drives page width\n requestAnimationFrame(() => {\n const mv = body.querySelector<HTMLElement>('main-view, main-view');\n if (mv) header.style.maxWidth = `${mv.offsetWidth}px`;\n });\n\n // Section routing: handle URL and clicks\n const go = () => {\n const sec = new URLSearchParams(location.search).get('section');\n if (sec) activateSection(sec, pane);\n };\n window.addEventListener('popstate', go);\n window.addEventListener('rp-section', (e) => activateSection((e as CustomEvent).detail, pane));\n requestAnimationFrame(go);\n }\n}\n\n\n","import { injectStyle } from '../core/style';\nimport { attr, hasExplicitNumericHeight, resolveHeight, resolveWidth, usesAutoHeight } from '../core/dom';\n\nexport class GenericElement extends HTMLElement { connectedCallback() { injectStyle(); } }\nexport class ViewportElement extends HTMLElement {\n connectedCallback() {\n injectStyle();\n if (this.hasAttribute('width') || this.hasAttribute('device')) this.style.setProperty('--snap-width', `${resolveWidth(this,1440)}px`);\n if (hasExplicitNumericHeight(this)) this.style.setProperty('--snap-height', `${resolveHeight(this,900)}px`);\n else if (usesAutoHeight(this)) this.style.setProperty('--snap-height', 'auto');\n }\n}\nexport class LayoutElement extends HTMLElement { connectedCallback() { injectStyle(); this.style.setProperty('--snap-columns', attr(this,'columns','1fr')); this.style.setProperty('--snap-rows', attr(this,'rows','auto')); if (this.hasAttribute('gap')) this.style.setProperty('--snap-gap', `${attr(this,'gap','0')}px`); } }\nexport class PanelElement extends HTMLElement { connectedCallback() { injectStyle(); this.style.setProperty('--snap-padding', `${attr(this,'padding','16')}px`); } }\nexport class NavbarElement extends HTMLElement { connectedCallback() { injectStyle(); this.style.setProperty('--snap-height', `${attr(this,'height','64')}px`); } }\nexport class SidebarElement extends HTMLElement { connectedCallback() { injectStyle(); this.style.setProperty('--snap-width', `${attr(this,'width','260')}px`); } }\nexport class LogoElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.hasAttribute('size')) this.style.setProperty('--snap-size', `${attr(this,'size','82')}px`); if (!this.innerHTML.trim()) this.textContent = attr(this,'label','LOGO'); } }\nexport class SplitPaneElement extends HTMLElement { connectedCallback() { injectStyle(); this.style.setProperty('--snap-columns', attr(this,'columns','1fr 1fr')); } }\nexport class DividerElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.hasAttribute('vertical')) this.classList.add('divider-el-v'); } }\nexport class SpacerElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.hasAttribute('size')) this.style.setProperty('--snap-size', `${attr(this,'size','16')}px`); } }\n\n","export type IconName = 'search' | 'bell' | 'user' | 'inbox' | 'archive' | 'at-sign' | 'check' | 'trash-2' | 'x' | 'loader' | 'image' | 'circle-alert' | 'chevron-down' | 'layout-dashboard' | 'message-square' | 'settings' | 'plus' | 'file' | 'users' | 'shield' | 'calendar' | 'upload' | 'empty' | 'chevron-left' | 'chevron-right' | 'minus' | 'alert-triangle' | 'info' | 'circle-check' | 'circle' | 'chevron-up' | 'star' | 'copy' | 'lock' | 'circle-x' | 'more-horizontal' | 'more-vertical' | 'grip' | 'folder' | 'file-code' | 'git-branch' | 'clock' | 'key' | 'zap' | 'home' | 'heart' | 'bookmark' | 'download' | 'edit' | 'eye' | 'filter' | 'refresh' | 'sparkles' | 'bot' | 'wrench' | 'terminal' | 'thumbs-up' | 'thumbs-down' | 'send' | 'stop' | 'paperclip' | 'globe';\n\nconst iconPaths: Record<IconName, string> = {\n search: '<circle cx=\"11\" cy=\"11\" r=\"8\"/><path d=\"m21 21-4.3-4.3\"/>',\n bell: '<path d=\"M10.3 21a1.9 1.9 0 0 0 3.4 0\"/><path d=\"M18 8a6 6 0 0 0-12 0c0 7-3 7-3 9h18c0-2-3-2-3-9\"/>',\n user: '<path d=\"M20 21a8 8 0 0 0-16 0\"/><circle cx=\"12\" cy=\"7\" r=\"4\"/>',\n inbox: '<polyline points=\"22 12 16 12 14 15 10 15 8 12 2 12\"/><path d=\"M5.5 5h13L22 12v7a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2v-7z\"/>',\n archive: '<rect width=\"20\" height=\"5\" x=\"2\" y=\"3\" rx=\"1\"/><path d=\"M4 8v11a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8\"/><path d=\"M10 12h4\"/>',\n 'at-sign': '<circle cx=\"12\" cy=\"12\" r=\"4\"/><path d=\"M16 8v5a3 3 0 0 0 6 0v-1a10 10 0 1 0-4 8\"/>',\n check: '<path d=\"M20 6 9 17l-5-5\"/>',\n 'trash-2': '<path d=\"M3 6h18\"/><path d=\"M8 6V4h8v2\"/><path d=\"M19 6l-1 14H6L5 6\"/><path d=\"M10 11v6\"/><path d=\"M14 11v6\"/>',\n x: '<path d=\"M18 6 6 18\"/><path d=\"m6 6 12 12\"/>',\n loader: '<path d=\"M21 12a9 9 0 1 1-6.2-8.6\"/>',\n image: '<rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\"/><circle cx=\"9\" cy=\"9\" r=\"2\"/><path d=\"m21 15-3.1-3.1a2 2 0 0 0-2.8 0L6 21\"/>',\n 'circle-alert': '<circle cx=\"12\" cy=\"12\" r=\"10\"/><path d=\"M12 8v4\"/><path d=\"M12 16h.01\"/>',\n 'chevron-down': '<path d=\"m6 9 6 6 6-6\"/>',\n 'layout-dashboard': '<rect width=\"7\" height=\"9\" x=\"3\" y=\"3\" rx=\"1\"/><rect width=\"7\" height=\"5\" x=\"14\" y=\"3\" rx=\"1\"/><rect width=\"7\" height=\"9\" x=\"14\" y=\"12\" rx=\"1\"/><rect width=\"7\" height=\"5\" x=\"3\" y=\"16\" rx=\"1\"/>',\n 'message-square': '<path d=\"M21 15a4 4 0 0 1-4 4H7l-4 4V7a4 4 0 0 1 4-4h10a4 4 0 0 1 4 4z\"/>',\n settings: '<path d=\"M12.2 2h-.4l-1 3a7 7 0 0 0-1.6.7l-3-1.4-.3.3-2 3 .2.4 2.6 2a7 7 0 0 0 0 2l-2.6 2-.2.4 2 3 .3.3 3-1.4a7 7 0 0 0 1.6.7l1 3h.4l1-3a7 7 0 0 0 1.6-.7l3 1.4.3-.3 2-3-.2-.4-2.6-2a7 7 0 0 0 0-2l2.6-2 .2-.4-2-3-.3-.3-3 1.4a7 7 0 0 0-1.6-.7z\"/><circle cx=\"12\" cy=\"12\" r=\"3\"/>',\n plus: '<path d=\"M5 12h14\"/><path d=\"M12 5v14\"/>',\n file: '<path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\"/><path d=\"M14 2v6h6\"/>',\n users: '<path d=\"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2\"/><circle cx=\"9\" cy=\"7\" r=\"4\"/><path d=\"M22 21v-2a4 4 0 0 0-3-3.9\"/><path d=\"M16 3.1a4 4 0 0 1 0 7.8\"/>',\n shield: '<path d=\"M20 13c0 5-3.5 7.5-8 9-4.5-1.5-8-4-8-9V5l8-3 8 3z\"/>',\n calendar: '<path d=\"M8 2v4\"/><path d=\"M16 2v4\"/><rect width=\"18\" height=\"18\" x=\"3\" y=\"4\" rx=\"2\"/><path d=\"M3 10h18\"/>',\n upload: '<path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\"/><path d=\"m17 8-5-5-5 5\"/><path d=\"M12 3v12\"/>',\n empty: '<path d=\"M4 7h16\"/><path d=\"M5 7l1.5 13h11L19 7\"/><path d=\"M9 11h6\"/>',\n 'chevron-left': '<path d=\"m15 18-6-6 6-6\"/>',\n 'chevron-right': '<path d=\"m9 18 6-6-6-6\"/>',\n minus: '<path d=\"M5 12h14\"/>',\n 'alert-triangle': '<path d=\"m21.7 18-8-14a2 2 0 0 0-3.4 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.7-3Z\"/><path d=\"M12 9v4\"/><path d=\"M12 17h.01\"/>',\n info: '<circle cx=\"12\" cy=\"12\" r=\"10\"/><path d=\"M12 16v-4\"/><path d=\"M12 8h.01\"/>',\n 'circle-check': '<circle cx=\"12\" cy=\"12\" r=\"10\"/><path d=\"m9 12 2 2 4-4\"/>',\n circle: '<circle cx=\"12\" cy=\"12\" r=\"10\"/>',\n 'chevron-up': '<path d=\"m18 15-6-6-6 6\"/>',\n star: '<path d=\"M12 2l3 6.3 6.9 1-5 4.9 1.2 6.8-6.1-3.2-6.1 3.2 1.2-6.8-5-4.9 6.9-1z\"/>',\n copy: '<rect width=\"13\" height=\"13\" x=\"9\" y=\"9\" rx=\"2\"/><path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\"/>',\n lock: '<rect width=\"18\" height=\"11\" x=\"3\" y=\"11\" rx=\"2\"/><path d=\"M7 11V7a5 5 0 0 1 10 0v4\"/>',\n 'circle-x': '<circle cx=\"12\" cy=\"12\" r=\"10\"/><path d=\"m15 9-6 6\"/><path d=\"m9 9 6 6\"/>',\n 'more-horizontal': '<circle cx=\"12\" cy=\"12\" r=\"1\"/><circle cx=\"19\" cy=\"12\" r=\"1\"/><circle cx=\"5\" cy=\"12\" r=\"1\"/>',\n 'more-vertical': '<circle cx=\"12\" cy=\"12\" r=\"1\"/><circle cx=\"12\" cy=\"5\" r=\"1\"/><circle cx=\"12\" cy=\"19\" r=\"1\"/>',\n grip: '<circle cx=\"9\" cy=\"6\" r=\"1\"/><circle cx=\"9\" cy=\"12\" r=\"1\"/><circle cx=\"9\" cy=\"18\" r=\"1\"/><circle cx=\"15\" cy=\"6\" r=\"1\"/><circle cx=\"15\" cy=\"12\" r=\"1\"/><circle cx=\"15\" cy=\"18\" r=\"1\"/>',\n folder: '<path d=\"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2z\"/>',\n 'file-code': '<path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\"/><path d=\"M14 2v6h6\"/><path d=\"m9 13-2 2 2 2\"/><path d=\"m15 13 2 2-2 2\"/>',\n 'git-branch': '<line x1=\"6\" x2=\"6\" y1=\"3\" y2=\"15\"/><circle cx=\"18\" cy=\"6\" r=\"3\"/><circle cx=\"6\" cy=\"18\" r=\"3\"/><path d=\"M18 9a9 9 0 0 1-9 9\"/>',\n clock: '<circle cx=\"12\" cy=\"12\" r=\"10\"/><polyline points=\"12 6 12 12 16 14\"/>',\n key: '<circle cx=\"7.5\" cy=\"15.5\" r=\"5.5\"/><path d=\"m21 2-9.6 9.6\"/><path d=\"m15.5 7.5 3 3L22 7l-3-3\"/>',\n zap: '<path d=\"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z\"/>',\n home: '<path d=\"m3 9 9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z\"/><polyline points=\"9 22 9 12 15 12 15 22\"/>',\n heart: '<path d=\"M19 14c1.49-1.46 3-3.21 3-5.5A5.5 5.5 0 0 0 16.5 3c-1.76 0-3 .5-4.5 2-1.5-1.5-2.74-2-4.5-2A5.5 5.5 0 0 0 2 8.5c0 2.3 1.5 4.05 3 5.5l7 7Z\"/>',\n bookmark: '<path d=\"m19 21-7-4-7 4V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z\"/>',\n download: '<path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\"/><polyline points=\"7 10 12 15 17 10\"/><line x1=\"12\" x2=\"12\" y1=\"15\" y2=\"3\"/>',\n edit: '<path d=\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\"/><path d=\"M18.5 2.5a2.1 2.1 0 0 1 3 3L12 15l-4 1 1-4Z\"/>',\n eye: '<path d=\"M2 12s3-7 10-7 10 7 10 7-3 7-10 7-10-7-10-7Z\"/><circle cx=\"12\" cy=\"12\" r=\"3\"/>',\n filter: '<polygon points=\"22 3 2 3 10 12.46 10 19 14 21 14 12.46 22 3\"/>',\n refresh: '<path d=\"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8\"/><path d=\"M21 3v5h-5\"/><path d=\"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16\"/><path d=\"M3 21v-5h5\"/>',\n sparkles: '<path d=\"M9.9 2.5 12 8l5.5 2.1L12 12l-2.1 5.5L7.8 12 2.3 9.9 7.8 8z\"/><path d=\"M18 5l.9 2.1L21 8l-2.1.9L18 11l-.9-2.1L15 8l2.1-.9z\"/>',\n bot: '<rect width=\"16\" height=\"11\" x=\"4\" y=\"9\" rx=\"2\"/><path d=\"M12 5v4\"/><circle cx=\"12\" cy=\"4\" r=\"1\"/><path d=\"M9 13v1.5\"/><path d=\"M15 13v1.5\"/>',\n wrench: '<path d=\"M14.7 6.3a4 4 0 0 0-5.4 5.4L3 18l3 3 6.3-6.3a4 4 0 0 0 5.4-5.4l-2.6 2.6-2.4-.6-.6-2.4z\"/>',\n terminal: '<polyline points=\"4 17 10 11 4 5\"/><line x1=\"12\" x2=\"20\" y1=\"19\" y2=\"19\"/>',\n 'thumbs-up': '<path d=\"M7 10v11\"/><path d=\"M15 5.9 14 10h5.5a2 2 0 0 1 2 2.4l-1.4 7A2 2 0 0 1 18 21H7V10l4-8a2 2 0 0 1 3 1.7z\"/>',\n 'thumbs-down': '<path d=\"M17 14V3\"/><path d=\"M9 18.1 10 14H4.5a2 2 0 0 1-2-2.4l1.4-7A2 2 0 0 1 6 3h11v11l-4 8a2 2 0 0 1-3-1.7z\"/>',\n send: '<path d=\"M14.5 9.5 21 3l-6.5 18-2.5-7-7-2.5z\"/>',\n stop: '<rect width=\"14\" height=\"14\" x=\"5\" y=\"5\" rx=\"2\"/>',\n paperclip: '<path d=\"m21 8-9.5 9.5a4 4 0 0 1-5.7-5.7L13 4.6a2.7 2.7 0 0 1 3.8 3.8L9.5 15.7a1.3 1.3 0 0 1-1.9-1.9l7.4-7.4\"/>',\n globe: '<circle cx=\"12\" cy=\"12\" r=\"10\"/><path d=\"M2 12h20\"/><path d=\"M12 2a15 15 0 0 1 0 20 15 15 0 0 1 0-20z\"/>'\n};\n\nexport function icon(name?: string, size = 16): string {\n const key = (name || 'file') as IconName;\n const paths = iconPaths[key] || iconPaths.file;\n return `<svg class=\"rp-icon\" width=\"${size}\" height=\"${size}\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">${paths}</svg>`;\n}\n\n\n","import { injectStyle } from '../core/style';\nimport { attr, csv, escapeHtml, intAttr } from '../core/dom';\nimport { icon } from '../core/icons';\n\nexport class FieldElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const value = attr(this,'value'); const placeholder = attr(this,'placeholder','Search'); const label = attr(this,'label'); const error = attr(this,'error-message'); const showValue = value || attr(this,'state') === 'filled'; const content = `${this.fieldIcon()}<span class=\"${showValue ? 'rp-value' : 'rp-placeholder'}\">${escapeHtml(value || placeholder)}</span>${this.hasAttribute('has-clear-button') ? icon('x',14) : ''}`; this.innerHTML = label || error ? `<span class=\"rp-field-label\">${escapeHtml(label)}</span><span class=\"rp-field-control\">${content}</span>${error ? `<span class=\"rp-error-text\">${escapeHtml(error)}</span>` : ''}` : content; } fieldIcon() { return icon(this.tagName.toLowerCase().includes('date-picker') ? 'calendar' : 'search'); } }\nexport class TextareaElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady = 'true'; this.style.setProperty('--snap-rows', attr(this,'rows','3')); const value = attr(this,'value') || attr(this,'placeholder','Textarea'); this.innerHTML = `<span class=\"${attr(this,'value') ? 'rp-value' : 'rp-placeholder'}\">${escapeHtml(value)}</span>`; } }\nexport class SelectElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady = 'true'; const options = csv(this, 'options', '选项 A,选项 B,选项 C'); const value = attr(this, 'value', options[0] || 'Select'); const label = attr(this, 'label'); this.innerHTML = `${label ? `<span class=\"rp-field-label\">${escapeHtml(label)}</span>` : ''}<span class=\"select-el-control\"><span class=\"select-el-value\">${escapeHtml(value)}</span>${icon('chevron-down')}</span><span class=\"select-el-options\">${options.map(o => `<span class=\"select-el-option${o === value ? ' selected' : ''}\">${escapeHtml(o)}</span>`).join('')}</span>`; } }\nexport class ButtonElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const label = attr(this,'label', this.textContent?.trim() || 'Button'); const ic = attr(this,'icon'); const loading = attr(this,'state') === 'loading'; this.innerHTML = `${loading ? icon('loader') : ic ? icon(ic) : ''}<span>${escapeHtml(label)}</span>`; } }\nexport class CheckboxElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const state = attr(this,'state'); const mark = state === 'checked' ? icon('check',12) : state === 'indeterminate' ? icon('minus',12) : ''; this.innerHTML = `<span class=\"rp-box\">${mark}</span><span>${escapeHtml(attr(this,'label',''))}</span>`; } }\nexport class RadioElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const checked = attr(this,'state') === 'checked'; this.innerHTML = `<span class=\"rp-box\">${checked ? icon('circle',8) : ''}</span><span>${escapeHtml(attr(this,'label',''))}</span>`; } }\nexport class ToggleElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; this.innerHTML = `<span class=\"toggle-el-track\"><span class=\"toggle-el-dot\"></span></span><span>${escapeHtml(attr(this,'label',''))}</span>`; } }\nexport class FormElement extends HTMLElement { connectedCallback() { injectStyle(); } }\nexport class FormItemElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady = 'true'; const children = Array.from(this.childNodes); const label = attr(this,'label'); const error = attr(this,'error'); this.innerHTML = `${label ? `<span class=\"form-el-label${this.hasAttribute('required') ? ' required' : ''}\">${escapeHtml(label)}</span>` : ''}`; children.forEach(n => this.appendChild(n)); if (error) this.insertAdjacentHTML('beforeend', `<span class=\"form-el-error\">${escapeHtml(error)}</span>`); } }\nexport class DatePickerElement extends FieldElement { fieldIcon() { return icon('calendar'); } }\nexport class UploadElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady = 'true'; const state = attr(this,'state','empty'); if (state === 'has-file') this.innerHTML = `${icon('file')}<span>${escapeHtml(attr(this,'file','document.pdf'))}</span>`; else if (state === 'uploading') this.innerHTML = `${icon('loader')}<span>上传中...</span><span class=\"progress-el-bar\" style=\"width:${escapeHtml(attr(this,'progress','60'))}%\"></span>`; else this.innerHTML = `${icon('upload',24)}<span>${escapeHtml(attr(this,'label','点击或拖拽文件上传'))}</span>`; } }\nexport class ImagePlaceholderElement extends HTMLElement { connectedCallback() { injectStyle(); this.style.setProperty('--snap-width', `${attr(this,'width','160')}px`); this.style.setProperty('--snap-height', `${attr(this,'height','100')}px`); if (!this.innerHTML.trim()) this.innerHTML = `${icon('image')} ${escapeHtml(attr(this,'label','Image'))}`; } }\nexport class ProgressElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const value = attr(this,'value','40'); this.style.setProperty('--progress', `${value}%`); const kind = attr(this,'kind', attr(this,'style')); this.innerHTML = kind === 'circle' ? `${escapeHtml(value)}%` : '<span class=\"progress-el-bar\"></span>'; } }\n\nexport class SliderElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const min = intAttr(this,'min',0); const max = intAttr(this,'max',100); const value = intAttr(this,'value',40); const pct = max > min ? Math.max(0, Math.min(100, ((value - min) / (max - min)) * 100)) : 0; const label = attr(this,'label'); this.innerHTML = `${label ? `<span class=\"rp-field-label\">${escapeHtml(label)}</span>` : ''}<span class=\"slider-el-track\"><span class=\"slider-el-fill\" style=\"width:${pct}%\"></span><span class=\"slider-el-thumb\" style=\"left:${pct}%\"></span></span>${this.hasAttribute('show-value') ? `<span class=\"slider-el-value\">${value}</span>` : ''}`; } }\nexport class RangeElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const min = intAttr(this,'min',0); const max = intAttr(this,'max',100); const low = intAttr(this,'low',25); const high = intAttr(this,'high',75); const span = max - min || 1; const l = ((low - min) / span) * 100; const h = ((high - min) / span) * 100; this.innerHTML = `<span class=\"slider-el-track\"><span class=\"slider-el-fill\" style=\"left:${l}%;width:${h - l}%\"></span><span class=\"slider-el-thumb\" style=\"left:${l}%\"></span><span class=\"slider-el-thumb\" style=\"left:${h}%\"></span></span>`; } }\nexport class NumberInputElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const value = attr(this,'value','0'); this.innerHTML = `<span class=\"rp-num-value\">${escapeHtml(value)}</span><span class=\"rp-num-steppers\"><span class=\"rp-num-step\">${icon('chevron-up',12)}</span><span class=\"rp-num-step\">${icon('chevron-down',12)}</span></span>`; } }\nexport class RatingElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const max = intAttr(this,'max',5); const value = intAttr(this,'value',3); this.innerHTML = Array.from({length:max},(_,i)=>`<span class=\"rp-star${i < value ? ' filled' : ''}\">${icon('star',16)}</span>`).join(''); } }\nexport class PinInputElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const len = intAttr(this,'length',4); const value = attr(this,'value',''); const chars = value.split(''); this.innerHTML = Array.from({length:len},(_,i)=>`<span class=\"rp-pin-cell${i === chars.length ? ' active' : ''}\">${escapeHtml(chars[i] || '')}</span>`).join(''); } }\nexport class ColorSwatchElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const value = attr(this,'value','#2563eb'); this.innerHTML = `<span class=\"rp-swatch-chip\" style=\"background:${escapeHtml(value)}\"></span><span class=\"rp-swatch-hex\">${escapeHtml(attr(this,'label', value))}</span>`; } }\nexport class AutocompleteElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const value = attr(this,'value'); const options = csv(this,'options','选项一,选项二,选项三'); this.innerHTML = `<span class=\"rp-field-control\">${icon('search')}<span class=\"${value ? 'rp-value' : 'rp-placeholder'}\">${escapeHtml(value || attr(this,'placeholder','输入以搜索'))}</span></span>${this.hasAttribute('open') ? `<span class=\"rp-ac-options\">${options.map(o=>`<span class=\"rp-ac-option\">${escapeHtml(o)}</span>`).join('')}</span>` : ''}`; } }\n\n","import { injectStyle } from '../core/style';\nimport { attr, csv, intAttr, escapeHtml } from '../core/dom';\nimport { icon } from '../core/icons';\n\nexport class BadgeElement extends HTMLElement { connectedCallback() { injectStyle(); const count = attr(this,'count','0'); const max = intAttr(this,'max',99); const n = Number(count); this.textContent = Number.isFinite(n) && n > max ? `${max}+` : count; } }\nexport class AvatarElement extends HTMLElement { connectedCallback() { injectStyle(); const size = attr(this,'size','32'); this.style.setProperty('--snap-size', `${size}px`); if (!this.textContent?.trim()) this.textContent = attr(this,'initials','U'); } }\nexport class ListElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady || this.children.length) return; this.dataset.rpReady='true'; const items = intAttr(this,'items',3); const state = attr(this,'state'); this.innerHTML = Array.from({length: items}, (_,i)=>`<list-item label=\"${['全部','未读','@ 我','已归档','设置'][i] || `Item ${i+1}`}\" icon=\"${['inbox','message-square','at-sign','archive','settings'][i] || 'file'}\"${state === 'first-selected' && i === 0 ? ' state=\"selected\"' : ''}></list-item>`).join(''); } }\nexport class ListItemElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const label = attr(this,'label', this.textContent?.trim() || 'Item'); const badge = attr(this,'badge'); const ic = attr(this,'icon'); this.innerHTML = `${ic ? icon(ic) : ''}<span class=\"list-el-label\">${escapeHtml(label)}</span>${badge ? `<span class=\"list-el-badge\">${escapeHtml(badge)}</span>` : ''}`; } }\nexport class TabsElement extends HTMLElement { connectedCallback() { injectStyle(); const active = attr(this,'active','0'); const numeric = Number(active); const children = Array.from(this.children) as HTMLElement[]; children.forEach((child, i) => { const label = child.getAttribute('label') || child.textContent?.trim() || ''; const isActive = Number.isFinite(numeric) ? i === numeric : label === active; child.classList.toggle('tab-el-active', isActive); }); } }\nexport class TabElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const label = attr(this,'label', this.textContent?.trim() || 'Tab'); const badge = attr(this,'badge'); this.innerHTML = `<span>${escapeHtml(label)}</span>${badge ? `<span class=\"list-el-badge\">${escapeHtml(badge)}</span>` : ''}`; } }\nexport class PaginationElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady = 'true'; const total = intAttr(this,'total',10); const current = intAttr(this,'current',1); const pageSize = intAttr(this,'page-size',10); const pages = Math.max(1, Math.ceil(total / pageSize)); const visible = Array.from({length: Math.min(pages,5)}, (_,i)=>i+1); this.innerHTML = `<span class=\"page-el-btn\">${icon('chevron-left',14)}</span>${visible.map(p=>`<span class=\"page-el-btn${p===current?' active':''}\">${p}</span>`).join('')}<span class=\"page-el-btn\">${icon('chevron-right',14)}</span><span>共 ${total} 条</span>`; } }\nexport class StepsElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady = 'true'; const steps = csv(this,'steps','步骤一,步骤二,步骤三'); const active = intAttr(this,'active',0); this.innerHTML = steps.map((s,i)=>`<span class=\"rp-step ${i < active ? 'done' : i === active ? 'active' : ''}\"><span class=\"rp-step-dot\">${i < active ? icon('check',12) : i + 1}</span>${escapeHtml(s)}</span>${i < steps.length - 1 ? '<span class=\"rp-step-sep\"></span>' : ''}`).join(''); } }\nexport class BreadcrumbElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady = 'true'; const items = csv(this,'items','首页,当前页'); this.innerHTML = items.map((item,i)=>`<span class=\"${i===items.length-1?'breadcrumb-el-current':''}\">${escapeHtml(item)}</span>${i < items.length - 1 ? '<span>/</span>' : ''}`).join(''); } }\n\nexport class SegmentedElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const options = csv(this,'options','日,周,月'); const active = attr(this,'active','0'); const idx = Number(active); this.innerHTML = options.map((o,i)=>`<span class=\"rp-seg-item${(Number.isFinite(idx) ? i===idx : o===active) ? ' active' : ''}\">${escapeHtml(o)}</span>`).join(''); } }\nexport class CommandPaletteElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const query = attr(this,'query'); const results = csv(this,'results','新建文件,打开设置,搜索工单,切换主题'); this.innerHTML = `<div class=\"rp-cmdk-input\">${icon('search')}<span class=\"${query ? 'rp-value' : 'rp-placeholder'}\">${escapeHtml(query || '输入命令…')}</span></div><div class=\"rp-cmdk-list\">${results.map((r,i)=>`<div class=\"rp-cmdk-item${i===0?' active':''}\">${icon('zap',14)}<span>${escapeHtml(r)}</span></div>`).join('')}</div>`; } }\nexport class ContextMenuElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady || this.children.length) return; this.dataset.rpReady='true'; const items = csv(this,'items','复制,重命名,移动到,删除'); this.innerHTML = items.map(it=>`<div class=\"menu-item${it==='删除'?' danger':''}\"><span>${escapeHtml(it)}</span></div>`).join(''); } }\nexport class MenuElement extends HTMLElement { connectedCallback() { injectStyle(); } }\nexport class MenuItemElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const label = attr(this,'label', this.textContent?.trim() || '菜单项'); const ic = attr(this,'icon'); const shortcut = attr(this,'shortcut'); const disabled = attr(this,'state')==='disabled'; this.innerHTML = `${ic ? icon(ic,14) : ''}<span class=\"menu-el-label\">${escapeHtml(label)}</span>${shortcut ? `<span class=\"menu-el-shortcut\">${escapeHtml(shortcut)}</span>` : ''}`; if (disabled) this.classList.add('disabled'); } }\nexport class TocElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady || this.children.length) return; this.dataset.rpReady='true'; const items = csv(this,'items','概述,安装,用法,API,常见问题'); this.innerHTML = items.map((it,i)=>`<span class=\"toc-el-item${i===0?' active':''}\">${escapeHtml(it)}</span>`).join(''); } }\nexport class KbdElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const keys = csv(this,'keys','⌘,K'); this.innerHTML = keys.map(k=>`<kbd class=\"kbd-el-key\">${escapeHtml(k)}</kbd>`).join('<span class=\"kbd-el-plus\">+</span>'); } }\n\n\n","import { injectStyle } from '../core/style';\nimport { attr, csv, escapeHtml, intAttr } from '../core/dom';\nimport { icon } from '../core/icons';\n\nexport function sampleCell(c:string, j:number, i:number) { const lower = c.toLowerCase(); if (c.includes('发件') || lower.includes('name')) return ['张三','李四','系统通知','运营助手','王五','安全团队'][i%6]; if (c.includes('预览') || lower.includes('preview')) return ['请确认新的项目评审时间','本周周报已发送','你的账号存在新的登录','活动报名已通过审核','附件已更新','安全策略变更提醒'][i%6]; if (c.includes('时间') || lower.includes('time')) return ['09:12','昨天','周二','5月30日','5月28日','5月20日'][i%6]; if (c.includes('状态') || lower.includes('status')) return i % 2 ? '未读' : '已读'; return `Data ${i+1}-${j+1}`; }\nexport class TableElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const cols = csv(this,'columns','Name,Preview,Time,Status'); const rows = intAttr(this,'rows',4); const hasCheckbox = this.hasAttribute('has-checkbox'); const hasAction = this.hasAttribute('has-action'); const finalCols = hasAction ? [...cols, '操作'] : cols; const headCells = `${hasCheckbox ? '<span class=\"table-el-cell\">✓</span>' : ''}${finalCols.map(c=>`<span class=\"table-el-cell\">${escapeHtml(c)}</span>`).join('')}`; const body = Array.from({length: rows}, (_,i) => `<div class=\"table-row\">${hasCheckbox ? `<span class=\"table-el-cell\"><span class=\"rp-box\">${i===1 ? icon('check',12) : ''}</span></span>` : ''}${finalCols.map((c,j)=>`<span class=\"table-el-cell\">${c === '操作' ? '<button-el label=\"查看\" variant=\"link\"></button-el>' : escapeHtml(sampleCell(c,j,i))}</span>`).join('')}</div>`).join(''); this.innerHTML = `<div class=\"table-row table-el-head\">${headCells}</div>${body}`; } }\nexport class TableRowElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; this.innerHTML = `<span><span class=\"rp-box\">${attr(this,'state')==='selected'?icon('check',12):''}</span></span><span>张三</span><span>消息内容预览文本</span><span>09:12</span><span>${escapeHtml(attr(this,'state','default'))}</span>`; } }\nexport class BulkActionBarElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const count = attr(this,'count','1'); const actions = csv(this,'actions','确认,取消'); this.innerHTML = `${icon('check')}<span>已选 ${escapeHtml(count)} 项</span>${actions.map(a=>`<button-el label=\"${escapeHtml(a)}\" variant=\"ghost\"></button-el>`).join('')}`; } }\nexport class EmptyElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; this.innerHTML = `${icon('empty',28)}<span class=\"empty-el-title\">${escapeHtml(attr(this,'label','暂无数据'))}</span><span class=\"empty-el-desc\">${escapeHtml(attr(this,'description',''))}</span>${this.hasAttribute('has-action') ? '<button-el label=\"新建\" variant=\"primary\" icon=\"plus\"></button-el>' : ''}`; } }\nexport class LoadingElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const rows = intAttr(this,'rows',3); this.innerHTML = attr(this,'kind') === 'spinner' || attr(this,'style') === 'spinner' ? `<span class=\"rp-spinner\">${icon('loader',24)}</span>` : Array.from({length: rows}, (_,i)=>`<span class=\"skeleton-el-line\" style=\"width:${220 - i*24}px\"></span>`).join(''); } }\nexport class AlertElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const type = attr(this,'type','info'); const title = attr(this,'title', type === 'error' ? '错误' : '提示'); const message = attr(this,'message',''); const ic = type === 'error' ? 'circle-alert' : type === 'warning' ? 'alert-triangle' : type === 'success' ? 'circle-check' : 'info'; this.innerHTML = `${icon(ic)}<span><strong>${escapeHtml(title)}</strong>${message ? `<br>${escapeHtml(message)}` : ''}</span>${this.hasAttribute('closable') ? icon('x',14) : ''}`; } }\nexport class OverlayElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady = 'true'; const children = Array.from(this.childNodes); const title = attr(this,'title'); if (!title) return; const head = document.createElement('div'); head.className = 'rp-overlay-title'; head.textContent = title; this.prepend(head); children.forEach(n => this.appendChild(n)); } }\nexport class TooltipElement extends HTMLElement { connectedCallback() { injectStyle(); if (!this.textContent?.trim()) this.textContent = attr(this,'text','提示内容'); } }\nexport class ModalElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady = 'true'; this.style.setProperty('--snap-width', `${attr(this,'width','480')}px`); const children = Array.from(this.childNodes); const body = document.createElement('div'); body.className = 'modal-el-body'; children.forEach(n => body.appendChild(n)); this.innerHTML = `<div class=\"modal-el-head\"><span>${escapeHtml(attr(this,'title','标题'))}</span>${icon('x',14)}</div>`; this.appendChild(body); if (this.hasAttribute('has-footer')) this.insertAdjacentHTML('beforeend', '<div class=\"modal-el-footer\"><button-el label=\"取消\"></button-el><button-el label=\"确认\" variant=\"primary\"></button-el></div>'); } }\nexport class DrawerElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady = 'true'; this.style.setProperty('--snap-width', `${attr(this,'width','360')}px`); const children = Array.from(this.childNodes); const body = document.createElement('div'); body.className = 'drawer-el-body'; children.forEach(n => body.appendChild(n)); this.innerHTML = `<div class=\"drawer-el-head\"><span>${escapeHtml(attr(this,'title','抽屉'))}</span>${icon('x',14)}</div>`; this.appendChild(body); } }\nexport class CardElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady = 'true'; const children = Array.from(this.childNodes); const title = attr(this,'title'); const subtitle = attr(this,'subtitle'); this.innerHTML = `${this.hasAttribute('has-image') ? `<span class=\"card-el-image\">${icon('image')} Image</span>` : ''}${title ? `<span class=\"card-el-title\">${escapeHtml(title)}</span>` : ''}${subtitle ? `<span class=\"card-el-subtitle\">${escapeHtml(subtitle)}</span>` : ''}`; children.forEach(n => this.appendChild(n)); if (this.hasAttribute('has-footer')) this.insertAdjacentHTML('beforeend', '<span class=\"card-el-footer\"><button-el label=\"查看\" variant=\"secondary\"></button-el></span>'); } }\nexport class StatCardElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady = 'true'; this.innerHTML = `<span class=\"rp-stat-label\">${escapeHtml(attr(this,'label','指标'))}</span><span class=\"rp-stat-value\">${escapeHtml(attr(this,'value','128'))}</span><span class=\"rp-stat-change\">${escapeHtml(attr(this,'change','0%'))}</span>`; } }\nexport class TagElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady = 'true'; const label = attr(this,'label', this.textContent?.trim() || 'Tag'); this.innerHTML = `<span>${escapeHtml(label)}</span>${this.hasAttribute('closable') ? icon('x',12) : ''}`; } }\n\nexport class ChipElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const label = attr(this,'label', this.textContent?.trim() || 'Chip'); const ic = attr(this,'icon'); this.innerHTML = `${ic ? icon(ic,12) : ''}<span>${escapeHtml(label)}</span>${this.hasAttribute('closable') ? icon('x',11) : ''}`; } }\nexport class TreeElement extends HTMLElement { connectedCallback() { injectStyle(); } }\nexport class TreeItemElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const level = intAttr(this,'level',0); const label = attr(this,'label','Node'); const ic = attr(this,'icon'); const expandable = this.hasAttribute('expanded') || this.hasAttribute('collapsed'); const expanded = this.hasAttribute('expanded'); const caret = expandable ? icon(expanded ? 'chevron-down' : 'chevron-right',12) : '<span class=\"tree-el-spacer\"></span>'; this.style.setProperty('--tree-level', String(level)); this.innerHTML = `<span class=\"tree-el-row${attr(this,'state')==='selected' ? ' selected' : ''}\">${caret}${icon(ic || (expandable ? 'folder' : 'file'),14)}<span class=\"tree-el-label\">${escapeHtml(label)}</span></span>`; } }\nexport class TimelineElement extends HTMLElement { connectedCallback() { injectStyle(); } }\nexport class TimelineItemElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const children = Array.from(this.childNodes); const label = attr(this,'label'); const time = attr(this,'time'); const state = attr(this,'state','default'); const dot = `<span class=\"timeline-el-dot ${state}\"></span>`; const head = `<div class=\"timeline-el-head\"><span class=\"timeline-el-label\">${escapeHtml(label)}</span>${time ? `<span class=\"timeline-el-time\">${escapeHtml(time)}</span>` : ''}</div>`; const body = document.createElement('div'); body.className = 'timeline-el-content'; children.forEach(n=>body.appendChild(n)); this.innerHTML = `${dot}<div class=\"timeline-el-main\">${head}</div>`; this.querySelector('.timeline-el-main')!.appendChild(body); } }\nexport class CalendarElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const month = attr(this,'month','2026 年 6 月'); const selected = intAttr(this,'selected',15); const dows = ['一','二','三','四','五','六','日']; const cells = Array.from({length:35},(_,i)=>{ const day = i - 1; const valid = day >= 1 && day <= 30; return `<span class=\"rp-cal-cell${valid && day===selected ? ' selected' : ''}${valid ? '' : ' muted'}\">${valid ? day : ''}</span>`; }).join(''); this.innerHTML = `<div class=\"rp-cal-head\"><span>${escapeHtml(month)}</span></div><div class=\"rp-cal-grid\">${dows.map(d=>`<span class=\"rp-cal-dow\">${d}</span>`).join('')}${cells}</div>`; } }\nexport class KanbanElement extends HTMLElement { connectedCallback() { injectStyle(); } }\nexport class KanbanColumnElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const children = Array.from(this.childNodes); const title = attr(this,'title','列'); const count = attr(this,'count'); const head = document.createElement('div'); head.className = 'kanban-el-head'; head.innerHTML = `<span>${escapeHtml(title)}</span>${count ? `<span class=\"kanban-el-count\">${escapeHtml(count)}</span>` : ''}`; const body = document.createElement('div'); body.className = 'kanban-el-body'; children.forEach(n=>body.appendChild(n)); this.append(head, body); } }\nexport class KanbanCardElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const label = attr(this,'label','卡片'); const tag = attr(this,'tag'); this.innerHTML = `<span class=\"kanban-card-title\">${escapeHtml(label)}</span>${tag ? `<span class=\"kanban-card-tag\">${escapeHtml(tag)}</span>` : ''}`; } }\nexport class CodeBlockElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const lines = intAttr(this,'lines',5); const lang = attr(this,'lang','ts'); const body = Array.from({length:lines},(_,i)=>`<span class=\"rp-code-line\"><span class=\"rp-code-ln\">${i+1}</span><span class=\"rp-code-bar\" style=\"width:${40 + ((i*37)%50)}%\"></span></span>`).join(''); this.innerHTML = `<div class=\"rp-code-head\">${escapeHtml(lang)}</div><div class=\"rp-code-body\">${body}</div>`; } }\nexport class DiffElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const rows = intAttr(this,'rows',4); const body = Array.from({length:rows},(_,i)=>{ const kind = i%3===0 ? 'add' : i%3===1 ? 'del' : 'ctx'; const sign = kind==='add'?'+':kind==='del'?'-':' '; return `<span class=\"diff-el-line ${kind}\"><span class=\"diff-el-sign\">${sign}</span><span class=\"rp-code-bar\" style=\"width:${45+((i*29)%45)}%\"></span></span>`; }).join(''); this.innerHTML = body; } }\nexport class ImageGridElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const count = intAttr(this,'count',6); const cols = intAttr(this,'columns',3); this.style.setProperty('--grid-cols', String(cols)); this.innerHTML = Array.from({length:count},()=>`<span class=\"rp-grid-cell\">${icon('image',20)}</span>`).join(''); } }\nexport class KeyValueElement extends HTMLElement { connectedCallback() { injectStyle(); } }\nexport class KvRowElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; this.innerHTML = `<span class=\"rp-kv-key\">${escapeHtml(attr(this,'label','键'))}</span><span class=\"rp-kv-val\">${escapeHtml(attr(this,'value','值'))}</span>`; } }\nexport class AccordionElement extends HTMLElement { connectedCallback() { injectStyle(); } }\nexport class AccordionItemElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const children = Array.from(this.childNodes); const label = attr(this,'label','分节'); const expanded = this.hasAttribute('expanded'); const head = document.createElement('div'); head.className = 'accordion-el-head'; head.innerHTML = `${icon(expanded ? 'chevron-down' : 'chevron-right',14)}<span>${escapeHtml(label)}</span>`; this.appendChild(head); if (expanded) { const body = document.createElement('div'); body.className = 'accordion-el-body'; children.forEach(n=>body.appendChild(n)); this.appendChild(body); } } }\nexport class BannerElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const type = attr(this,'type','info'); const ic = type==='error'?'circle-alert':type==='warning'?'alert-triangle':type==='success'?'circle-check':'info'; this.innerHTML = `${icon(ic)}<span class=\"banner-el-text\"><strong>${escapeHtml(attr(this,'title','通知'))}</strong>${attr(this,'message') ? ` ${escapeHtml(attr(this,'message'))}` : ''}</span>${this.hasAttribute('has-action') ? '<button-el label=\"查看\" variant=\"link\"></button-el>' : ''}${this.hasAttribute('closable') ? icon('x',14) : ''}`; } }\nexport class SkeletonElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const shape = attr(this,'shape','line'); if (shape==='avatar') this.innerHTML = '<span class=\"rp-skel rp-skel-avatar\"></span>'; else if (shape==='card') this.innerHTML = '<span class=\"rp-skel rp-skel-block\"></span><span class=\"skeleton-el-line\" style=\"width:70%\"></span><span class=\"skeleton-el-line\" style=\"width:50%\"></span>'; else if (shape==='list') this.innerHTML = Array.from({length:3},()=>'<span class=\"rp-skel-row\"><span class=\"rp-skel rp-skel-avatar sm\"></span><span class=\"skeleton-el-line\" style=\"width:60%\"></span></span>').join(''); else this.innerHTML = '<span class=\"skeleton-el-line\"></span>'; } }\nexport class CountdownElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; this.innerHTML = `${icon('clock',13)}<span>${escapeHtml(attr(this,'value','02:45:18'))}</span>`; } }\nexport class ResultElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const status = attr(this,'status','success'); const ic = status==='error'?'circle-x':status==='empty'?'empty':'circle-check'; this.innerHTML = `<span class=\"result-el-icon ${status}\">${icon(ic,40)}</span><span class=\"result-el-title\">${escapeHtml(attr(this,'title','操作成功'))}</span><span class=\"result-el-desc\">${escapeHtml(attr(this,'description',''))}</span>${this.hasAttribute('has-action') ? '<button-el label=\"返回\" variant=\"primary\"></button-el>' : ''}`; } }\nexport class PermissionGateElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const children = Array.from(this.childNodes); const wrap = document.createElement('div'); wrap.className = 'rp-gate-content'; children.forEach(n=>wrap.appendChild(n)); const overlay = document.createElement('div'); overlay.className = 'rp-gate-overlay'; overlay.innerHTML = `${icon('lock',16)}<span>${escapeHtml(attr(this,'reason','无权限'))}</span>`; this.append(wrap, overlay); } }\nexport class QuotaBarElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const used = intAttr(this,'used',70); const limit = intAttr(this,'limit',100); const pct = limit ? Math.min(100,(used/limit)*100) : 0; const danger = pct >= 90; this.innerHTML = `<div class=\"rp-quota-head\"><span>${escapeHtml(attr(this,'label','用量'))}</span><span class=\"rp-quota-num${danger ? ' danger' : ''}\">${used} / ${limit}</span></div><span class=\"rp-quota-track\"><span class=\"rp-quota-fill${danger ? ' danger' : ''}\" style=\"width:${pct}%\"></span></span>`; } }\nexport class ApiKeyElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const value = attr(this,'value','sk_live_••••••••••••3f9a'); this.innerHTML = `<span class=\"rp-apikey-val\">${escapeHtml(value)}</span><span class=\"rp-apikey-copy\">${icon('copy',14)}</span>`; } }\nexport class AuditRowElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; this.innerHTML = `<span class=\"rp-audit-actor\">${escapeHtml(attr(this,'actor','用户'))}</span><span class=\"rp-audit-action\">${escapeHtml(attr(this,'action','执行了操作'))}</span><span class=\"rp-audit-time\">${escapeHtml(attr(this,'time','刚刚'))}</span>`; } }\nexport class WorkflowNodeElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const state = attr(this,'state','default'); const ic = state==='done'?'circle-check':state==='active'?'circle':state==='error'?'circle-x':'circle'; this.innerHTML = `<span class=\"rp-wf-icon ${state}\">${icon(ic,16)}</span><span class=\"rp-wf-label\">${escapeHtml(attr(this,'label','节点'))}</span>`; } }\n\n","import { injectStyle } from '../core/style';\nimport { attr, csv, escapeHtml, intAttr } from '../core/dom';\nimport { icon } from '../core/icons';\n\n// iOS (Apple HIG) platform primitives. Static visual approximations only.\nexport class IosNavbarElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const title = attr(this,'title','标题'); const large = this.hasAttribute('large'); const back = attr(this,'back'); const trailing = attr(this,'trailing'); this.innerHTML = `<div class=\"ios-navbar-row\"><span class=\"rp-ios-nav-leading\">${back ? `${icon('chevron-left',18)}<span>${escapeHtml(back)}</span>` : ''}</span><span class=\"rp-ios-nav-title${large ? ' inline' : ''}\">${large ? '' : escapeHtml(title)}</span><span class=\"rp-ios-nav-trailing\">${trailing ? escapeHtml(trailing) : ''}</span></div>${large ? `<div class=\"rp-ios-nav-large\">${escapeHtml(title)}</div>` : ''}`; } }\nexport class IosTabbarElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const items = csv(this,'items','首页,搜索,通知,我的'); const icons = csv(this,'icons','home,search,bell,user'); const active = intAttr(this,'active',0); this.innerHTML = items.map((it,i)=>`<span class=\"rp-ios-tab${i===active?' active':''}\">${icon(icons[i] || 'circle',22)}<span class=\"rp-ios-tab-label\">${escapeHtml(it)}</span></span>`).join(''); } }\nexport class IosListElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const header = attr(this,'header'); if (header) { const h = document.createElement('div'); h.className = 'ios-list-header'; h.textContent = header; this.insertBefore(h, this.firstChild); } } }\nexport class IosListItemElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const label = attr(this,'label','项'); const detail = attr(this,'detail'); const ic = attr(this,'icon'); const chevron = this.hasAttribute('chevron'); this.innerHTML = `${ic ? `<span class=\"rp-ios-li-icon\">${icon(ic,16)}</span>` : ''}<span class=\"rp-ios-li-label\">${escapeHtml(label)}</span>${detail ? `<span class=\"rp-ios-li-detail\">${escapeHtml(detail)}</span>` : ''}${chevron ? `<span class=\"rp-ios-li-chevron\">${icon('chevron-right',16)}</span>` : ''}`; } }\nexport class IosActionSheetElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const title = attr(this,'title'); const actions = csv(this,'actions','拍照,从相册选择,选择文件'); const destructive = attr(this,'destructive'); const group = `<div class=\"rp-ios-as-group\">${title ? `<div class=\"rp-ios-as-title\">${escapeHtml(title)}</div>` : ''}${actions.map(a=>`<div class=\"rp-ios-as-action${a===destructive?' destructive':''}\">${escapeHtml(a)}</div>`).join('')}</div>`; const cancel = `<div class=\"rp-ios-as-group\"><div class=\"rp-ios-as-action cancel\">取消</div></div>`; this.innerHTML = group + cancel; } }\nexport class IosAlertElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const title = attr(this,'title','提示'); const message = attr(this,'message',''); const actions = csv(this,'actions','取消,确定'); this.innerHTML = `<div class=\"ios-alert-body\"><div class=\"ios-alert-title\">${escapeHtml(title)}</div>${message ? `<div class=\"ios-alert-msg\">${escapeHtml(message)}</div>` : ''}</div><div class=\"ios-alert-actions\">${actions.map((a,i)=>`<span class=\"ios-alert-btn${i===actions.length-1?' primary':''}\">${escapeHtml(a)}</span>`).join('')}</div>`; } }\nexport class IosSwitchElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const label = attr(this,'label'); this.innerHTML = `${label ? `<span class=\"ios-switch-label\">${escapeHtml(label)}</span>` : ''}<span class=\"ios-switch-track\"><span class=\"ios-switch-dot\"></span></span>`; } }\nexport class IosSegmentedElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const options = csv(this,'options','第一,第二,第三'); const active = intAttr(this,'active',0); this.innerHTML = options.map((o,i)=>`<span class=\"rp-ios-seg-item${i===active?' active':''}\">${escapeHtml(o)}</span>`).join(''); } }\nexport class IosButtonElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; this.innerHTML = `<span>${escapeHtml(attr(this,'label', this.textContent?.trim() || '按钮'))}</span>`; } }\nexport class IosSearchElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const value = attr(this,'value'); this.innerHTML = `${icon('search',15)}<span class=\"${value ? 'rp-value' : 'rp-placeholder'}\">${escapeHtml(value || attr(this,'placeholder','搜索'))}</span>`; } }\nexport class IosStepperElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; this.innerHTML = `<span class=\"rp-ios-step minus\">${icon('minus',16)}</span><span class=\"rp-ios-step-div\"></span><span class=\"rp-ios-step plus\">${icon('plus',16)}</span>`; } }\n","import { injectStyle } from '../core/style';\nimport { attr, csv, escapeHtml, intAttr } from '../core/dom';\nimport { icon } from '../core/icons';\n\n// macOS (Apple HIG) platform primitives. Static visual approximations only.\nexport class MacWindowElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const children = Array.from(this.childNodes); const title = attr(this,'title','窗口'); const titlebar = `<div class=\"rp-mac-titlebar\"><span class=\"rp-mac-lights\"><span class=\"rp-mac-light close\"></span><span class=\"rp-mac-light min\"></span><span class=\"rp-mac-light max\"></span></span><span class=\"rp-mac-title\">${escapeHtml(title)}</span></div>`; const body = document.createElement('div'); body.className = 'rp-mac-window-body'; children.forEach(n=>body.appendChild(n)); this.innerHTML = titlebar; this.appendChild(body); } }\nexport class MacToolbarElement extends HTMLElement { connectedCallback() { injectStyle(); } }\nexport class MacMenubarElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const items = csv(this,'items','文件,编辑,显示,窗口,帮助'); this.innerHTML = `<span class=\"rp-mac-menubar-apple\">${icon('home',14)}</span>` + items.map((it,i)=>`<span class=\"rp-mac-menu-title${i===0?' active':''}\">${escapeHtml(it)}</span>`).join(''); } }\nexport class MacSidebarElement extends HTMLElement { connectedCallback() { injectStyle(); } }\nexport class MacSourceItemElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const label = attr(this,'label','项'); const ic = attr(this,'icon'); if (this.hasAttribute('group')) { this.classList.add('rp-mac-source-group'); this.textContent = label; return; } this.innerHTML = `${ic ? icon(ic,15) : ''}<span class=\"rp-mac-source-label\">${escapeHtml(label)}</span>`; if (attr(this,'state')==='selected') this.classList.add('selected'); } }\nexport class MacSegmentedElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const options = csv(this,'options','全部,未读,标记'); const active = intAttr(this,'active',0); this.innerHTML = options.map((o,i)=>`<span class=\"rp-mac-seg-item${i===active?' active':''}\">${escapeHtml(o)}</span>`).join(''); } }\nexport class MacPopoverElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const children = Array.from(this.childNodes); const title = attr(this,'title'); const arrow = '<span class=\"rp-mac-pop-arrow\"></span>'; const body = document.createElement('div'); body.className = 'rp-mac-pop-body'; if (title) { const h = document.createElement('div'); h.className='rp-mac-pop-title'; h.textContent = title; body.appendChild(h); } children.forEach(n=>body.appendChild(n)); this.innerHTML = arrow; this.appendChild(body); } }\nexport class MacSheetElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const children = Array.from(this.childNodes); const title = attr(this,'title','操作'); const body = document.createElement('div'); body.className = 'rp-mac-sheet-body'; children.forEach(n=>body.appendChild(n)); this.innerHTML = `<div class=\"rp-mac-sheet-title\">${escapeHtml(title)}</div>`; this.appendChild(body); this.insertAdjacentHTML('beforeend','<div class=\"rp-mac-sheet-actions\"><button-el label=\"取消\"></button-el><button-el label=\"完成\" variant=\"primary\"></button-el></div>'); } }\nexport class MacStepperElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; this.innerHTML = `<span class=\"rp-mac-step up\">${icon('chevron-up',11)}</span><span class=\"rp-mac-step down\">${icon('chevron-down',11)}</span>`; } }\nexport class MacDisclosureElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const children = Array.from(this.childNodes); const label = attr(this,'label','详情'); const expanded = this.hasAttribute('expanded'); const head = document.createElement('div'); head.className = 'rp-mac-disc-head'; head.innerHTML = `<span class=\"rp-mac-disc-tri${expanded?' open':''}\">${icon('chevron-right',12)}</span><span>${escapeHtml(label)}</span>`; this.appendChild(head); if (expanded) { const body = document.createElement('div'); body.className='rp-mac-disc-body'; children.forEach(n=>body.appendChild(n)); this.appendChild(body); } } }\nexport class MacTableElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const cols = csv(this,'columns','名称,类型,大小'); const rows = intAttr(this,'rows',5); const head = `<div class=\"rp-mac-tr rp-mac-th\">${cols.map((c,i)=>`<span class=\"rp-mac-td\">${escapeHtml(c)}${i===0?icon('chevron-up',10):''}</span>`).join('')}</div>`; const body = Array.from({length:rows},(_,r)=>`<div class=\"rp-mac-tr${r%2?' alt':''}\">${cols.map((c,ci)=>`<span class=\"rp-mac-td\">${ci===0?icon('file',13):''}<span class=\"rp-mac-cell-bar\" style=\"width:${50+((r*17+ci*23)%40)}%\"></span></span>`).join('')}</div>`).join(''); this.innerHTML = head + body; } }\n","import { injectStyle } from '../core/style';\nimport { attr, csv, escapeHtml, intAttr } from '../core/dom';\nimport { icon } from '../core/icons';\n\n// Agent / conversational UI primitives. Static, Codex-style: single column,\n// de-bubbled, no assistant avatar, text + structure only (no markdown/highlight).\n\n// Conversation container — vertical single-column stack.\nexport class ChatElement extends HTMLElement { connectedCallback() { injectStyle(); } }\n\n// User message: a restrained light surface block, left-aligned, no avatar.\nexport class UserMessageElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const children = Array.from(this.childNodes); const text = attr(this,'text'); const content = document.createElement('div'); content.className = 'rp-msg-content'; if (text) content.textContent = text; else children.forEach(n=>content.appendChild(n)); this.innerHTML = `<div class=\"rp-msg-role\">You</div>`; this.appendChild(content); } }\n\n// Assistant message: plain flowing text, NO avatar, NO bubble.\nexport class AssistantMessageElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const children = Array.from(this.childNodes); const text = attr(this,'text'); const name = attr(this,'name','Assistant'); const content = document.createElement('div'); content.className = 'rp-msg-content'; if (text) content.textContent = text; else children.forEach(n=>content.appendChild(n)); this.innerHTML = `<div class=\"rp-msg-role\">${escapeHtml(name)}</div>`; this.appendChild(content); } }\n\n// System / context note line.\nexport class SystemMessageElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const text = attr(this,'text', this.textContent?.trim() || '系统消息'); this.innerHTML = `<span class=\"rp-sysmsg-line\">${escapeHtml(text)}</span>`; } }\n\n// Tool/function call: compact inline row with a status glyph + optional args/output.\nexport class ToolCallElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const children = Array.from(this.childNodes); const name = attr(this,'name','tool'); const state = attr(this,'state','done'); const glyph = state==='running' ? icon('loader',13) : state==='error' ? icon('circle-x',13) : icon('check',13); const args = attr(this,'args'); const head = `<div class=\"rp-tool-head\"><span class=\"rp-tool-glyph ${state}\">${glyph}</span><span class=\"rp-tool-name\">${escapeHtml(name)}</span>${args ? `<span class=\"rp-tool-args-inline\">${escapeHtml(args)}</span>` : ''}</div>`; const body = document.createElement('div'); body.className = 'rp-tool-body'; children.forEach(n=>body.appendChild(n)); this.innerHTML = head; if (children.length) this.appendChild(body); } }\n\n// Command / output block — monospace, plain text (no syntax highlight).\nexport class AgentOutputElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const children = Array.from(this.childNodes); const label = attr(this,'label'); const head = label ? `<div class=\"rp-output-head\">${escapeHtml(label)}</div>` : ''; const body = document.createElement('div'); body.className = 'rp-output-body'; const text = attr(this,'text'); if (text) body.textContent = text; else children.forEach(n=>body.appendChild(n)); this.innerHTML = head; this.appendChild(body); } }\n\n// Reasoning / thinking collapsible block.\nexport class ReasoningElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const children = Array.from(this.childNodes); const expanded = this.hasAttribute('expanded'); const head = `<div class=\"rp-reason-head\">${icon(expanded?'chevron-down':'chevron-right',13)}<span>Thought for a few seconds</span></div>`; this.innerHTML = head; if (expanded) { const body = document.createElement('div'); body.className='rp-reason-body'; children.forEach(n=>body.appendChild(n)); this.appendChild(body); } } }\n\n// Message action buttons (copy / retry / thumbs).\nexport class MessageActionsElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady || this.children.length) return; this.dataset.rpReady='true'; const actions = csv(this,'actions','copy,retry,up,down'); const map: Record<string,[string,string]> = { copy:['copy','复制'], retry:['refresh','重试'], up:['thumbs-up','赞'], down:['thumbs-down','踩'], edit:['edit','编辑'], share:['send','分享'] }; this.innerHTML = actions.map(a=>{ const m = map[a] || ['circle', a]; return `<span class=\"rp-msg-action\" title=\"${escapeHtml(m[1])}\">${icon(m[0],14)}</span>`; }).join(''); } }\n\n// Suggested reply / prompt chips.\nexport class SuggestionsElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const items = csv(this,'items','总结要点,继续,给个例子'); this.innerHTML = items.map(t=>`<span class=\"rp-suggestion\">${escapeHtml(t)}</span>`).join(''); } }\n\n// Streaming typing indicator (no avatar).\nexport class TypingElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; this.innerHTML = `<span class=\"typing-el-dots\"><span></span><span></span><span></span></span>`; } }\n\n// Composer / prompt input.\nexport class ComposerElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const value = attr(this,'value'); const state = attr(this,'state','idle'); const sendIcon = state==='streaming' ? icon('stop',16) : icon('send',16); this.innerHTML = `<span class=\"composer-el-attach\">${icon('paperclip',16)}</span><span class=\"composer-el-input ${value?'rp-value':'rp-placeholder'}\">${escapeHtml(value || attr(this,'placeholder','给助手发消息…'))}</span><span class=\"composer-el-send ${state}\">${sendIcon}</span>`; } }\n\n// Citation / source reference chip.\nexport class CitationElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const index = attr(this,'index','1'); const title = attr(this,'title', this.textContent?.trim() || '来源'); this.innerHTML = `<span class=\"rp-cite-idx\">${escapeHtml(index)}</span><span class=\"rp-cite-title\">${escapeHtml(title)}</span>`; } }\n\n// Token / usage meter.\nexport class TokenUsageElement extends HTMLElement { connectedCallback() { injectStyle(); if (this.dataset.rpReady) return; this.dataset.rpReady='true'; const used = intAttr(this,'used',1840); const limit = intAttr(this,'limit',8000); const pct = limit ? Math.min(100,(used/limit)*100) : 0; this.innerHTML = `<span>${used.toLocaleString()} / ${limit.toLocaleString()} tokens</span><span class=\"rp-token-track\"><span class=\"rp-token-fill\" style=\"width:${pct}%\"></span></span>`; } }\n","import { define } from './core/dom';\nimport { toComponentTag } from 'rpml-parser';\nimport { RpAnnotation, RpEnum, RpEnumItem } from './canvas/annotation';\nimport { RpMainView } from './canvas/main-view';\nimport { RpPage } from './canvas/page';\nimport { DividerElement, GenericElement, LayoutElement, LogoElement, NavbarElement, PanelElement, SidebarElement, SpacerElement, SplitPaneElement, ViewportElement } from './primitives/layout';\nimport { AutocompleteElement, ButtonElement, CheckboxElement, ColorSwatchElement, DatePickerElement, FieldElement, FormElement, FormItemElement, ImagePlaceholderElement, NumberInputElement, PinInputElement, ProgressElement, RadioElement, RangeElement, RatingElement, SelectElement, SliderElement, TextareaElement, ToggleElement, UploadElement } from './primitives/controls';\nimport { AvatarElement, BadgeElement, BreadcrumbElement, CommandPaletteElement, ContextMenuElement, KbdElement, ListElement, ListItemElement, MenuElement, MenuItemElement, PaginationElement, SegmentedElement, StepsElement, TabElement, TabsElement, TocElement } from './primitives/navigation';\nimport { AccordionElement, AccordionItemElement, AlertElement, ApiKeyElement, AuditRowElement, BannerElement, BulkActionBarElement, CalendarElement, CardElement, ChipElement, CodeBlockElement, CountdownElement, DiffElement, DrawerElement, EmptyElement, ImageGridElement, KanbanCardElement, KanbanColumnElement, KanbanElement, KeyValueElement, KvRowElement, LoadingElement, ModalElement, OverlayElement, PermissionGateElement, QuotaBarElement, ResultElement, SkeletonElement, StatCardElement, TableElement, TableRowElement, TagElement, TimelineElement, TimelineItemElement, TooltipElement, TreeElement, TreeItemElement, WorkflowNodeElement } from './primitives/data-display';\nimport { IosActionSheetElement, IosAlertElement, IosButtonElement, IosListElement, IosListItemElement, IosNavbarElement, IosSearchElement, IosSegmentedElement, IosStepperElement, IosSwitchElement, IosTabbarElement } from './primitives/ios';\nimport { MacDisclosureElement, MacMenubarElement, MacPopoverElement, MacSegmentedElement, MacSheetElement, MacSidebarElement, MacSourceItemElement, MacStepperElement, MacTableElement, MacToolbarElement, MacWindowElement } from './primitives/macos';\nimport { AgentOutputElement, AssistantMessageElement, ChatElement, CitationElement, ComposerElement, MessageActionsElement, ReasoningElement, SuggestionsElement, SystemMessageElement, TokenUsageElement, ToolCallElement, TypingElement, UserMessageElement } from './primitives/agent';\n\n/** Map a language tag to its Web Component tag via the shared vocabulary. */\n\nexport function registerAll() {\n define('page-el', RpPage);\n define('main-view', RpMainView);\n define('annotation-el', RpAnnotation);\n define('enum-el', RpEnum);\n define('enum-item', RpEnumItem);\n const pairs: Array<[string, CustomElementConstructor]> = [\n // layout\n ['viewport', ViewportElement], ['layout', LayoutElement], ['panel', PanelElement], ['navigator', NavbarElement], ['sidebar', SidebarElement], ['logo', LogoElement], ['split-pane', SplitPaneElement], ['divider', DividerElement], ['spacer', SpacerElement],\n // controls\n ['search', FieldElement], ['input', FieldElement], ['textarea', TextareaElement], ['select', SelectElement], ['button', ButtonElement], ['button-group', GenericElement], ['checkbox', CheckboxElement], ['radio', RadioElement], ['toggle', ToggleElement], ['form', FormElement], ['form-item', FormItemElement], ['date-picker', DatePickerElement], ['upload', UploadElement], ['image-placeholder', ImagePlaceholderElement], ['progress', ProgressElement], ['slider', SliderElement], ['range', RangeElement], ['number-input', NumberInputElement], ['rating', RatingElement], ['pin-input', PinInputElement], ['color-swatch', ColorSwatchElement], ['autocomplete', AutocompleteElement],\n // navigation\n ['badge', BadgeElement], ['avatar', AvatarElement], ['list', ListElement], ['list-item', ListItemElement], ['tabs', TabsElement], ['tab', TabElement], ['pagination', PaginationElement], ['steps', StepsElement], ['breadcrumb', BreadcrumbElement], ['segmented', SegmentedElement], ['command-palette', CommandPaletteElement], ['context-menu', ContextMenuElement], ['menu', MenuElement], ['menu-item', MenuItemElement], ['toc', TocElement], ['kbd', KbdElement],\n // data display\n ['table', TableElement], ['table-row', TableRowElement], ['bulk-action-bar', BulkActionBarElement], ['empty', EmptyElement], ['loading', LoadingElement], ['alert', AlertElement], ['toast', AlertElement], ['dropdown', OverlayElement], ['popover', OverlayElement], ['tooltip', TooltipElement], ['modal', ModalElement], ['drawer', DrawerElement], ['card', CardElement], ['stat-card', StatCardElement], ['tag', TagElement], ['chip', ChipElement], ['tree', TreeElement], ['tree-item', TreeItemElement], ['timeline', TimelineElement], ['timeline-item', TimelineItemElement], ['calendar', CalendarElement], ['kanban', KanbanElement], ['kanban-column', KanbanColumnElement], ['kanban-card', KanbanCardElement], ['code-block', CodeBlockElement], ['diff', DiffElement], ['image-grid', ImageGridElement], ['key-value', KeyValueElement], ['kv-row', KvRowElement], ['accordion', AccordionElement], ['accordion-item', AccordionItemElement], ['banner', BannerElement], ['skeleton', SkeletonElement], ['countdown', CountdownElement], ['result', ResultElement], ['permission-gate', PermissionGateElement], ['quota-bar', QuotaBarElement], ['api-key', ApiKeyElement], ['audit-row', AuditRowElement], ['workflow-node', WorkflowNodeElement],\n // iOS\n ['ios-navbar', IosNavbarElement], ['ios-tabbar', IosTabbarElement], ['ios-list', IosListElement], ['ios-list-item', IosListItemElement], ['ios-action-sheet', IosActionSheetElement], ['ios-alert', IosAlertElement], ['ios-switch', IosSwitchElement], ['ios-segmented', IosSegmentedElement], ['ios-button', IosButtonElement], ['ios-search', IosSearchElement], ['ios-stepper', IosStepperElement],\n // macOS\n ['macos-window', MacWindowElement], ['macos-toolbar', MacToolbarElement], ['macos-menubar', MacMenubarElement], ['macos-sidebar', MacSidebarElement], ['macos-source-item', MacSourceItemElement], ['macos-segmented', MacSegmentedElement], ['macos-popover', MacPopoverElement], ['macos-sheet', MacSheetElement], ['macos-stepper', MacStepperElement], ['macos-disclosure', MacDisclosureElement], ['macos-table', MacTableElement],\n // agent / conversational UI\n ['chat', ChatElement], ['user-message', UserMessageElement], ['assistant-message', AssistantMessageElement], ['system-message', SystemMessageElement], ['tool-call', ToolCallElement], ['agent-output', AgentOutputElement], ['reasoning', ReasoningElement], ['message-actions', MessageActionsElement], ['suggestions', SuggestionsElement], ['typing', TypingElement], ['composer', ComposerElement], ['citation', CitationElement], ['token-usage', TokenUsageElement]\n ];\n // Guard against vocabulary drift: every primitive must be in the shared map.\n // (A miss would silently register under the wrong tag via identity fallback.)\n for (const [suffix] of pairs) {\n if (toComponentTag(suffix) === suffix && !suffix.includes('-'))\n console.warn(`[rpui] registry tag \"${suffix}\" missing from RPML vocabulary`);\n }\n for (const [suffix, ctor] of pairs) { define(toComponentTag(suffix), ctor); }\n}\n","import { registerAll } from './registry';\nimport { parseToPage, rewriteTags } from 'rpml-parser';\n\nregisterAll();\n\nexport { registerAll, parseToPage, rewriteTags };\n"],"names":["stage"],"mappings":"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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA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"}
|