@21stware/rpui 0.1.1 → 0.2.1
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 +1 -1
- package/SKILL.md +279 -0
- package/dist/canvas/annotation.d.ts +6 -0
- package/dist/core/icons.d.ts +1 -1
- package/dist/core/style.d.ts +1 -1
- package/dist/primitives/agent.d.ts +39 -0
- package/dist/primitives/controls.d.ts +21 -0
- package/dist/primitives/data-display.d.ts +75 -0
- package/dist/primitives/ios.d.ts +33 -0
- package/dist/primitives/layout.d.ts +9 -0
- package/dist/primitives/macos.d.ts +33 -0
- package/dist/primitives/navigation.d.ts +21 -0
- package/dist/rpui.js +1360 -10
- package/dist/rpui.js.map +1 -1
- package/llms.txt +106 -3
- package/package.json +4 -4
- package/skill.txt +0 -143
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/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:13px; height:13px; background:var(--rp-purple); border-radius:50%; }\n.rp-annotation-marker.triangle { width:0; height:0; border-left:7px solid transparent; border-right:7px solid transparent; border-bottom:13px solid var(--rp-success); }\n.rp-annotation-body { display:block; width:fit-content; max-width:920px; }\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 { 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 { width:34px; height:20px; border-radius:999px; background:#d1d5db; padding:2px; }\n.rp-toggle-dot { width:16px; height:16px; border-radius:999px; background:#fff; 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\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 connectedCallback() {\n injectStyle();\n if (this.dataset.rpReady) return;\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 marker.innerHTML = kind === 'drop' ? `<span>${escapeHtml(id)}</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\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'); } }\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';\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};\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 } 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\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\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\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 { GenericElement, LayoutElement, LogoElement, NavbarElement, PanelElement, SidebarElement, ViewportElement } from './primitives/layout';\nimport { ButtonElement, CheckboxElement, DatePickerElement, FieldElement, FormElement, FormItemElement, ImagePlaceholderElement, ProgressElement, RadioElement, SelectElement, TextareaElement, ToggleElement, UploadElement } from './primitives/controls';\nimport { AvatarElement, BadgeElement, BreadcrumbElement, ListElement, ListItemElement, PaginationElement, StepsElement, TabElement, TabsElement } from './primitives/navigation';\nimport { AlertElement, BulkActionBarElement, CardElement, DrawerElement, EmptyElement, LoadingElement, ModalElement, OverlayElement, StatCardElement, TableElement, TableRowElement, TagElement, TooltipElement } from './primitives/data-display';\n\nexport function registerAll() { define('rp-page', RpPage); define('proto-page', RpPage); define('rp-main-view', RpMainView); define('proto-main-view', RpMainView); define('rp-annotation', RpAnnotation); define('proto-annotation', RpAnnotation); define('rp-enum', RpEnum); define('proto-enum', RpEnum); define('rp-enum-item', RpEnumItem); define('proto-enum-item', RpEnumItem); const pairs: Array<[string, CustomElementConstructor]> = [ ['viewport', ViewportElement], ['layout', LayoutElement], ['panel', PanelElement], ['navbar', NavbarElement], ['sidebar', SidebarElement], ['logo', LogoElement], ['search', FieldElement], ['input', FieldElement], ['textarea', TextareaElement], ['select', SelectElement], ['badge', BadgeElement], ['avatar', AvatarElement], ['list', ListElement], ['list-item', ListItemElement], ['tabs', TabsElement], ['tab', TabElement], ['button', ButtonElement], ['button-group', GenericElement], ['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], ['checkbox', CheckboxElement], ['radio', RadioElement], ['toggle', ToggleElement], ['form', FormElement], ['form-item', FormItemElement], ['date-picker', DatePickerElement], ['upload', UploadElement], ['image-placeholder', ImagePlaceholderElement], ['progress', ProgressElement], ['pagination', PaginationElement], ['steps', StepsElement], ['breadcrumb', BreadcrumbElement] ]; for (const [suffix, ctor] of pairs) { define(`snap-${suffix}`, ctor); define(`rp-${suffix}`, ctor); } }\n\n\n","import { registerAll } from './registry';\n\nregisterAll();\n\nexport { registerAll };\n"],"names":["stage"],"mappings":"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"}
|
|
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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"}
|