hermesbuttons 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +397 -0
- package/dist/chunk-3CPSZAJ2.mjs +398 -0
- package/dist/chunk-3CPSZAJ2.mjs.map +1 -0
- package/dist/hermes-button-OWZRXNSO.mjs +263 -0
- package/dist/hermes-button-OWZRXNSO.mjs.map +1 -0
- package/dist/hermes-skill-button-5MLIQS4T.mjs +263 -0
- package/dist/hermes-skill-button-5MLIQS4T.mjs.map +1 -0
- package/dist/index.d.mts +245 -0
- package/dist/index.d.ts +245 -0
- package/dist/index.global.js +920 -0
- package/dist/index.global.js.map +1 -0
- package/dist/index.js +921 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +921 -0
- package/dist/index.mjs.map +1 -0
- package/dist/react.d.mts +84 -0
- package/dist/react.d.ts +84 -0
- package/dist/react.js +920 -0
- package/dist/react.js.map +1 -0
- package/dist/react.mjs +2 -0
- package/dist/react.mjs.map +1 -0
- package/dist/vue.d.mts +64 -0
- package/dist/vue.d.ts +64 -0
- package/dist/vue.js +920 -0
- package/dist/vue.js.map +1 -0
- package/dist/vue.mjs +920 -0
- package/dist/vue.mjs.map +1 -0
- package/package.json +68 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/icons.ts","../src/themes.ts","../src/popup-dialog.ts","../src/hermes-button.ts","../src/hermes-skill-button.ts","../src/structured-data.ts","../src/index.ts"],"names":["HERMES_ICON","HERMES_SKILL_ICON","COPY_ICON","CHECK_ICON","CLOSE_ICON","BRAND_COLOR","BRAND_COLOR_HOVER","BRAND_COLOR_ACTIVE","ALT_BRAND_COLOR","themes","resolveTheme","theme","themeToCSS","tokens","SHAPE_MAP","SIZE_MAP","POPUP_STYLES","HermesPopupDialog","opts","prefersDark","base","brand","variant","title","description","command","fullCommand","skillUrl","icon","isHermesTerminal","displayCommand","steps","fullPrompt","e","target","action","cmd","mq","handler","button","label","iconContainer","textarea","dialog","backdrop","str","div","showPopup","options","popup","BUTTON_STYLES","HermesButton","size","shape","promptFlag","popupTitle","popupDescription","link","resolvedTheme","sizeTokens","radius","bgOverride","borderOverride","textOverride","btn","registerHermesButton","tagName","createHermesButton","el","HermesSkillButton","registerHermesSkillButton","createHermesSkillButton","discoverButtons","results","generateStructuredData","buttons","entry","injectStructuredData","existing","data","script","register"],"mappings":"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","file":"index.js","sourcesContent":["export const HERMES_ICON = `<svg viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" class=\"hb-icon\">\n <!-- Wing helmet -->\n <path d=\"M12 2C8.5 2 6 4.5 6 7c0 1.5.5 2.8 1.5 3.8L6 14h12l-1.5-3.2C17.5 9.8 18 8.5 18 7c0-2.5-2.5-5-6-5z\" fill=\"currentColor\" opacity=\"0.2\"/>\n <path d=\"M12 2C8.5 2 6 4.5 6 7c0 1.5.5 2.8 1.5 3.8L6 14h12l-1.5-3.2C17.5 9.8 18 8.5 18 7c0-2.5-2.5-5-6-5z\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\" stroke-linejoin=\"round\"/>\n <!-- Wings -->\n <path d=\"M6 6.5C4.5 5 2 5 2 7s1.5 3 3 3\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n <path d=\"M18 6.5C19.5 5 22 5 22 7s-1.5 3-3 3\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n <!-- Caduceus staff -->\n <line x1=\"12\" y1=\"14\" x2=\"12\" y2=\"22\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\"/>\n <!-- Snakes -->\n <path d=\"M9.5 16c1.5 1 3.5 1 5 0\" stroke=\"currentColor\" stroke-width=\"1.3\" stroke-linecap=\"round\" fill=\"none\"/>\n <path d=\"M9.5 19c1.5 1 3.5 1 5 0\" stroke=\"currentColor\" stroke-width=\"1.3\" stroke-linecap=\"round\" fill=\"none\"/>\n <!-- Eye -->\n <circle cx=\"12\" cy=\"7.5\" r=\"1.5\" fill=\"currentColor\"/>\n</svg>`;\n\nexport const HERMES_SKILL_ICON = `<svg viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" class=\"hb-icon\">\n <!-- Brain/memory symbol -->\n <path d=\"M12 3C8 3 5 6 5 9c0 2 1 3.5 2 4.5V16a2 2 0 002 2h6a2 2 0 002-2v-2.5c1-1 2-2.5 2-4.5 0-3-3-6-7-6z\" fill=\"currentColor\" opacity=\"0.15\"/>\n <path d=\"M12 3C8 3 5 6 5 9c0 2 1 3.5 2 4.5V16a2 2 0 002 2h6a2 2 0 002-2v-2.5c1-1 2-2.5 2-4.5 0-3-3-6-7-6z\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\" stroke-linejoin=\"round\"/>\n <!-- Neural connections -->\n <path d=\"M9 9.5c0-1 .5-2 1.5-2.5M15 9.5c0-1-.5-2-1.5-2.5M10.5 11c.5.5 1.5 1 3 0\" stroke=\"currentColor\" stroke-width=\"1.2\" stroke-linecap=\"round\" fill=\"none\"/>\n <!-- Growing roots -->\n <path d=\"M9 18v2M12 18v3M15 18v2\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n <!-- Sparkle -->\n <circle cx=\"8\" cy=\"6\" r=\"0.8\" fill=\"currentColor\"/>\n <circle cx=\"16\" cy=\"6\" r=\"0.8\" fill=\"currentColor\"/>\n</svg>`;\n\nexport const COPY_ICON = `<svg viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" class=\"hb-icon-sm\">\n <rect x=\"5\" y=\"5\" width=\"8\" height=\"8\" rx=\"1.5\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\"/>\n <path d=\"M3 10V3.5A1.5 1.5 0 014.5 2H10\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n</svg>`;\n\nexport const CHECK_ICON = `<svg viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" class=\"hb-icon-sm\">\n <path d=\"M3 8.5l3.5 3.5L13 4\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n</svg>`;\n\nexport const DOWNLOAD_ICON = `<svg viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" class=\"hb-icon-sm\">\n <path d=\"M8 2v8m0 0l-3-3m3 3l3-3\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M3 12v1.5a1 1 0 001 1h8a1 1 0 001-1V12\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n</svg>`;\n\nexport const CLOSE_ICON = `<svg viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" class=\"hb-icon-sm\">\n <path d=\"M4 4l8 8m0-8l-8 8\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n</svg>`;\n\nexport const TERMINAL_ICON = `<svg viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" class=\"hb-icon-sm\">\n <rect x=\"1\" y=\"2\" width=\"14\" height=\"12\" rx=\"2\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\"/>\n <path d=\"M4 6l3 2.5L4 11\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M9 11h3\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n</svg>`;\n","import type { ThemeTokens, Theme } from './types';\n\nexport const BRAND_COLOR = '#7C3AED';\nexport const BRAND_COLOR_HOVER = '#6D28D9';\nexport const BRAND_COLOR_ACTIVE = '#5B21B6';\n\nexport const ALT_BRAND_COLOR = '#14B8A6';\n\nexport const themes: Record<Exclude<Theme, 'system'>, ThemeTokens> = {\n branded: {\n bg: BRAND_COLOR,\n text: '#FFFFFF',\n border: 'transparent',\n surface: '#FFFFFF',\n surfaceText: '#1A1025',\n muted: '#7C7589',\n primary: BRAND_COLOR,\n primaryText: '#FFFFFF',\n codeBg: '#1A1025',\n codeText: '#F3EEFF',\n },\n 'branded-alt': {\n bg: ALT_BRAND_COLOR,\n text: '#FFFFFF',\n border: 'transparent',\n surface: '#FFFFFF',\n surfaceText: '#1A1025',\n muted: '#7C7589',\n primary: ALT_BRAND_COLOR,\n primaryText: '#FFFFFF',\n codeBg: '#1A1025',\n codeText: '#F3EEFF',\n },\n dark: {\n bg: '#1A1025',\n text: '#F3EEFF',\n border: '#2D2440',\n surface: '#231A35',\n surfaceText: '#F3EEFF',\n muted: '#9F95B0',\n primary: BRAND_COLOR,\n primaryText: '#FFFFFF',\n codeBg: '#0F0A18',\n codeText: '#F3EEFF',\n },\n light: {\n bg: '#FFFFFF',\n text: '#1A1025',\n border: '#E8E0F0',\n surface: '#FAF8FF',\n surfaceText: '#1A1025',\n muted: '#7C7589',\n primary: BRAND_COLOR,\n primaryText: '#FFFFFF',\n codeBg: '#1A1025',\n codeText: '#F3EEFF',\n },\n};\n\nexport function resolveTheme(theme: Theme): ThemeTokens {\n if (theme !== 'system') return themes[theme];\n if (typeof window === 'undefined') return themes.light;\n return window.matchMedia('(prefers-color-scheme: dark)').matches\n ? themes.dark\n : themes.light;\n}\n\nexport function themeToCSS(tokens: ThemeTokens): string {\n return `\n --hb-bg: ${tokens.bg};\n --hb-text: ${tokens.text};\n --hb-border: ${tokens.border};\n --hb-surface: ${tokens.surface};\n --hb-surface-text: ${tokens.surfaceText};\n --hb-muted: ${tokens.muted};\n --hb-primary: ${tokens.primary};\n --hb-primary-text: ${tokens.primaryText};\n --hb-code-bg: ${tokens.codeBg};\n --hb-code-text: ${tokens.codeText};\n `;\n}\n\nexport const SHAPE_MAP = {\n rounded: { sm: '0.375rem', md: '0.5rem', lg: '0.625rem' },\n pill: { sm: '999px', md: '999px', lg: '999px' },\n square: { sm: '0', md: '0', lg: '0' },\n} as const;\n\nexport const SIZE_MAP = {\n sm: { height: '2rem', fontSize: '0.75rem', iconSize: '0.875rem', padding: '0 0.75rem', ccPadding: '0 0.5rem', gap: '0.375rem', radius: '0.375rem' },\n md: { height: '2.5rem', fontSize: '0.875rem', iconSize: '1.125rem', padding: '0 1rem', ccPadding: '0 0.75rem', gap: '0.5rem', radius: '0.5rem' },\n lg: { height: '3rem', fontSize: '1rem', iconSize: '1.375rem', padding: '0 1.25rem', ccPadding: '0 1rem', gap: '0.625rem', radius: '0.625rem' },\n};\n","import type { PopupOptions, ThemeTokens } from './types';\nimport { HERMES_ICON, HERMES_SKILL_ICON, COPY_ICON, CHECK_ICON, CLOSE_ICON } from './icons';\nimport { resolveTheme, themeToCSS, BRAND_COLOR_HOVER } from './themes';\n\nconst POPUP_STYLES = `\n :host {\n position: fixed;\n inset: 0;\n z-index: 999999;\n display: flex;\n align-items: center;\n justify-content: center;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;\n }\n\n * { box-sizing: border-box; margin: 0; padding: 0; }\n\n .hb-backdrop {\n position: absolute;\n inset: 0;\n background: rgba(0, 0, 0, 0.5);\n backdrop-filter: blur(4px);\n -webkit-backdrop-filter: blur(4px);\n animation: hb-fade-in 0.15s ease-out;\n }\n\n .hb-dialog {\n position: relative;\n width: 90%;\n max-width: 460px;\n background: var(--hb-surface);\n color: var(--hb-surface-text);\n border-radius: 16px;\n box-shadow: 0 24px 48px -12px rgba(0, 0, 0, 0.25), 0 0 0 1px var(--hb-border);\n overflow: hidden;\n animation: hb-scale-in 0.2s ease-out;\n }\n\n .hb-dialog-header {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 20px 24px 16px;\n border-bottom: 1px solid var(--hb-border);\n }\n\n .hb-dialog-header-icon {\n width: 36px;\n height: 36px;\n color: var(--hb-primary);\n flex-shrink: 0;\n }\n\n .hb-dialog-header-text {\n flex: 1;\n min-width: 0;\n }\n\n .hb-dialog-title {\n font-size: 16px;\n font-weight: 600;\n line-height: 1.3;\n color: var(--hb-surface-text);\n }\n\n .hb-dialog-description {\n font-size: 13px;\n color: var(--hb-muted);\n margin-top: 2px;\n line-height: 1.4;\n }\n\n .hb-dialog-close {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n border: none;\n background: transparent;\n color: var(--hb-muted);\n cursor: pointer;\n border-radius: 8px;\n flex-shrink: 0;\n transition: background 0.15s, color 0.15s;\n }\n\n .hb-dialog-close:hover {\n background: var(--hb-border);\n color: var(--hb-surface-text);\n }\n\n .hb-dialog-close svg { width: 14px; height: 14px; }\n\n .hb-dialog-body { padding: 20px 24px; }\n\n .hb-step {\n display: flex;\n gap: 12px;\n margin-bottom: 16px;\n }\n\n .hb-step:last-child { margin-bottom: 0; }\n\n .hb-step-num {\n width: 24px;\n height: 24px;\n border-radius: 50%;\n background: var(--hb-primary);\n color: var(--hb-primary-text);\n font-size: 12px;\n font-weight: 600;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n margin-top: 1px;\n }\n\n .hb-step-content {\n flex: 1;\n min-width: 0;\n }\n\n .hb-step-label {\n font-size: 13px;\n font-weight: 500;\n color: var(--hb-surface-text);\n margin-bottom: 8px;\n line-height: 1.4;\n }\n\n .hb-code-block {\n display: flex;\n align-items: center;\n background: var(--hb-code-bg);\n color: var(--hb-code-text);\n border-radius: 10px;\n padding: 2px 2px 2px 14px;\n font-family: 'SF Mono', 'Fira Code', 'Cascadia Code', Consolas, 'Liberation Mono', Menlo, monospace;\n font-size: 13px;\n line-height: 1.5;\n gap: 8px;\n overflow: hidden;\n }\n\n .hb-code-text {\n flex: 1;\n overflow-x: auto;\n white-space: nowrap;\n padding: 10px 0;\n scrollbar-width: none;\n }\n\n .hb-code-text::-webkit-scrollbar { display: none; }\n\n .hb-code-prefix {\n color: var(--hb-muted);\n user-select: none;\n margin-right: 6px;\n }\n\n .hb-copy-btn {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 6px;\n height: 36px;\n min-width: 36px;\n padding: 0 12px;\n border: none;\n background: var(--hb-primary);\n color: var(--hb-primary-text);\n cursor: pointer;\n border-radius: 8px;\n font-family: inherit;\n font-size: 12px;\n font-weight: 500;\n flex-shrink: 0;\n transition: background 0.15s, transform 0.1s;\n white-space: nowrap;\n }\n\n .hb-copy-btn:hover { background: ${BRAND_COLOR_HOVER}; }\n .hb-copy-btn:active { transform: scale(0.96); }\n .hb-copy-btn svg { width: 14px; height: 14px; }\n\n .hb-copy-btn[data-copied=\"true\"] {\n background: #16a34a;\n }\n\n .hb-dialog-footer {\n padding: 16px 24px 20px;\n display: flex;\n flex-direction: column;\n gap: 10px;\n }\n\n .hb-action-btn {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n width: 100%;\n height: 44px;\n border: none;\n background: var(--hb-primary);\n color: var(--hb-primary-text);\n cursor: pointer;\n border-radius: 10px;\n font-family: inherit;\n font-size: 14px;\n font-weight: 600;\n transition: background 0.15s, transform 0.1s;\n }\n\n .hb-action-btn:hover { background: ${BRAND_COLOR_HOVER}; }\n .hb-action-btn:active { transform: scale(0.98); }\n .hb-action-btn svg { width: 16px; height: 16px; }\n\n .hb-hint {\n font-size: 12px;\n color: var(--hb-muted);\n text-align: center;\n line-height: 1.4;\n }\n\n .hb-hint kbd {\n display: inline-block;\n padding: 1px 5px;\n font-family: inherit;\n font-size: 11px;\n background: var(--hb-border);\n border-radius: 4px;\n border: 1px solid var(--hb-border);\n }\n\n @keyframes hb-fade-in {\n from { opacity: 0; }\n to { opacity: 1; }\n }\n\n @keyframes hb-scale-in {\n from { opacity: 0; transform: scale(0.95) translateY(8px); }\n to { opacity: 1; transform: scale(1) translateY(0); }\n }\n\n @media (max-width: 480px) {\n .hb-dialog {\n width: 96%;\n max-width: none;\n border-radius: 14px;\n max-height: 90dvh;\n overflow-y: auto;\n overscroll-behavior: contain;\n }\n\n .hb-dialog-header { padding: 16px 16px 12px; gap: 10px; }\n .hb-dialog-header-icon { width: 28px; height: 28px; }\n .hb-dialog-body { padding: 16px; }\n .hb-dialog-footer { padding: 12px 16px 16px; }\n\n .hb-step { gap: 10px; margin-bottom: 14px; }\n .hb-step-num { width: 22px; height: 22px; font-size: 11px; }\n .hb-step-label { font-size: 12px; margin-bottom: 6px; }\n\n .hb-code-block { font-size: 12px; padding: 2px 2px 2px 10px; border-radius: 8px; }\n .hb-copy-btn { height: 32px; padding: 0 10px; font-size: 11px; border-radius: 6px; }\n .hb-action-btn { height: 40px; font-size: 13px; border-radius: 8px; }\n .hb-hint { font-size: 11px; }\n }\n\n @media (max-width: 360px) {\n .hb-dialog { width: 100%; border-radius: 12px 12px 0 0; align-self: flex-end; }\n .hb-copy-btn span { display: none; }\n .hb-copy-btn { min-width: 32px; padding: 0 8px; }\n }\n\n @supports (padding: env(safe-area-inset-bottom)) {\n .hb-dialog-footer { padding-bottom: calc(20px + env(safe-area-inset-bottom)); }\n }\n`;\n\nexport class HermesPopupDialog extends HTMLElement {\n private _options!: PopupOptions;\n private _mqCleanup: (() => void) | null = null;\n\n constructor() {\n super();\n this.attachShadow({ mode: 'open' });\n }\n\n set options(opts: PopupOptions) {\n this._options = opts;\n this.render();\n }\n\n get options() {\n return this._options;\n }\n\n disconnectedCallback() {\n this._mqCleanup?.();\n this._mqCleanup = null;\n }\n\n private resolvePopupTokens(): ThemeTokens {\n const { theme } = this._options;\n\n if (theme === 'dark' || theme === 'light') return resolveTheme(theme);\n\n const prefersDark = typeof window !== 'undefined'\n && window.matchMedia('(prefers-color-scheme: dark)').matches;\n\n if (theme === 'system') {\n return prefersDark ? resolveTheme('dark') : resolveTheme('light');\n }\n\n const base = prefersDark ? resolveTheme('dark') : resolveTheme('light');\n const brand = resolveTheme(theme);\n return {\n ...base,\n primary: brand.primary,\n primaryText: brand.primaryText,\n };\n }\n\n private render() {\n if (!this.shadowRoot || !this._options) return;\n\n const { variant, title, description, command, fullCommand, skillUrl } = this._options;\n const tokens = this.resolvePopupTokens();\n const icon = variant === 'hermes' ? HERMES_ICON : HERMES_SKILL_ICON;\n\n const isHermesTerminal = variant === 'hermes';\n const displayCommand = fullCommand || command;\n\n this.shadowRoot.innerHTML = `\n <style>${POPUP_STYLES}</style>\n <div style=\"${themeToCSS(tokens)}\">\n <div class=\"hb-backdrop\" data-action=\"close\"></div>\n <div class=\"hb-dialog\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"hb-dialog-title\">\n <div class=\"hb-dialog-header\">\n <div class=\"hb-dialog-header-icon\">${icon}</div>\n <div class=\"hb-dialog-header-text\">\n <div class=\"hb-dialog-title\" id=\"hb-dialog-title\">${title}</div>\n ${description ? `<div class=\"hb-dialog-description\">${description}</div>` : ''}\n </div>\n <button class=\"hb-dialog-close\" data-action=\"close\" aria-label=\"Close\">${CLOSE_ICON}</button>\n </div>\n <div class=\"hb-dialog-body\">\n ${isHermesTerminal ? this.renderHermesTerminalBody(displayCommand) : this.renderHermesSkillBody(command, skillUrl)}\n </div>\n <div class=\"hb-dialog-footer\">\n ${isHermesTerminal ? `\n <div class=\"hb-hint\">Press <kbd>⌘</kbd>+<kbd>V</kbd> or <kbd>Ctrl</kbd>+<kbd>V</kbd> in your terminal to run</div>\n ` : `\n <div class=\"hb-hint\">Press <kbd>⌘</kbd>+<kbd>V</kbd> or <kbd>Ctrl</kbd>+<kbd>V</kbd> in your Hermes session to run</div>\n `}\n </div>\n </div>\n </div>\n `;\n\n this.setupListeners();\n this.setupSystemThemeWatch();\n }\n\n private renderHermesTerminalBody(command: string): string {\n return `\n <div class=\"hb-step\">\n <div class=\"hb-step-num\">1</div>\n <div class=\"hb-step-content\">\n <div class=\"hb-step-label\">Copy this command to your clipboard</div>\n <div class=\"hb-code-block\">\n <div class=\"hb-code-text\"><span class=\"hb-code-prefix\">$</span>${this.escapeHtml(command)}</div>\n <button class=\"hb-copy-btn\" data-action=\"copy\" data-command=\"${this.escapeAttr(command)}\">${COPY_ICON}<span>Copy</span></button>\n </div>\n </div>\n </div>\n <div class=\"hb-step\">\n <div class=\"hb-step-num\">2</div>\n <div class=\"hb-step-content\">\n <div class=\"hb-step-label\">Paste and run in your terminal</div>\n </div>\n </div>\n `;\n }\n\n private renderHermesSkillBody(command: string, skillUrl?: string): string {\n let steps = '';\n\n if (skillUrl) {\n const fullPrompt = `Install the skill from ${skillUrl} and run ${command}`;\n steps += `\n <div class=\"hb-step\">\n <div class=\"hb-step-num\">1</div>\n <div class=\"hb-step-content\">\n <div class=\"hb-step-label\">Copy this prompt to your clipboard</div>\n <div class=\"hb-code-block\">\n <div class=\"hb-code-text\">${this.escapeHtml(fullPrompt)}</div>\n <button class=\"hb-copy-btn\" data-action=\"copy\" data-command=\"${this.escapeAttr(fullPrompt)}\">${COPY_ICON}<span>Copy</span></button>\n </div>\n </div>\n </div>\n <div class=\"hb-step\">\n <div class=\"hb-step-num\">2</div>\n <div class=\"hb-step-content\">\n <div class=\"hb-step-label\">Paste into a Hermes session — the agent will fetch the skill and set it up for you</div>\n </div>\n </div>\n `;\n } else {\n steps += `\n <div class=\"hb-step\">\n <div class=\"hb-step-num\">1</div>\n <div class=\"hb-step-content\">\n <div class=\"hb-step-label\">Copy this command to your clipboard</div>\n <div class=\"hb-code-block\">\n <div class=\"hb-code-text\">${this.escapeHtml(command)}</div>\n <button class=\"hb-copy-btn\" data-action=\"copy\" data-command=\"${this.escapeAttr(command)}\">${COPY_ICON}<span>Copy</span></button>\n </div>\n </div>\n </div>\n <div class=\"hb-step\">\n <div class=\"hb-step-num\">2</div>\n <div class=\"hb-step-content\">\n <div class=\"hb-step-label\">Paste and send in your Hermes session</div>\n </div>\n </div>\n `;\n }\n\n return steps;\n }\n\n private setupListeners() {\n if (!this.shadowRoot) return;\n\n this.shadowRoot.addEventListener('click', (e) => {\n const target = (e.target as HTMLElement).closest('[data-action]') as HTMLElement | null;\n if (!target) return;\n\n const action = target.dataset.action;\n\n if (action === 'close') {\n this.close();\n } else if (action === 'copy') {\n const cmd = target.dataset.command || '';\n this.copyToClipboard(cmd, target);\n }\n });\n\n this.shadowRoot.addEventListener('keydown', (e) => {\n if ((e as KeyboardEvent).key === 'Escape') this.close();\n });\n }\n\n private setupSystemThemeWatch() {\n this._mqCleanup?.();\n this._mqCleanup = null;\n\n const theme = this._options.theme;\n const needsWatch = theme === 'system' || theme === 'branded' || theme === 'branded-alt';\n if (!needsWatch || typeof window === 'undefined') return;\n\n const mq = window.matchMedia('(prefers-color-scheme: dark)');\n const handler = () => this.render();\n mq.addEventListener('change', handler);\n this._mqCleanup = () => mq.removeEventListener('change', handler);\n }\n\n private async copyToClipboard(command: string, button: HTMLElement) {\n try {\n await navigator.clipboard.writeText(command);\n const label = button.querySelector('span');\n const iconContainer = button;\n\n button.setAttribute('data-copied', 'true');\n if (label) label.textContent = 'Copied!';\n iconContainer.innerHTML = `${CHECK_ICON}<span>Copied!</span>`;\n\n this._options.onCopy?.(command);\n\n setTimeout(() => {\n button.setAttribute('data-copied', 'false');\n iconContainer.innerHTML = `${COPY_ICON}<span>Copy</span>`;\n }, 2000);\n } catch {\n const textarea = document.createElement('textarea');\n textarea.value = command;\n textarea.style.position = 'fixed';\n textarea.style.opacity = '0';\n document.body.appendChild(textarea);\n textarea.select();\n document.execCommand('copy');\n document.body.removeChild(textarea);\n\n this._options.onCopy?.(command);\n }\n }\n\n close() {\n const dialog = this.shadowRoot?.querySelector('.hb-dialog') as HTMLElement;\n const backdrop = this.shadowRoot?.querySelector('.hb-backdrop') as HTMLElement;\n\n if (dialog) {\n dialog.style.animation = 'hb-scale-in 0.15s ease-in reverse';\n }\n if (backdrop) {\n backdrop.style.animation = 'hb-fade-in 0.15s ease-in reverse';\n }\n\n setTimeout(() => {\n this._options.onClose?.();\n this.remove();\n }, 140);\n }\n\n private escapeHtml(str: string): string {\n const div = document.createElement('div');\n div.textContent = str;\n return div.innerHTML;\n }\n\n private escapeAttr(str: string): string {\n return str.replace(/\"/g, '"').replace(/'/g, ''').replace(/</g, '<').replace(/>/g, '>');\n }\n}\n\nif (typeof customElements !== 'undefined' && !customElements.get('hermes-popup-dialog')) {\n customElements.define('hermes-popup-dialog', HermesPopupDialog);\n}\n\nexport function showPopup(options: PopupOptions): HermesPopupDialog {\n const popup = document.createElement('hermes-popup-dialog') as HermesPopupDialog;\n popup.options = options;\n document.body.appendChild(popup);\n return popup;\n}\n","import type { HermesButtonOptions, Theme, Size, Variant, Shape } from './types';\nimport { HERMES_ICON } from './icons';\nimport { resolveTheme, themeToCSS, SIZE_MAP, SHAPE_MAP, BRAND_COLOR, BRAND_COLOR_HOVER, BRAND_COLOR_ACTIVE } from './themes';\nimport { showPopup } from './popup-dialog';\n\nconst BUTTON_STYLES = `\n :host {\n display: inline-block;\n vertical-align: middle;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;\n -webkit-tap-highlight-color: transparent;\n }\n\n * { box-sizing: border-box; margin: 0; padding: 0; }\n\n .hb-btn {\n display: inline-flex;\n align-items: center;\n gap: var(--hb-gap);\n height: var(--hb-height);\n min-height: 44px;\n padding: var(--hb-padding);\n border: 1.5px solid var(--hb-border);\n background: var(--hb-bg);\n color: var(--hb-text);\n font-family: inherit;\n font-size: var(--hb-font-size);\n font-weight: 600;\n line-height: 1;\n border-radius: var(--hb-radius);\n cursor: pointer;\n user-select: none;\n white-space: nowrap;\n touch-action: manipulation;\n transition: background 0.15s ease, border-color 0.15s ease, box-shadow 0.15s ease, transform 0.1s ease, color 0.15s ease;\n text-decoration: none;\n -webkit-font-smoothing: antialiased;\n }\n\n @media (pointer: fine) {\n .hb-btn { min-height: unset; }\n }\n\n /* ─── FILLED ─── */\n\n :host([data-variant=\"filled\"][data-theme=\"branded\"]) .hb-btn,\n :host([data-variant=\"filled\"][data-theme=\"branded-alt\"]) .hb-btn {\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.08);\n }\n :host([data-variant=\"filled\"][data-theme=\"branded\"]) .hb-btn:hover {\n background: ${BRAND_COLOR_HOVER};\n box-shadow: 0 2px 8px rgba(124, 58, 237, 0.35);\n }\n :host([data-variant=\"filled\"][data-theme=\"branded\"]) .hb-btn:active {\n background: ${BRAND_COLOR_ACTIVE};\n transform: scale(0.98);\n }\n :host([data-variant=\"filled\"][data-theme=\"branded-alt\"]) .hb-btn:hover {\n background: #0D9488;\n box-shadow: 0 2px 8px rgba(20, 184, 166, 0.35);\n }\n :host([data-variant=\"filled\"][data-theme=\"branded-alt\"]) .hb-btn:active {\n background: #0F766E;\n transform: scale(0.98);\n }\n\n :host([data-variant=\"filled\"][data-theme=\"dark\"]) .hb-btn {\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2);\n }\n :host([data-variant=\"filled\"][data-theme=\"dark\"]) .hb-btn:hover {\n background: #292524;\n border-color: #57534E;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);\n }\n :host([data-variant=\"filled\"][data-theme=\"dark\"]) .hb-btn:active {\n background: #1C1917;\n transform: scale(0.98);\n }\n\n :host([data-variant=\"filled\"][data-theme=\"light\"]) .hb-btn {\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.06), 0 0 0 1px rgba(0, 0, 0, 0.04);\n }\n :host([data-variant=\"filled\"][data-theme=\"light\"]) .hb-btn:hover {\n border-color: #D6D3D1;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);\n }\n :host([data-variant=\"filled\"][data-theme=\"light\"]) .hb-btn:active {\n background: #FAFAF9;\n transform: scale(0.98);\n }\n\n /* ─── OUTLINE ─── */\n\n :host([data-variant=\"outline\"][data-theme=\"branded\"]) .hb-btn {\n background: transparent;\n border-color: ${BRAND_COLOR};\n color: ${BRAND_COLOR};\n }\n :host([data-variant=\"outline\"][data-theme=\"branded\"]) .hb-btn:hover {\n background: rgba(124, 58, 237, 0.08);\n box-shadow: 0 2px 8px rgba(124, 58, 237, 0.15);\n }\n :host([data-variant=\"outline\"][data-theme=\"branded\"]) .hb-btn:active {\n background: rgba(124, 58, 237, 0.14);\n transform: scale(0.98);\n }\n\n :host([data-variant=\"outline\"][data-theme=\"branded-alt\"]) .hb-btn {\n background: transparent;\n border-color: #14B8A6;\n color: #14B8A6;\n }\n :host([data-variant=\"outline\"][data-theme=\"branded-alt\"]) .hb-btn:hover {\n background: rgba(20, 184, 166, 0.08);\n box-shadow: 0 2px 8px rgba(20, 184, 166, 0.15);\n }\n :host([data-variant=\"outline\"][data-theme=\"branded-alt\"]) .hb-btn:active {\n background: rgba(20, 184, 166, 0.14);\n transform: scale(0.98);\n }\n\n :host([data-variant=\"outline\"][data-theme=\"dark\"]) .hb-btn {\n background: transparent;\n border-color: #57534E;\n color: #F5F0EB;\n }\n :host([data-variant=\"outline\"][data-theme=\"dark\"]) .hb-btn:hover {\n border-color: ${BRAND_COLOR};\n background: rgba(124, 58, 237, 0.08);\n }\n :host([data-variant=\"outline\"][data-theme=\"dark\"]) .hb-btn:active {\n background: rgba(124, 58, 237, 0.14);\n transform: scale(0.98);\n }\n\n :host([data-variant=\"outline\"][data-theme=\"light\"]) .hb-btn {\n background: transparent;\n border-color: #D6D3D1;\n color: #1C1917;\n }\n :host([data-variant=\"outline\"][data-theme=\"light\"]) .hb-btn:hover {\n border-color: ${BRAND_COLOR};\n background: rgba(124, 58, 237, 0.05);\n }\n :host([data-variant=\"outline\"][data-theme=\"light\"]) .hb-btn:active {\n background: rgba(124, 58, 237, 0.1);\n transform: scale(0.98);\n }\n\n /* ─── GHOST ─── */\n\n :host([data-variant=\"ghost\"]) .hb-btn {\n background: transparent;\n border-color: transparent;\n }\n\n :host([data-variant=\"ghost\"][data-theme=\"branded\"]) .hb-btn {\n color: ${BRAND_COLOR};\n }\n :host([data-variant=\"ghost\"][data-theme=\"branded\"]) .hb-btn:hover {\n background: rgba(124, 58, 237, 0.1);\n }\n :host([data-variant=\"ghost\"][data-theme=\"branded\"]) .hb-btn:active {\n background: rgba(124, 58, 237, 0.16);\n transform: scale(0.98);\n }\n\n :host([data-variant=\"ghost\"][data-theme=\"branded-alt\"]) .hb-btn {\n color: #14B8A6;\n }\n :host([data-variant=\"ghost\"][data-theme=\"branded-alt\"]) .hb-btn:hover {\n background: rgba(20, 184, 166, 0.1);\n }\n :host([data-variant=\"ghost\"][data-theme=\"branded-alt\"]) .hb-btn:active {\n background: rgba(20, 184, 166, 0.16);\n transform: scale(0.98);\n }\n\n :host([data-variant=\"ghost\"][data-theme=\"dark\"]) .hb-btn {\n color: #F5F0EB;\n }\n :host([data-variant=\"ghost\"][data-theme=\"dark\"]) .hb-btn:hover {\n background: rgba(255, 255, 255, 0.06);\n }\n :host([data-variant=\"ghost\"][data-theme=\"dark\"]) .hb-btn:active {\n background: rgba(255, 255, 255, 0.1);\n transform: scale(0.98);\n }\n\n :host([data-variant=\"ghost\"][data-theme=\"light\"]) .hb-btn {\n color: #1C1917;\n }\n :host([data-variant=\"ghost\"][data-theme=\"light\"]) .hb-btn:hover {\n background: rgba(0, 0, 0, 0.04);\n }\n :host([data-variant=\"ghost\"][data-theme=\"light\"]) .hb-btn:active {\n background: rgba(0, 0, 0, 0.08);\n transform: scale(0.98);\n }\n\n /* ─── FOCUS ─── */\n\n .hb-btn:focus-visible {\n outline: 2px solid var(--hb-focus-color, ${BRAND_COLOR});\n outline-offset: 2px;\n }\n\n /* ─── ICON ─── */\n\n .hb-btn-icon {\n width: var(--hb-icon-size);\n height: var(--hb-icon-size);\n flex-shrink: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n .hb-btn-icon svg { width: 100%; height: 100%; }\n\n :host([data-variant=\"filled\"][data-theme=\"branded\"]) .hb-btn-icon,\n :host([data-variant=\"filled\"][data-theme=\"branded-alt\"]) .hb-btn-icon {\n color: #FFFFFF;\n --hb-icon-accent: rgba(255,255,255,0.2);\n }\n :host([data-variant=\"filled\"][data-theme=\"dark\"]) .hb-btn-icon {\n color: var(--hb-accent-color, ${BRAND_COLOR});\n }\n :host([data-variant=\"filled\"][data-theme=\"light\"]) .hb-btn-icon {\n color: var(--hb-accent-color, ${BRAND_COLOR});\n }\n\n :host([data-variant=\"outline\"]) .hb-btn-icon,\n :host([data-variant=\"ghost\"]) .hb-btn-icon {\n color: var(--hb-accent-color, ${BRAND_COLOR});\n }\n\n /* ─── LABEL ─── */\n\n .hb-btn-label {\n letter-spacing: -0.01em;\n }\n`;\n\nexport class HermesButton extends HTMLElement {\n static observedAttributes = ['command', 'theme', 'size', 'variant', 'shape', 'popup', 'prompt-flag', 'popup-title', 'popup-description'];\n\n private _options: HermesButtonOptions = {\n command: '',\n theme: 'branded',\n size: 'md',\n variant: 'filled',\n popup: true,\n promptFlag: true,\n };\n\n private _mqCleanup: (() => void) | null = null;\n private _rendered = false;\n\n constructor() {\n super();\n this.attachShadow({ mode: 'open' });\n }\n\n connectedCallback() {\n this.syncFromAttributes();\n this.render();\n this.updateLightDOM();\n }\n\n disconnectedCallback() {\n this._mqCleanup?.();\n this._mqCleanup = null;\n }\n\n attributeChangedCallback() {\n if (!this._rendered) return;\n this.syncFromAttributes();\n this.render();\n this.updateLightDOM();\n }\n\n set options(opts: Partial<HermesButtonOptions>) {\n this._options = { ...this._options, ...opts };\n this.render();\n this.updateLightDOM();\n }\n\n get options() {\n return this._options;\n }\n\n private syncFromAttributes() {\n const command = this.getAttribute('command');\n const theme = this.getAttribute('theme') as Theme | null;\n const size = this.getAttribute('size') as Size | null;\n const variant = this.getAttribute('variant') as Variant | null;\n const shape = this.getAttribute('shape') as Shape | null;\n const popup = this.getAttribute('popup');\n const promptFlag = this.getAttribute('prompt-flag');\n const popupTitle = this.getAttribute('popup-title');\n const popupDescription = this.getAttribute('popup-description');\n\n if (command !== null) this._options.command = command;\n if (theme) this._options.theme = theme;\n if (size) this._options.size = size;\n if (variant) this._options.variant = variant;\n if (shape) this._options.shape = shape;\n if (popup !== null) this._options.popup = popup !== 'false';\n if (promptFlag !== null) this._options.promptFlag = promptFlag !== 'false';\n if (popupTitle !== null) this._options.popupTitle = popupTitle;\n if (popupDescription !== null) this._options.popupDescription = popupDescription;\n }\n\n private updateLightDOM() {\n const { command } = this._options;\n const fullCommand = this.getFullCommand();\n\n this.setAttribute('role', 'button');\n this.setAttribute('tabindex', '0');\n this.setAttribute('aria-label', `Run on Hermes: ${command}`);\n if (this._options.popup !== false) {\n this.setAttribute('aria-haspopup', 'dialog');\n } else {\n this.removeAttribute('aria-haspopup');\n }\n\n let link = this.querySelector('a[data-hb-crawl]') as HTMLAnchorElement | null;\n if (!link) {\n link = document.createElement('a');\n link.setAttribute('data-hb-crawl', '');\n link.setAttribute('aria-hidden', 'true');\n link.style.cssText = 'position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;';\n this.appendChild(link);\n }\n link.href = `https://hermes.ai/run?command=${encodeURIComponent(fullCommand)}`;\n link.textContent = `Run on Hermes: ${command}`;\n link.setAttribute('data-platform', 'hermes');\n link.setAttribute('data-command', command);\n link.setAttribute('data-full-command', fullCommand);\n }\n\n private getResolvedTheme(): Theme {\n return this._options.theme || 'branded';\n }\n\n private getFullCommand(): string {\n const { command, promptFlag } = this._options;\n if (promptFlag === false) return command;\n return `hermes -p \"${command}\"`;\n }\n\n private render() {\n if (!this.shadowRoot) return;\n\n const theme = this.getResolvedTheme();\n const resolvedTheme = theme === 'system' ? (\n typeof window !== 'undefined' && window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'\n ) : theme;\n const variant = this._options.variant || 'filled';\n\n const tokens = resolveTheme(theme);\n const size = this._options.size || 'md';\n const shape = this._options.shape || 'rounded';\n const sizeTokens = SIZE_MAP[size];\n const radius = SHAPE_MAP[shape][size];\n\n this.setAttribute('data-theme', resolvedTheme);\n this.setAttribute('data-variant', variant);\n\n const bgOverride = variant !== 'filled' ? 'transparent' : tokens.bg;\n const borderOverride = variant === 'ghost' ? 'transparent' :\n variant === 'outline' ? tokens.primary : tokens.border;\n const textOverride = variant !== 'filled' ? tokens.primary : tokens.text;\n\n this.shadowRoot.innerHTML = `\n <style>${BUTTON_STYLES}</style>\n <button\n class=\"hb-btn\"\n type=\"button\"\n style=\"\n ${themeToCSS(tokens)}\n --hb-bg: ${bgOverride};\n --hb-border: ${borderOverride};\n --hb-text: ${textOverride};\n --hb-accent-color: ${tokens.primary};\n --hb-focus-color: ${tokens.primary};\n --hb-height: ${sizeTokens.height};\n --hb-font-size: ${sizeTokens.fontSize};\n --hb-icon-size: ${sizeTokens.iconSize};\n --hb-padding: ${sizeTokens.ccPadding};\n --hb-gap: ${sizeTokens.gap};\n --hb-radius: ${radius};\n \"\n aria-label=\"Run on Hermes: ${this._options.command.replace(/\"/g, '"')}\"\n >\n <span class=\"hb-btn-icon\" aria-hidden=\"true\">${HERMES_ICON}</span>\n <span class=\"hb-btn-label\">Run on Hermes</span>\n </button>\n `;\n\n const btn = this.shadowRoot.querySelector('.hb-btn')!;\n btn.addEventListener('click', () => this.handleClick());\n btn.addEventListener('keydown', (e) => {\n if ((e as KeyboardEvent).key === 'Enter' || (e as KeyboardEvent).key === ' ') {\n e.preventDefault();\n this.handleClick();\n }\n });\n this._rendered = true;\n this.setupSystemThemeWatch();\n }\n\n private handleClick() {\n const { popup, command, popupTitle, popupDescription } = this._options;\n const fullCommand = this.getFullCommand();\n\n this.dispatchEvent(new CustomEvent('hb-open', {\n bubbles: true,\n composed: true,\n detail: { command, fullCommand },\n }));\n\n if (popup === false) {\n navigator.clipboard.writeText(fullCommand).then(() => {\n this._options.onCopy?.(fullCommand);\n this.dispatchEvent(new CustomEvent('hb-copy', {\n bubbles: true,\n composed: true,\n detail: { command: fullCommand },\n }));\n });\n return;\n }\n\n showPopup({\n variant: 'hermes',\n theme: this.getResolvedTheme(),\n title: popupTitle || 'Run on Hermes',\n description: popupDescription || 'Execute this command in your terminal to get started with Hermes Agent.',\n command,\n fullCommand,\n onCopy: (cmd: string) => {\n this._options.onCopy?.(cmd);\n this.dispatchEvent(new CustomEvent('hb-copy', {\n bubbles: true,\n composed: true,\n detail: { command: cmd },\n }));\n },\n onClose: () => {\n this.dispatchEvent(new CustomEvent('hb-close', {\n bubbles: true,\n composed: true,\n }));\n },\n });\n }\n\n private setupSystemThemeWatch() {\n this._mqCleanup?.();\n this._mqCleanup = null;\n\n if (this.getResolvedTheme() !== 'system' || typeof window === 'undefined') return;\n\n const mq = window.matchMedia('(prefers-color-scheme: dark)');\n const handler = () => this.render();\n mq.addEventListener('change', handler);\n this._mqCleanup = () => mq.removeEventListener('change', handler);\n }\n}\n\nexport function registerHermesButton(tagName = 'hermes-button') {\n if (typeof customElements === 'undefined') return;\n if (!customElements.get(tagName)) {\n customElements.define(tagName, HermesButton);\n }\n}\n\nregisterHermesButton();\n\nexport function createHermesButton(options: HermesButtonOptions): HermesButton {\n const el = document.createElement('hermes-button') as HermesButton;\n el.options = options;\n return el;\n}\n","import type { HermesSkillButtonOptions, Theme, Size, Variant, Shape } from './types';\nimport { HERMES_SKILL_ICON } from './icons';\nimport { resolveTheme, themeToCSS, SIZE_MAP, SHAPE_MAP, BRAND_COLOR, BRAND_COLOR_HOVER, BRAND_COLOR_ACTIVE } from './themes';\nimport { showPopup } from './popup-dialog';\n\nconst BUTTON_STYLES = `\n :host {\n display: inline-block;\n vertical-align: middle;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;\n -webkit-tap-highlight-color: transparent;\n }\n\n * { box-sizing: border-box; margin: 0; padding: 0; }\n\n .hb-btn {\n display: inline-flex;\n align-items: center;\n gap: var(--hb-gap);\n height: var(--hb-height);\n min-height: 44px;\n padding: var(--hb-padding);\n border: 1.5px solid var(--hb-border);\n background: var(--hb-bg);\n color: var(--hb-text);\n font-family: inherit;\n font-size: var(--hb-font-size);\n font-weight: 600;\n line-height: 1;\n border-radius: var(--hb-radius);\n cursor: pointer;\n user-select: none;\n white-space: nowrap;\n touch-action: manipulation;\n transition: background 0.15s ease, border-color 0.15s ease, box-shadow 0.15s ease, transform 0.1s ease, color 0.15s ease;\n text-decoration: none;\n -webkit-font-smoothing: antialiased;\n }\n\n @media (pointer: fine) {\n .hb-btn { min-height: unset; }\n }\n\n /* ─── FILLED ─── */\n\n :host([data-variant=\"filled\"][data-theme=\"branded\"]) .hb-btn,\n :host([data-variant=\"filled\"][data-theme=\"branded-alt\"]) .hb-btn {\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.08);\n }\n :host([data-variant=\"filled\"][data-theme=\"branded\"]) .hb-btn:hover {\n background: ${BRAND_COLOR_HOVER};\n box-shadow: 0 2px 8px rgba(124, 58, 237, 0.35);\n }\n :host([data-variant=\"filled\"][data-theme=\"branded\"]) .hb-btn:active {\n background: ${BRAND_COLOR_ACTIVE};\n transform: scale(0.98);\n }\n :host([data-variant=\"filled\"][data-theme=\"branded-alt\"]) .hb-btn:hover {\n background: #0D9488;\n box-shadow: 0 2px 8px rgba(20, 184, 166, 0.35);\n }\n :host([data-variant=\"filled\"][data-theme=\"branded-alt\"]) .hb-btn:active {\n background: #0F766E;\n transform: scale(0.98);\n }\n\n :host([data-variant=\"filled\"][data-theme=\"dark\"]) .hb-btn {\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2);\n }\n :host([data-variant=\"filled\"][data-theme=\"dark\"]) .hb-btn:hover {\n background: #292524;\n border-color: #57534E;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);\n }\n :host([data-variant=\"filled\"][data-theme=\"dark\"]) .hb-btn:active {\n background: #1C1917;\n transform: scale(0.98);\n }\n\n :host([data-variant=\"filled\"][data-theme=\"light\"]) .hb-btn {\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.06), 0 0 0 1px rgba(0, 0, 0, 0.04);\n }\n :host([data-variant=\"filled\"][data-theme=\"light\"]) .hb-btn:hover {\n border-color: #D6D3D1;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);\n }\n :host([data-variant=\"filled\"][data-theme=\"light\"]) .hb-btn:active {\n background: #FAFAF9;\n transform: scale(0.98);\n }\n\n /* ─── OUTLINE ─── */\n\n :host([data-variant=\"outline\"][data-theme=\"branded\"]) .hb-btn {\n background: transparent;\n border-color: ${BRAND_COLOR};\n color: ${BRAND_COLOR};\n }\n :host([data-variant=\"outline\"][data-theme=\"branded\"]) .hb-btn:hover {\n background: rgba(124, 58, 237, 0.08);\n box-shadow: 0 2px 8px rgba(124, 58, 237, 0.15);\n }\n :host([data-variant=\"outline\"][data-theme=\"branded\"]) .hb-btn:active {\n background: rgba(124, 58, 237, 0.14);\n transform: scale(0.98);\n }\n\n :host([data-variant=\"outline\"][data-theme=\"branded-alt\"]) .hb-btn {\n background: transparent;\n border-color: #14B8A6;\n color: #14B8A6;\n }\n :host([data-variant=\"outline\"][data-theme=\"branded-alt\"]) .hb-btn:hover {\n background: rgba(20, 184, 166, 0.08);\n box-shadow: 0 2px 8px rgba(20, 184, 166, 0.15);\n }\n :host([data-variant=\"outline\"][data-theme=\"branded-alt\"]) .hb-btn:active {\n background: rgba(20, 184, 166, 0.14);\n transform: scale(0.98);\n }\n\n :host([data-variant=\"outline\"][data-theme=\"dark\"]) .hb-btn {\n background: transparent;\n border-color: #57534E;\n color: #F5F0EB;\n }\n :host([data-variant=\"outline\"][data-theme=\"dark\"]) .hb-btn:hover {\n border-color: ${BRAND_COLOR};\n background: rgba(124, 58, 237, 0.08);\n }\n :host([data-variant=\"outline\"][data-theme=\"dark\"]) .hb-btn:active {\n background: rgba(124, 58, 237, 0.14);\n transform: scale(0.98);\n }\n\n :host([data-variant=\"outline\"][data-theme=\"light\"]) .hb-btn {\n background: transparent;\n border-color: #D6D3D1;\n color: #1C1917;\n }\n :host([data-variant=\"outline\"][data-theme=\"light\"]) .hb-btn:hover {\n border-color: ${BRAND_COLOR};\n background: rgba(124, 58, 237, 0.05);\n }\n :host([data-variant=\"outline\"][data-theme=\"light\"]) .hb-btn:active {\n background: rgba(124, 58, 237, 0.1);\n transform: scale(0.98);\n }\n\n /* ─── GHOST ─── */\n\n :host([data-variant=\"ghost\"]) .hb-btn {\n background: transparent;\n border-color: transparent;\n }\n\n :host([data-variant=\"ghost\"][data-theme=\"branded\"]) .hb-btn {\n color: ${BRAND_COLOR};\n }\n :host([data-variant=\"ghost\"][data-theme=\"branded\"]) .hb-btn:hover {\n background: rgba(124, 58, 237, 0.1);\n }\n :host([data-variant=\"ghost\"][data-theme=\"branded\"]) .hb-btn:active {\n background: rgba(124, 58, 237, 0.16);\n transform: scale(0.98);\n }\n\n :host([data-variant=\"ghost\"][data-theme=\"branded-alt\"]) .hb-btn {\n color: #14B8A6;\n }\n :host([data-variant=\"ghost\"][data-theme=\"branded-alt\"]) .hb-btn:hover {\n background: rgba(20, 184, 166, 0.1);\n }\n :host([data-variant=\"ghost\"][data-theme=\"branded-alt\"]) .hb-btn:active {\n background: rgba(20, 184, 166, 0.16);\n transform: scale(0.98);\n }\n\n :host([data-variant=\"ghost\"][data-theme=\"dark\"]) .hb-btn {\n color: #F5F0EB;\n }\n :host([data-variant=\"ghost\"][data-theme=\"dark\"]) .hb-btn:hover {\n background: rgba(255, 255, 255, 0.06);\n }\n :host([data-variant=\"ghost\"][data-theme=\"dark\"]) .hb-btn:active {\n background: rgba(255, 255, 255, 0.1);\n transform: scale(0.98);\n }\n\n :host([data-variant=\"ghost\"][data-theme=\"light\"]) .hb-btn {\n color: #1C1917;\n }\n :host([data-variant=\"ghost\"][data-theme=\"light\"]) .hb-btn:hover {\n background: rgba(0, 0, 0, 0.04);\n }\n :host([data-variant=\"ghost\"][data-theme=\"light\"]) .hb-btn:active {\n background: rgba(0, 0, 0, 0.08);\n transform: scale(0.98);\n }\n\n /* ─── FOCUS ─── */\n\n .hb-btn:focus-visible {\n outline: 2px solid var(--hb-focus-color, ${BRAND_COLOR});\n outline-offset: 2px;\n }\n\n /* ─── ICON ─── */\n\n .hb-btn-icon {\n width: var(--hb-icon-size);\n height: var(--hb-icon-size);\n flex-shrink: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n .hb-btn-icon svg { width: 100%; height: 100%; }\n\n :host([data-variant=\"filled\"][data-theme=\"branded\"]) .hb-btn-icon,\n :host([data-variant=\"filled\"][data-theme=\"branded-alt\"]) .hb-btn-icon {\n color: #FFFFFF;\n --hb-icon-accent: rgba(255,255,255,0.2);\n }\n :host([data-variant=\"filled\"][data-theme=\"dark\"]) .hb-btn-icon {\n color: var(--hb-accent-color, ${BRAND_COLOR});\n }\n :host([data-variant=\"filled\"][data-theme=\"light\"]) .hb-btn-icon {\n color: var(--hb-accent-color, ${BRAND_COLOR});\n }\n\n :host([data-variant=\"outline\"]) .hb-btn-icon,\n :host([data-variant=\"ghost\"]) .hb-btn-icon {\n color: var(--hb-accent-color, ${BRAND_COLOR});\n }\n\n /* ─── LABEL ─── */\n\n .hb-btn-label {\n letter-spacing: -0.01em;\n }\n`;\n\nexport class HermesSkillButton extends HTMLElement {\n static observedAttributes = ['command', 'skill-url', 'theme', 'size', 'variant', 'shape', 'popup', 'popup-title', 'popup-description'];\n\n private _options: HermesSkillButtonOptions = {\n command: '',\n theme: 'branded',\n size: 'md',\n variant: 'filled',\n popup: true,\n };\n\n private _mqCleanup: (() => void) | null = null;\n private _rendered = false;\n\n constructor() {\n super();\n this.attachShadow({ mode: 'open' });\n }\n\n connectedCallback() {\n this.syncFromAttributes();\n this.render();\n this.updateLightDOM();\n }\n\n disconnectedCallback() {\n this._mqCleanup?.();\n this._mqCleanup = null;\n }\n\n attributeChangedCallback() {\n if (!this._rendered) return;\n this.syncFromAttributes();\n this.render();\n this.updateLightDOM();\n }\n\n set options(opts: Partial<HermesSkillButtonOptions>) {\n this._options = { ...this._options, ...opts };\n this.render();\n this.updateLightDOM();\n }\n\n get options() {\n return this._options;\n }\n\n private syncFromAttributes() {\n const command = this.getAttribute('command');\n const skillUrl = this.getAttribute('skill-url');\n const theme = this.getAttribute('theme') as Theme | null;\n const size = this.getAttribute('size') as Size | null;\n const variant = this.getAttribute('variant') as Variant | null;\n const shape = this.getAttribute('shape') as Shape | null;\n const popup = this.getAttribute('popup');\n const popupTitle = this.getAttribute('popup-title');\n const popupDescription = this.getAttribute('popup-description');\n\n if (command !== null) this._options.command = command;\n if (skillUrl !== null) this._options.skillUrl = skillUrl;\n if (theme) this._options.theme = theme;\n if (size) this._options.size = size;\n if (variant) this._options.variant = variant;\n if (shape) this._options.shape = shape;\n if (popup !== null) this._options.popup = popup !== 'false';\n if (popupTitle !== null) this._options.popupTitle = popupTitle;\n if (popupDescription !== null) this._options.popupDescription = popupDescription;\n }\n\n private updateLightDOM() {\n const { command, skillUrl } = this._options;\n\n this.setAttribute('role', 'button');\n this.setAttribute('tabindex', '0');\n this.setAttribute('aria-label', `Run on Hermes Skills: ${command}`);\n if (this._options.popup !== false) {\n this.setAttribute('aria-haspopup', 'dialog');\n } else {\n this.removeAttribute('aria-haspopup');\n }\n\n let link = this.querySelector('a[data-hb-crawl]') as HTMLAnchorElement | null;\n if (!link) {\n link = document.createElement('a');\n link.setAttribute('data-hb-crawl', '');\n link.setAttribute('aria-hidden', 'true');\n link.style.cssText = 'position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;';\n this.appendChild(link);\n }\n link.textContent = `Run on Hermes Skills: ${command}`;\n link.setAttribute('data-platform', 'hermes-skill');\n link.setAttribute('data-command', command);\n if (skillUrl) {\n link.href = skillUrl;\n link.setAttribute('data-skill-url', skillUrl);\n } else {\n link.href = `https://hermes.ai/skills?command=${encodeURIComponent(command)}`;\n link.removeAttribute('data-skill-url');\n }\n }\n\n private getResolvedTheme(): Theme {\n return this._options.theme || 'branded';\n }\n\n private render() {\n if (!this.shadowRoot) return;\n\n const theme = this.getResolvedTheme();\n const resolvedTheme = theme === 'system' ? (\n typeof window !== 'undefined' && window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'\n ) : theme;\n const variant = this._options.variant || 'filled';\n\n const tokens = resolveTheme(theme);\n const size = this._options.size || 'md';\n const shape = this._options.shape || 'rounded';\n const sizeTokens = SIZE_MAP[size];\n const radius = SHAPE_MAP[shape][size];\n\n this.setAttribute('data-theme', resolvedTheme);\n this.setAttribute('data-variant', variant);\n\n const bgOverride = variant !== 'filled' ? 'transparent' : tokens.bg;\n const borderOverride = variant === 'ghost' ? 'transparent' :\n variant === 'outline' ? tokens.primary : tokens.border;\n const textOverride = variant !== 'filled' ? tokens.primary : tokens.text;\n\n this.shadowRoot.innerHTML = `\n <style>${BUTTON_STYLES}</style>\n <button\n class=\"hb-btn\"\n type=\"button\"\n style=\"\n ${themeToCSS(tokens)}\n --hb-bg: ${bgOverride};\n --hb-border: ${borderOverride};\n --hb-text: ${textOverride};\n --hb-accent-color: ${tokens.primary};\n --hb-focus-color: ${tokens.primary};\n --hb-height: ${sizeTokens.height};\n --hb-font-size: ${sizeTokens.fontSize};\n --hb-icon-size: ${sizeTokens.iconSize};\n --hb-padding: ${sizeTokens.padding};\n --hb-gap: ${sizeTokens.gap};\n --hb-radius: ${radius};\n \"\n aria-label=\"Run on Hermes Skills: ${this._options.command.replace(/\"/g, '"')}\"\n >\n <span class=\"hb-btn-icon\" aria-hidden=\"true\">${HERMES_SKILL_ICON}</span>\n <span class=\"hb-btn-label\">Run on Hermes Skills</span>\n </button>\n `;\n\n const btn = this.shadowRoot.querySelector('.hb-btn')!;\n btn.addEventListener('click', () => this.handleClick());\n btn.addEventListener('keydown', (e) => {\n if ((e as KeyboardEvent).key === 'Enter' || (e as KeyboardEvent).key === ' ') {\n e.preventDefault();\n this.handleClick();\n }\n });\n this._rendered = true;\n this.setupSystemThemeWatch();\n }\n\n private handleClick() {\n const { popup, command, skillUrl, popupTitle, popupDescription } = this._options;\n\n this.dispatchEvent(new CustomEvent('hb-open', {\n bubbles: true,\n composed: true,\n detail: { command },\n }));\n\n if (popup === false) {\n navigator.clipboard.writeText(command).then(() => {\n this._options.onCopy?.(command);\n this.dispatchEvent(new CustomEvent('hb-copy', {\n bubbles: true,\n composed: true,\n detail: { command },\n }));\n });\n return;\n }\n\n showPopup({\n variant: 'hermes-skill',\n theme: this.getResolvedTheme(),\n title: popupTitle || 'Run on Hermes Skills',\n description: popupDescription || 'Copy and paste into a Hermes session to get started.',\n command,\n skillUrl,\n onCopy: (cmd) => {\n this._options.onCopy?.(cmd);\n this.dispatchEvent(new CustomEvent('hb-copy', {\n bubbles: true,\n composed: true,\n detail: { command: cmd },\n }));\n },\n onClose: () => {\n this.dispatchEvent(new CustomEvent('hb-close', {\n bubbles: true,\n composed: true,\n }));\n },\n });\n }\n\n private setupSystemThemeWatch() {\n this._mqCleanup?.();\n this._mqCleanup = null;\n\n if (this.getResolvedTheme() !== 'system' || typeof window === 'undefined') return;\n\n const mq = window.matchMedia('(prefers-color-scheme: dark)');\n const handler = () => this.render();\n mq.addEventListener('change', handler);\n this._mqCleanup = () => mq.removeEventListener('change', handler);\n }\n}\n\nexport function registerHermesSkillButton(tagName = 'hermes-skill-button') {\n if (typeof customElements === 'undefined') return;\n if (!customElements.get(tagName)) {\n customElements.define(tagName, HermesSkillButton);\n }\n}\n\nregisterHermesSkillButton();\n\nexport function createHermesSkillButton(options: HermesSkillButtonOptions): HermesSkillButton {\n const el = document.createElement('hermes-skill-button') as HermesSkillButton;\n el.options = options;\n return el;\n}\n","/**\n * Generates JSON-LD structured data for all hermesbuttons on the page.\n *\n * Crawlers and AI agents can use this to discover skills and commands\n * without executing JavaScript — call this after buttons are rendered\n * and inject the result into a <script type=\"application/ld+json\"> tag.\n */\nexport interface ButtonMetadata {\n platform: 'hermes' | 'hermes-skill';\n command: string;\n fullCommand?: string;\n skillUrl?: string;\n}\n\nexport function discoverButtons(): ButtonMetadata[] {\n if (typeof document === 'undefined') return [];\n\n const results: ButtonMetadata[] = [];\n\n document.querySelectorAll('hermes-button').forEach((el) => {\n const command = el.getAttribute('command') || '';\n const promptFlag = el.getAttribute('prompt-flag');\n const usePrompt = promptFlag !== 'false';\n const fullCommand = usePrompt ? `hermes -p \"${command}\"` : command;\n\n results.push({\n platform: 'hermes',\n command,\n fullCommand,\n });\n });\n\n document.querySelectorAll('hermes-skill-button').forEach((el) => {\n const command = el.getAttribute('command') || '';\n const skillUrl = el.getAttribute('skill-url') || undefined;\n\n results.push({\n platform: 'hermes-skill',\n command,\n ...(skillUrl && { skillUrl }),\n });\n });\n\n return results;\n}\n\nexport function generateStructuredData(): object {\n const buttons = discoverButtons();\n if (buttons.length === 0) return {};\n\n const actions = buttons.map((btn) => {\n if (btn.platform === 'hermes') {\n return {\n '@type': 'Action',\n name: `Run on Hermes: ${btn.command}`,\n description: btn.command,\n target: {\n '@type': 'EntryPoint',\n urlTemplate: `https://hermes.ai/run?command=${encodeURIComponent(btn.fullCommand || btn.command)}`,\n actionPlatform: 'https://hermes.ai/run',\n },\n object: {\n '@type': 'SoftwareSourceCode',\n runtimePlatform: 'Hermes Agent',\n text: btn.fullCommand || btn.command,\n },\n };\n }\n\n const entry: Record<string, unknown> = {\n '@type': 'EntryPoint',\n actionPlatform: 'https://hermes.ai/skills',\n };\n if (btn.skillUrl) {\n entry.urlTemplate = btn.skillUrl;\n } else {\n entry.urlTemplate = `https://hermes.ai/skills?command=${encodeURIComponent(btn.command)}`;\n }\n\n const action: Record<string, unknown> = {\n '@type': 'Action',\n name: `Run on Hermes Skills: ${btn.command}`,\n description: btn.command,\n target: entry,\n };\n\n if (btn.skillUrl) {\n action.object = {\n '@type': 'SoftwareApplication',\n name: btn.command,\n downloadUrl: btn.skillUrl,\n applicationCategory: 'AI Skill',\n operatingSystem: 'Hermes Agent',\n };\n }\n\n return action;\n });\n\n return {\n '@context': 'https://schema.org',\n '@type': 'WebPage',\n potentialAction: actions,\n };\n}\n\n/**\n * Injects a <script type=\"application/ld+json\"> tag into the document head\n * with structured data for all hermesbuttons on the page.\n *\n * Call after all buttons have been rendered to the DOM.\n */\nexport function injectStructuredData(): void {\n if (typeof document === 'undefined') return;\n\n const existing = document.querySelector('script[data-hermesbuttons-jsonld]');\n if (existing) existing.remove();\n\n const data = generateStructuredData();\n if (!data || !('potentialAction' in data)) return;\n\n const script = document.createElement('script');\n script.type = 'application/ld+json';\n script.setAttribute('data-hermesbuttons-jsonld', '');\n script.textContent = JSON.stringify(data, null, 2);\n document.head.appendChild(script);\n}\n","export type { Theme, Size, Variant, Shape, HermesButtonOptions, HermesSkillButtonOptions, PopupOptions, ThemeTokens } from './types';\n\nexport { HermesButton, createHermesButton, registerHermesButton } from './hermes-button';\nexport { HermesSkillButton, createHermesSkillButton, registerHermesSkillButton } from './hermes-skill-button';\nexport { HermesPopupDialog, showPopup } from './popup-dialog';\n\nexport { HERMES_ICON, HERMES_SKILL_ICON } from './icons';\nexport { themes, resolveTheme, BRAND_COLOR, ALT_BRAND_COLOR } from './themes';\n\nexport type { ButtonMetadata } from './structured-data';\nexport { discoverButtons, generateStructuredData, injectStructuredData } from './structured-data';\n\nimport { registerHermesButton } from './hermes-button';\nimport { registerHermesSkillButton } from './hermes-skill-button';\n\n/**\n * Manually register all custom elements.\n * Called automatically on import, but exposed for frameworks\n * that need explicit registration timing (Angular, micro-frontends).\n */\nexport function register() {\n registerHermesButton();\n registerHermesSkillButton();\n}\n\nexport type {} from './jsx.d';\n"]}
|