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.
@@ -0,0 +1,245 @@
1
+ type Theme = 'branded' | 'branded-alt' | 'dark' | 'light' | 'system';
2
+ type Size = 'sm' | 'md' | 'lg';
3
+ type Variant = 'filled' | 'outline' | 'ghost';
4
+ type Shape = 'rounded' | 'pill' | 'square';
5
+ interface HermesButtonOptions {
6
+ /** The command to run in Hermes Agent (e.g. "/research --deep") */
7
+ command: string;
8
+ /** Theme variant. Default: 'branded' */
9
+ theme?: Theme;
10
+ /** Button size. Default: 'md' */
11
+ size?: Size;
12
+ /** Visual variant. Default: 'filled' */
13
+ variant?: Variant;
14
+ /** Border radius shape. Default: 'rounded' */
15
+ shape?: Shape;
16
+ /** Whether to show a popup dialog on click. Default: true */
17
+ popup?: boolean;
18
+ /** Custom prompt flag value (prepended as `hermes -p`). Default: true */
19
+ promptFlag?: boolean;
20
+ /** Callback fired after the command is copied to clipboard */
21
+ onCopy?: (command: string) => void;
22
+ /** Custom popup title */
23
+ popupTitle?: string;
24
+ /** Custom popup description */
25
+ popupDescription?: string;
26
+ }
27
+ interface HermesSkillButtonOptions {
28
+ /** The slash command to run in Hermes (e.g. "/research-assistant") */
29
+ command: string;
30
+ /** URL to a downloadable skill package (.zip, SKILL.md, or plugin.json) */
31
+ skillUrl?: string;
32
+ /** Theme variant. Default: 'branded' */
33
+ theme?: Theme;
34
+ /** Button size. Default: 'md' */
35
+ size?: Size;
36
+ /** Visual variant. Default: 'filled' */
37
+ variant?: Variant;
38
+ /** Border radius shape. Default: 'rounded' */
39
+ shape?: Shape;
40
+ /** Whether to show a popup dialog on click. Default: true */
41
+ popup?: boolean;
42
+ /** Callback fired after the command is copied */
43
+ onCopy?: (command: string) => void;
44
+ /** Callback fired when the skill package is downloaded */
45
+ onDownload?: (url: string) => void;
46
+ /** Custom popup title */
47
+ popupTitle?: string;
48
+ /** Custom popup description */
49
+ popupDescription?: string;
50
+ }
51
+ interface PopupOptions {
52
+ variant: 'hermes' | 'hermes-skill';
53
+ theme: Theme;
54
+ title: string;
55
+ description?: string;
56
+ command: string;
57
+ fullCommand?: string;
58
+ skillUrl?: string;
59
+ onCopy?: (command: string) => void;
60
+ onClose?: () => void;
61
+ }
62
+ interface ThemeTokens {
63
+ bg: string;
64
+ text: string;
65
+ border: string;
66
+ surface: string;
67
+ surfaceText: string;
68
+ muted: string;
69
+ primary: string;
70
+ primaryText: string;
71
+ codeBg: string;
72
+ codeText: string;
73
+ }
74
+
75
+ declare class HermesButton extends HTMLElement {
76
+ static observedAttributes: string[];
77
+ private _options;
78
+ private _mqCleanup;
79
+ private _rendered;
80
+ constructor();
81
+ connectedCallback(): void;
82
+ disconnectedCallback(): void;
83
+ attributeChangedCallback(): void;
84
+ set options(opts: Partial<HermesButtonOptions>);
85
+ get options(): Partial<HermesButtonOptions>;
86
+ private syncFromAttributes;
87
+ private updateLightDOM;
88
+ private getResolvedTheme;
89
+ private getFullCommand;
90
+ private render;
91
+ private handleClick;
92
+ private setupSystemThemeWatch;
93
+ }
94
+ declare function registerHermesButton(tagName?: string): void;
95
+ declare function createHermesButton(options: HermesButtonOptions): HermesButton;
96
+
97
+ declare class HermesSkillButton extends HTMLElement {
98
+ static observedAttributes: string[];
99
+ private _options;
100
+ private _mqCleanup;
101
+ private _rendered;
102
+ constructor();
103
+ connectedCallback(): void;
104
+ disconnectedCallback(): void;
105
+ attributeChangedCallback(): void;
106
+ set options(opts: Partial<HermesSkillButtonOptions>);
107
+ get options(): Partial<HermesSkillButtonOptions>;
108
+ private syncFromAttributes;
109
+ private updateLightDOM;
110
+ private getResolvedTheme;
111
+ private render;
112
+ private handleClick;
113
+ private setupSystemThemeWatch;
114
+ }
115
+ declare function registerHermesSkillButton(tagName?: string): void;
116
+ declare function createHermesSkillButton(options: HermesSkillButtonOptions): HermesSkillButton;
117
+
118
+ declare class HermesPopupDialog extends HTMLElement {
119
+ private _options;
120
+ private _mqCleanup;
121
+ constructor();
122
+ set options(opts: PopupOptions);
123
+ get options(): PopupOptions;
124
+ disconnectedCallback(): void;
125
+ private resolvePopupTokens;
126
+ private render;
127
+ private renderHermesTerminalBody;
128
+ private renderHermesSkillBody;
129
+ private setupListeners;
130
+ private setupSystemThemeWatch;
131
+ private copyToClipboard;
132
+ close(): void;
133
+ private escapeHtml;
134
+ private escapeAttr;
135
+ }
136
+ declare function showPopup(options: PopupOptions): HermesPopupDialog;
137
+
138
+ declare 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>";
139
+ declare 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>";
140
+
141
+ declare const BRAND_COLOR = "#7C3AED";
142
+ declare const ALT_BRAND_COLOR = "#14B8A6";
143
+ declare const themes: Record<Exclude<Theme, 'system'>, ThemeTokens>;
144
+ declare function resolveTheme(theme: Theme): ThemeTokens;
145
+
146
+ /**
147
+ * Generates JSON-LD structured data for all hermesbuttons on the page.
148
+ *
149
+ * Crawlers and AI agents can use this to discover skills and commands
150
+ * without executing JavaScript — call this after buttons are rendered
151
+ * and inject the result into a <script type="application/ld+json"> tag.
152
+ */
153
+ interface ButtonMetadata {
154
+ platform: 'hermes' | 'hermes-skill';
155
+ command: string;
156
+ fullCommand?: string;
157
+ skillUrl?: string;
158
+ }
159
+ declare function discoverButtons(): ButtonMetadata[];
160
+ declare function generateStructuredData(): object;
161
+ /**
162
+ * Injects a <script type="application/ld+json"> tag into the document head
163
+ * with structured data for all hermesbuttons on the page.
164
+ *
165
+ * Call after all buttons have been rendered to the DOM.
166
+ */
167
+ declare function injectStructuredData(): void;
168
+
169
+ interface HermesButtonAttributes {
170
+ command?: string;
171
+ theme?: Theme;
172
+ size?: Size;
173
+ variant?: Variant;
174
+ shape?: Shape;
175
+ popup?: string | boolean;
176
+ 'prompt-flag'?: string | boolean;
177
+ 'popup-title'?: string;
178
+ 'popup-description'?: string;
179
+ class?: string;
180
+ style?: string | Record<string, string>;
181
+ }
182
+
183
+ interface HermesSkillButtonAttributes {
184
+ command?: string;
185
+ 'skill-url'?: string;
186
+ theme?: Theme;
187
+ size?: Size;
188
+ variant?: Variant;
189
+ shape?: Shape;
190
+ popup?: string | boolean;
191
+ 'popup-title'?: string;
192
+ 'popup-description'?: string;
193
+ class?: string;
194
+ style?: string | Record<string, string>;
195
+ }
196
+
197
+ declare global {
198
+ namespace JSX {
199
+ interface IntrinsicElements {
200
+ 'hermes-button': HermesButtonAttributes &
201
+ React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>;
202
+ 'hermes-skill-button': HermesSkillButtonAttributes &
203
+ React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>;
204
+ 'hermes-popup-dialog': React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>;
205
+ }
206
+ }
207
+
208
+ interface HTMLElementTagNameMap {
209
+ 'hermes-button': HTMLElement;
210
+ 'hermes-skill-button': HTMLElement;
211
+ 'hermes-popup-dialog': HTMLElement;
212
+ }
213
+ }
214
+
215
+ declare module 'vue' {
216
+ interface GlobalComponents {
217
+ 'hermes-button': HermesButtonAttributes;
218
+ 'hermes-skill-button': HermesSkillButtonAttributes;
219
+ }
220
+ }
221
+
222
+ declare module 'solid-js' {
223
+ namespace JSX {
224
+ interface IntrinsicElements {
225
+ 'hermes-button': HermesButtonAttributes;
226
+ 'hermes-skill-button': HermesSkillButtonAttributes;
227
+ }
228
+ }
229
+ }
230
+
231
+ declare module 'svelte/elements' {
232
+ interface SvelteHTMLElements {
233
+ 'hermes-button': HermesButtonAttributes & { [key: `on:${string}`]: (e: CustomEvent) => void };
234
+ 'hermes-skill-button': HermesSkillButtonAttributes & { [key: `on:${string}`]: (e: CustomEvent) => void };
235
+ }
236
+ }
237
+
238
+ /**
239
+ * Manually register all custom elements.
240
+ * Called automatically on import, but exposed for frameworks
241
+ * that need explicit registration timing (Angular, micro-frontends).
242
+ */
243
+ declare function register(): void;
244
+
245
+ export { ALT_BRAND_COLOR, BRAND_COLOR, type ButtonMetadata, HERMES_ICON, HERMES_SKILL_ICON, HermesButton, type HermesButtonOptions, HermesPopupDialog, HermesSkillButton, type HermesSkillButtonOptions, type PopupOptions, type Shape, type Size, type Theme, type ThemeTokens, type Variant, createHermesButton, createHermesSkillButton, discoverButtons, generateStructuredData, injectStructuredData, register, registerHermesButton, registerHermesSkillButton, resolveTheme, showPopup, themes };
@@ -0,0 +1,245 @@
1
+ type Theme = 'branded' | 'branded-alt' | 'dark' | 'light' | 'system';
2
+ type Size = 'sm' | 'md' | 'lg';
3
+ type Variant = 'filled' | 'outline' | 'ghost';
4
+ type Shape = 'rounded' | 'pill' | 'square';
5
+ interface HermesButtonOptions {
6
+ /** The command to run in Hermes Agent (e.g. "/research --deep") */
7
+ command: string;
8
+ /** Theme variant. Default: 'branded' */
9
+ theme?: Theme;
10
+ /** Button size. Default: 'md' */
11
+ size?: Size;
12
+ /** Visual variant. Default: 'filled' */
13
+ variant?: Variant;
14
+ /** Border radius shape. Default: 'rounded' */
15
+ shape?: Shape;
16
+ /** Whether to show a popup dialog on click. Default: true */
17
+ popup?: boolean;
18
+ /** Custom prompt flag value (prepended as `hermes -p`). Default: true */
19
+ promptFlag?: boolean;
20
+ /** Callback fired after the command is copied to clipboard */
21
+ onCopy?: (command: string) => void;
22
+ /** Custom popup title */
23
+ popupTitle?: string;
24
+ /** Custom popup description */
25
+ popupDescription?: string;
26
+ }
27
+ interface HermesSkillButtonOptions {
28
+ /** The slash command to run in Hermes (e.g. "/research-assistant") */
29
+ command: string;
30
+ /** URL to a downloadable skill package (.zip, SKILL.md, or plugin.json) */
31
+ skillUrl?: string;
32
+ /** Theme variant. Default: 'branded' */
33
+ theme?: Theme;
34
+ /** Button size. Default: 'md' */
35
+ size?: Size;
36
+ /** Visual variant. Default: 'filled' */
37
+ variant?: Variant;
38
+ /** Border radius shape. Default: 'rounded' */
39
+ shape?: Shape;
40
+ /** Whether to show a popup dialog on click. Default: true */
41
+ popup?: boolean;
42
+ /** Callback fired after the command is copied */
43
+ onCopy?: (command: string) => void;
44
+ /** Callback fired when the skill package is downloaded */
45
+ onDownload?: (url: string) => void;
46
+ /** Custom popup title */
47
+ popupTitle?: string;
48
+ /** Custom popup description */
49
+ popupDescription?: string;
50
+ }
51
+ interface PopupOptions {
52
+ variant: 'hermes' | 'hermes-skill';
53
+ theme: Theme;
54
+ title: string;
55
+ description?: string;
56
+ command: string;
57
+ fullCommand?: string;
58
+ skillUrl?: string;
59
+ onCopy?: (command: string) => void;
60
+ onClose?: () => void;
61
+ }
62
+ interface ThemeTokens {
63
+ bg: string;
64
+ text: string;
65
+ border: string;
66
+ surface: string;
67
+ surfaceText: string;
68
+ muted: string;
69
+ primary: string;
70
+ primaryText: string;
71
+ codeBg: string;
72
+ codeText: string;
73
+ }
74
+
75
+ declare class HermesButton extends HTMLElement {
76
+ static observedAttributes: string[];
77
+ private _options;
78
+ private _mqCleanup;
79
+ private _rendered;
80
+ constructor();
81
+ connectedCallback(): void;
82
+ disconnectedCallback(): void;
83
+ attributeChangedCallback(): void;
84
+ set options(opts: Partial<HermesButtonOptions>);
85
+ get options(): Partial<HermesButtonOptions>;
86
+ private syncFromAttributes;
87
+ private updateLightDOM;
88
+ private getResolvedTheme;
89
+ private getFullCommand;
90
+ private render;
91
+ private handleClick;
92
+ private setupSystemThemeWatch;
93
+ }
94
+ declare function registerHermesButton(tagName?: string): void;
95
+ declare function createHermesButton(options: HermesButtonOptions): HermesButton;
96
+
97
+ declare class HermesSkillButton extends HTMLElement {
98
+ static observedAttributes: string[];
99
+ private _options;
100
+ private _mqCleanup;
101
+ private _rendered;
102
+ constructor();
103
+ connectedCallback(): void;
104
+ disconnectedCallback(): void;
105
+ attributeChangedCallback(): void;
106
+ set options(opts: Partial<HermesSkillButtonOptions>);
107
+ get options(): Partial<HermesSkillButtonOptions>;
108
+ private syncFromAttributes;
109
+ private updateLightDOM;
110
+ private getResolvedTheme;
111
+ private render;
112
+ private handleClick;
113
+ private setupSystemThemeWatch;
114
+ }
115
+ declare function registerHermesSkillButton(tagName?: string): void;
116
+ declare function createHermesSkillButton(options: HermesSkillButtonOptions): HermesSkillButton;
117
+
118
+ declare class HermesPopupDialog extends HTMLElement {
119
+ private _options;
120
+ private _mqCleanup;
121
+ constructor();
122
+ set options(opts: PopupOptions);
123
+ get options(): PopupOptions;
124
+ disconnectedCallback(): void;
125
+ private resolvePopupTokens;
126
+ private render;
127
+ private renderHermesTerminalBody;
128
+ private renderHermesSkillBody;
129
+ private setupListeners;
130
+ private setupSystemThemeWatch;
131
+ private copyToClipboard;
132
+ close(): void;
133
+ private escapeHtml;
134
+ private escapeAttr;
135
+ }
136
+ declare function showPopup(options: PopupOptions): HermesPopupDialog;
137
+
138
+ declare 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>";
139
+ declare 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>";
140
+
141
+ declare const BRAND_COLOR = "#7C3AED";
142
+ declare const ALT_BRAND_COLOR = "#14B8A6";
143
+ declare const themes: Record<Exclude<Theme, 'system'>, ThemeTokens>;
144
+ declare function resolveTheme(theme: Theme): ThemeTokens;
145
+
146
+ /**
147
+ * Generates JSON-LD structured data for all hermesbuttons on the page.
148
+ *
149
+ * Crawlers and AI agents can use this to discover skills and commands
150
+ * without executing JavaScript — call this after buttons are rendered
151
+ * and inject the result into a <script type="application/ld+json"> tag.
152
+ */
153
+ interface ButtonMetadata {
154
+ platform: 'hermes' | 'hermes-skill';
155
+ command: string;
156
+ fullCommand?: string;
157
+ skillUrl?: string;
158
+ }
159
+ declare function discoverButtons(): ButtonMetadata[];
160
+ declare function generateStructuredData(): object;
161
+ /**
162
+ * Injects a <script type="application/ld+json"> tag into the document head
163
+ * with structured data for all hermesbuttons on the page.
164
+ *
165
+ * Call after all buttons have been rendered to the DOM.
166
+ */
167
+ declare function injectStructuredData(): void;
168
+
169
+ interface HermesButtonAttributes {
170
+ command?: string;
171
+ theme?: Theme;
172
+ size?: Size;
173
+ variant?: Variant;
174
+ shape?: Shape;
175
+ popup?: string | boolean;
176
+ 'prompt-flag'?: string | boolean;
177
+ 'popup-title'?: string;
178
+ 'popup-description'?: string;
179
+ class?: string;
180
+ style?: string | Record<string, string>;
181
+ }
182
+
183
+ interface HermesSkillButtonAttributes {
184
+ command?: string;
185
+ 'skill-url'?: string;
186
+ theme?: Theme;
187
+ size?: Size;
188
+ variant?: Variant;
189
+ shape?: Shape;
190
+ popup?: string | boolean;
191
+ 'popup-title'?: string;
192
+ 'popup-description'?: string;
193
+ class?: string;
194
+ style?: string | Record<string, string>;
195
+ }
196
+
197
+ declare global {
198
+ namespace JSX {
199
+ interface IntrinsicElements {
200
+ 'hermes-button': HermesButtonAttributes &
201
+ React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>;
202
+ 'hermes-skill-button': HermesSkillButtonAttributes &
203
+ React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>;
204
+ 'hermes-popup-dialog': React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>;
205
+ }
206
+ }
207
+
208
+ interface HTMLElementTagNameMap {
209
+ 'hermes-button': HTMLElement;
210
+ 'hermes-skill-button': HTMLElement;
211
+ 'hermes-popup-dialog': HTMLElement;
212
+ }
213
+ }
214
+
215
+ declare module 'vue' {
216
+ interface GlobalComponents {
217
+ 'hermes-button': HermesButtonAttributes;
218
+ 'hermes-skill-button': HermesSkillButtonAttributes;
219
+ }
220
+ }
221
+
222
+ declare module 'solid-js' {
223
+ namespace JSX {
224
+ interface IntrinsicElements {
225
+ 'hermes-button': HermesButtonAttributes;
226
+ 'hermes-skill-button': HermesSkillButtonAttributes;
227
+ }
228
+ }
229
+ }
230
+
231
+ declare module 'svelte/elements' {
232
+ interface SvelteHTMLElements {
233
+ 'hermes-button': HermesButtonAttributes & { [key: `on:${string}`]: (e: CustomEvent) => void };
234
+ 'hermes-skill-button': HermesSkillButtonAttributes & { [key: `on:${string}`]: (e: CustomEvent) => void };
235
+ }
236
+ }
237
+
238
+ /**
239
+ * Manually register all custom elements.
240
+ * Called automatically on import, but exposed for frameworks
241
+ * that need explicit registration timing (Angular, micro-frontends).
242
+ */
243
+ declare function register(): void;
244
+
245
+ export { ALT_BRAND_COLOR, BRAND_COLOR, type ButtonMetadata, HERMES_ICON, HERMES_SKILL_ICON, HermesButton, type HermesButtonOptions, HermesPopupDialog, HermesSkillButton, type HermesSkillButtonOptions, type PopupOptions, type Shape, type Size, type Theme, type ThemeTokens, type Variant, createHermesButton, createHermesSkillButton, discoverButtons, generateStructuredData, injectStructuredData, register, registerHermesButton, registerHermesSkillButton, resolveTheme, showPopup, themes };