@kya-os/consent 0.1.38 → 0.1.41

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.
Files changed (186) hide show
  1. package/dist/bundle/index.d.ts +14 -0
  2. package/dist/bundle/index.d.ts.map +1 -1
  3. package/dist/bundle/index.js +14 -0
  4. package/dist/bundle/index.js.map +1 -1
  5. package/dist/bundle/inline.d.ts.map +1 -1
  6. package/dist/bundle/inline.js +2 -2
  7. package/dist/bundle/inline.js.map +1 -1
  8. package/dist/bundle/shell.d.ts +23 -0
  9. package/dist/bundle/shell.d.ts.map +1 -1
  10. package/dist/bundle/shell.js +25 -1
  11. package/dist/bundle/shell.js.map +1 -1
  12. package/dist/capabilities/index.d.ts +7 -0
  13. package/dist/capabilities/index.d.ts.map +1 -0
  14. package/dist/capabilities/index.js +7 -0
  15. package/dist/capabilities/index.js.map +1 -0
  16. package/dist/capabilities/registry.d.ts +29 -0
  17. package/dist/capabilities/registry.d.ts.map +1 -0
  18. package/dist/capabilities/registry.js +178 -0
  19. package/dist/capabilities/registry.js.map +1 -0
  20. package/dist/cedar/compile.d.ts +30 -0
  21. package/dist/cedar/compile.d.ts.map +1 -0
  22. package/dist/cedar/compile.js +55 -0
  23. package/dist/cedar/compile.js.map +1 -0
  24. package/dist/cedar/explain.d.ts +22 -0
  25. package/dist/cedar/explain.d.ts.map +1 -0
  26. package/dist/cedar/explain.js +72 -0
  27. package/dist/cedar/explain.js.map +1 -0
  28. package/dist/cedar/index.d.ts +8 -0
  29. package/dist/cedar/index.d.ts.map +1 -0
  30. package/dist/cedar/index.js +8 -0
  31. package/dist/cedar/index.js.map +1 -0
  32. package/dist/cjs/bundle/index.js +22 -1
  33. package/dist/cjs/bundle/index.js.map +1 -1
  34. package/dist/cjs/bundle/inline.js +2 -2
  35. package/dist/cjs/bundle/inline.js.map +1 -1
  36. package/dist/cjs/bundle/shell.js +25 -1
  37. package/dist/cjs/bundle/shell.js.map +1 -1
  38. package/dist/cjs/capabilities/index.js +12 -0
  39. package/dist/cjs/capabilities/index.js.map +1 -0
  40. package/dist/cjs/capabilities/registry.js +182 -0
  41. package/dist/cjs/capabilities/registry.js.map +1 -0
  42. package/dist/cjs/cedar/compile.js +59 -0
  43. package/dist/cjs/cedar/compile.js.map +1 -0
  44. package/dist/cjs/cedar/explain.js +75 -0
  45. package/dist/cjs/cedar/explain.js.map +1 -0
  46. package/dist/cjs/cedar/index.js +14 -0
  47. package/dist/cjs/cedar/index.js.map +1 -0
  48. package/dist/cjs/components/consent-action-bar.js +138 -0
  49. package/dist/cjs/components/consent-action-bar.js.map +1 -0
  50. package/dist/cjs/components/consent-agent-header.js +205 -0
  51. package/dist/cjs/components/consent-agent-header.js.map +1 -0
  52. package/dist/cjs/components/consent-capabilities-screen.js +346 -0
  53. package/dist/cjs/components/consent-capabilities-screen.js.map +1 -0
  54. package/dist/cjs/components/consent-capability-card.js +399 -0
  55. package/dist/cjs/components/consent-capability-card.js.map +1 -0
  56. package/dist/cjs/components/consent-connector-header.js +247 -0
  57. package/dist/cjs/components/consent-connector-header.js.map +1 -0
  58. package/dist/cjs/components/consent-footer.js +99 -0
  59. package/dist/cjs/components/consent-footer.js.map +1 -0
  60. package/dist/cjs/components/consent-revocation-notice.js +101 -0
  61. package/dist/cjs/components/consent-revocation-notice.js.map +1 -0
  62. package/dist/cjs/components/index.js +16 -1
  63. package/dist/cjs/components/index.js.map +1 -1
  64. package/dist/cjs/components/mcp-consent.js +193 -7
  65. package/dist/cjs/components/mcp-consent.js.map +1 -1
  66. package/dist/cjs/copy/index.js +12 -0
  67. package/dist/cjs/copy/index.js.map +1 -0
  68. package/dist/cjs/copy/tokens.js +101 -0
  69. package/dist/cjs/copy/tokens.js.map +1 -0
  70. package/dist/cjs/index.js +8 -0
  71. package/dist/cjs/index.js.map +1 -1
  72. package/dist/cjs/mcp-app/inline.js +2 -2
  73. package/dist/cjs/mcp-app/inline.js.map +1 -1
  74. package/dist/cjs/popup/index.js +15 -0
  75. package/dist/cjs/popup/index.js.map +1 -0
  76. package/dist/cjs/popup/launcher.js +77 -0
  77. package/dist/cjs/popup/launcher.js.map +1 -0
  78. package/dist/cjs/schemas/capabilities.schemas.js +129 -0
  79. package/dist/cjs/schemas/capabilities.schemas.js.map +1 -0
  80. package/dist/cjs/schemas/config.schemas.js +18 -0
  81. package/dist/cjs/schemas/config.schemas.js.map +1 -1
  82. package/dist/cjs/schemas/index.js +1 -0
  83. package/dist/cjs/schemas/index.js.map +1 -1
  84. package/dist/cjs/styles/index.js +1 -0
  85. package/dist/cjs/styles/index.js.map +1 -1
  86. package/dist/cjs/styles/theme.js +86 -0
  87. package/dist/cjs/styles/theme.js.map +1 -0
  88. package/dist/cjs/types/capabilities.types.js +12 -0
  89. package/dist/cjs/types/capabilities.types.js.map +1 -0
  90. package/dist/cjs/types/index.js +1 -0
  91. package/dist/cjs/types/index.js.map +1 -1
  92. package/dist/components/consent-action-bar.d.ts +30 -0
  93. package/dist/components/consent-action-bar.d.ts.map +1 -0
  94. package/dist/components/consent-action-bar.js +135 -0
  95. package/dist/components/consent-action-bar.js.map +1 -0
  96. package/dist/components/consent-agent-header.d.ts +31 -0
  97. package/dist/components/consent-agent-header.d.ts.map +1 -0
  98. package/dist/components/consent-agent-header.js +202 -0
  99. package/dist/components/consent-agent-header.js.map +1 -0
  100. package/dist/components/consent-capabilities-screen.d.ts +75 -0
  101. package/dist/components/consent-capabilities-screen.d.ts.map +1 -0
  102. package/dist/components/consent-capabilities-screen.js +343 -0
  103. package/dist/components/consent-capabilities-screen.js.map +1 -0
  104. package/dist/components/consent-capability-card.d.ts +52 -0
  105. package/dist/components/consent-capability-card.d.ts.map +1 -0
  106. package/dist/components/consent-capability-card.js +396 -0
  107. package/dist/components/consent-capability-card.js.map +1 -0
  108. package/dist/components/consent-connector-header.d.ts +64 -0
  109. package/dist/components/consent-connector-header.d.ts.map +1 -0
  110. package/dist/components/consent-connector-header.js +244 -0
  111. package/dist/components/consent-connector-header.js.map +1 -0
  112. package/dist/components/consent-footer.d.ts +22 -0
  113. package/dist/components/consent-footer.d.ts.map +1 -0
  114. package/dist/components/consent-footer.js +96 -0
  115. package/dist/components/consent-footer.js.map +1 -0
  116. package/dist/components/consent-revocation-notice.d.ts +22 -0
  117. package/dist/components/consent-revocation-notice.d.ts.map +1 -0
  118. package/dist/components/consent-revocation-notice.js +98 -0
  119. package/dist/components/consent-revocation-notice.js.map +1 -0
  120. package/dist/components/index.d.ts +7 -0
  121. package/dist/components/index.d.ts.map +1 -1
  122. package/dist/components/index.js +8 -0
  123. package/dist/components/index.js.map +1 -1
  124. package/dist/components/mcp-consent.d.ts +41 -0
  125. package/dist/components/mcp-consent.d.ts.map +1 -1
  126. package/dist/components/mcp-consent.js +193 -7
  127. package/dist/components/mcp-consent.js.map +1 -1
  128. package/dist/consent.js +1642 -7
  129. package/dist/consent.min.js +888 -119
  130. package/dist/copy/index.d.ts +8 -0
  131. package/dist/copy/index.d.ts.map +1 -0
  132. package/dist/copy/index.js +7 -0
  133. package/dist/copy/index.js.map +1 -0
  134. package/dist/copy/tokens.d.ts +93 -0
  135. package/dist/copy/tokens.d.ts.map +1 -0
  136. package/dist/copy/tokens.js +97 -0
  137. package/dist/copy/tokens.js.map +1 -0
  138. package/dist/index.d.ts +4 -0
  139. package/dist/index.d.ts.map +1 -1
  140. package/dist/index.js +8 -0
  141. package/dist/index.js.map +1 -1
  142. package/dist/mcp-app/inline.d.ts.map +1 -1
  143. package/dist/mcp-app/inline.js +2 -2
  144. package/dist/mcp-app/inline.js.map +1 -1
  145. package/dist/popup/index.d.ts +8 -0
  146. package/dist/popup/index.d.ts.map +1 -0
  147. package/dist/popup/index.js +7 -0
  148. package/dist/popup/index.js.map +1 -0
  149. package/dist/popup/launcher.d.ts +81 -0
  150. package/dist/popup/launcher.d.ts.map +1 -0
  151. package/dist/popup/launcher.js +71 -0
  152. package/dist/popup/launcher.js.map +1 -0
  153. package/dist/schemas/api.schemas.d.ts +366 -162
  154. package/dist/schemas/api.schemas.d.ts.map +1 -1
  155. package/dist/schemas/capabilities.schemas.d.ts +186 -0
  156. package/dist/schemas/capabilities.schemas.d.ts.map +1 -0
  157. package/dist/schemas/capabilities.schemas.js +123 -0
  158. package/dist/schemas/capabilities.schemas.js.map +1 -0
  159. package/dist/schemas/config.schemas.d.ts +480 -184
  160. package/dist/schemas/config.schemas.d.ts.map +1 -1
  161. package/dist/schemas/config.schemas.js +18 -0
  162. package/dist/schemas/config.schemas.js.map +1 -1
  163. package/dist/schemas/index.d.ts +1 -0
  164. package/dist/schemas/index.d.ts.map +1 -1
  165. package/dist/schemas/index.js +1 -0
  166. package/dist/schemas/index.js.map +1 -1
  167. package/dist/schemas/modes.schemas.d.ts +6 -6
  168. package/dist/styles/index.d.ts +1 -0
  169. package/dist/styles/index.d.ts.map +1 -1
  170. package/dist/styles/index.js +1 -0
  171. package/dist/styles/index.js.map +1 -1
  172. package/dist/styles/theme.d.ts +72 -0
  173. package/dist/styles/theme.d.ts.map +1 -0
  174. package/dist/styles/theme.js +81 -0
  175. package/dist/styles/theme.js.map +1 -0
  176. package/dist/types/capabilities.types.d.ts +126 -0
  177. package/dist/types/capabilities.types.d.ts.map +1 -0
  178. package/dist/types/capabilities.types.js +11 -0
  179. package/dist/types/capabilities.types.js.map +1 -0
  180. package/dist/types/config.types.d.ts +33 -0
  181. package/dist/types/config.types.d.ts.map +1 -1
  182. package/dist/types/index.d.ts +1 -0
  183. package/dist/types/index.d.ts.map +1 -1
  184. package/dist/types/index.js +1 -0
  185. package/dist/types/index.js.map +1 -1
  186. package/package.json +1 -1
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Consent Capability Card
3
+ *
4
+ * Renders a single capability row in the new humanized consent layout.
5
+ * Shows: square checkbox + icon tile + bold label inline with description +
6
+ * optional amber HIGHER RISK chip + small "View policy" disclosure.
7
+ *
8
+ * Emits a `capability-toggle` CustomEvent with `{ id, checked }` whenever the
9
+ * checkbox state changes; the parent (`<mcp-consent>`) tracks selection.
10
+ *
11
+ * @module components/consent-capability-card
12
+ */
13
+ import { LitElement } from "lit";
14
+ import type { CapabilityIcon, RiskLevel } from "../types/capabilities.types.js";
15
+ /**
16
+ * Detail emitted on the `capability-toggle` event.
17
+ */
18
+ export interface CapabilityToggleDetail {
19
+ id: string;
20
+ checked: boolean;
21
+ }
22
+ export declare class ConsentCapabilityCard extends LitElement {
23
+ capabilityId: string;
24
+ label: string;
25
+ description: string;
26
+ icon: CapabilityIcon;
27
+ riskLevel: RiskLevel;
28
+ checked: boolean;
29
+ compiledCedar: string;
30
+ private policyOpen;
31
+ static styles: import("lit").CSSResult;
32
+ private toggleChecked;
33
+ /**
34
+ * Row-level click handler. Makes the entire row a click target for
35
+ * toggling the checkbox — a UX nicety that matches Plaid/Apple-style
36
+ * consent rows. Skips when the user clicks the per-row "View policy"
37
+ * button, the policy disclosure, or any link inside the description, so
38
+ * those interactive children retain their own behavior.
39
+ */
40
+ private onRowClick;
41
+ private togglePolicy;
42
+ private isHigherRisk;
43
+ private renderIcon;
44
+ private renderPolicy;
45
+ render(): import("lit").TemplateResult<1>;
46
+ }
47
+ declare global {
48
+ interface HTMLElementTagNameMap {
49
+ "consent-capability-card": ConsentCapabilityCard;
50
+ }
51
+ }
52
+ //# sourceMappingURL=consent-capability-card.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"consent-capability-card.d.ts","sourceRoot":"","sources":["../../src/components/consent-capability-card.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,UAAU,EAAsB,MAAM,KAAK,CAAC;AAKrD,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAEhF;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,qBACa,qBAAsB,SAAQ,UAAU;IACvB,YAAY,SAAM;IAClB,KAAK,SAAM;IACX,WAAW,SAAM;IACjB,IAAI,EAAE,cAAc,CAAa;IACjC,SAAS,EAAE,SAAS,CAAS;IACb,OAAO,UAAS;IACH,aAAa,SAAM;IAEnE,OAAO,CAAC,UAAU,CAAS;IAEpC,OAAgB,MAAM,0BAkKpB;IAEF,OAAO,CAAC,aAAa;IAerB;;;;;;OAMG;IACH,OAAO,CAAC,UAAU;IAuBlB,OAAO,CAAC,YAAY;IAOpB,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,YAAY;IA4BX,MAAM;CAoDhB;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,yBAAyB,EAAE,qBAAqB,CAAC;KAClD;CACF"}
@@ -0,0 +1,396 @@
1
+ /**
2
+ * Consent Capability Card
3
+ *
4
+ * Renders a single capability row in the new humanized consent layout.
5
+ * Shows: square checkbox + icon tile + bold label inline with description +
6
+ * optional amber HIGHER RISK chip + small "View policy" disclosure.
7
+ *
8
+ * Emits a `capability-toggle` CustomEvent with `{ id, checked }` whenever the
9
+ * checkbox state changes; the parent (`<mcp-consent>`) tracks selection.
10
+ *
11
+ * @module components/consent-capability-card
12
+ */
13
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
14
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
15
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
16
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
17
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
18
+ };
19
+ import { LitElement, html, css, nothing } from "lit";
20
+ import { customElement, property, state } from "lit/decorators.js";
21
+ import { CONSENT_COPY_TOKENS } from "../copy/tokens.js";
22
+ import { explainCedarFragment } from "../cedar/explain.js";
23
+ let ConsentCapabilityCard = class ConsentCapabilityCard extends LitElement {
24
+ constructor() {
25
+ super(...arguments);
26
+ this.capabilityId = "";
27
+ this.label = "";
28
+ this.description = "";
29
+ this.icon = "neutral";
30
+ this.riskLevel = "low";
31
+ this.checked = false;
32
+ this.compiledCedar = "";
33
+ this.policyOpen = false;
34
+ }
35
+ toggleChecked() {
36
+ this.checked = !this.checked;
37
+ const detail = {
38
+ id: this.capabilityId,
39
+ checked: this.checked,
40
+ };
41
+ this.dispatchEvent(new CustomEvent("capability-toggle", {
42
+ detail,
43
+ bubbles: true,
44
+ composed: true,
45
+ }));
46
+ }
47
+ /**
48
+ * Row-level click handler. Makes the entire row a click target for
49
+ * toggling the checkbox — a UX nicety that matches Plaid/Apple-style
50
+ * consent rows. Skips when the user clicks the per-row "View policy"
51
+ * button, the policy disclosure, or any link inside the description, so
52
+ * those interactive children retain their own behavior.
53
+ */
54
+ onRowClick(event) {
55
+ const target = event.target;
56
+ if (!target)
57
+ return;
58
+ // Walk the composed path to detect interactive children we shouldn't
59
+ // hijack — the policy toggle/disclosure or any anchor.
60
+ const path = event.composedPath?.() || [];
61
+ for (const node of path) {
62
+ if (!(node instanceof HTMLElement))
63
+ continue;
64
+ if (node === this)
65
+ break;
66
+ if (node.classList?.contains("policy-toggle") ||
67
+ node.classList?.contains("policy-disclosure") ||
68
+ node.tagName === "A" ||
69
+ node.tagName === "BUTTON") {
70
+ // Already-handled child (incl. our own checkbox button — its own
71
+ // @click toggles, no double-fire from row click).
72
+ return;
73
+ }
74
+ }
75
+ this.toggleChecked();
76
+ }
77
+ togglePolicy(event) {
78
+ // Stop the row click from also toggling the checkbox when the user
79
+ // clicked specifically on "View policy".
80
+ event?.stopPropagation();
81
+ this.policyOpen = !this.policyOpen;
82
+ }
83
+ isHigherRisk() {
84
+ return this.riskLevel === "high" || this.riskLevel === "critical";
85
+ }
86
+ renderIcon() {
87
+ return iconSvgFor(this.icon);
88
+ }
89
+ renderPolicy() {
90
+ if (!this.policyOpen)
91
+ return nothing;
92
+ if (!this.compiledCedar)
93
+ return nothing;
94
+ const explanation = explainCedarFragment(this.compiledCedar);
95
+ const tokens = CONSENT_COPY_TOKENS.capabilityRow;
96
+ return html `
97
+ <div class="policy-disclosure" part="policy">
98
+ <h4>${tokens.glossTitle}</h4>
99
+ <ul>
100
+ ${explanation.actions.length === 0
101
+ ? html `<li>—</li>`
102
+ : explanation.actions.map((action) => html `<li><code>${action}</code></li>`)}
103
+ </ul>
104
+ ${explanation.resource
105
+ ? html `<p>
106
+ On <code>${explanation.resource}</code>
107
+ </p>`
108
+ : html `<p>On ${tokens.glossUnknownResource}</p>`}
109
+ <h4>${tokens.rawPolicyTitle}</h4>
110
+ <pre><code>${this.compiledCedar}</code></pre>
111
+ </div>
112
+ `;
113
+ }
114
+ render() {
115
+ const tokens = CONSENT_COPY_TOKENS.capabilityRow;
116
+ return html `
117
+ <div
118
+ class="row"
119
+ part="row"
120
+ role="button"
121
+ tabindex="0"
122
+ @click=${this.onRowClick}
123
+ @keydown=${(e) => {
124
+ if (e.key === " " || e.key === "Enter") {
125
+ e.preventDefault();
126
+ this.toggleChecked();
127
+ }
128
+ }}
129
+ >
130
+ <button
131
+ class="checkbox"
132
+ part="checkbox"
133
+ role="checkbox"
134
+ aria-checked="${String(this.checked)}"
135
+ aria-label="${this.label}"
136
+ @click=${(e) => {
137
+ e.stopPropagation();
138
+ this.toggleChecked();
139
+ }}
140
+ type="button"
141
+ tabindex="-1"
142
+ >
143
+ ${this.checked ? html `<span class="check-mark">✓</span>` : nothing}
144
+ </button>
145
+ <div class="icon-tile" aria-hidden="true">${this.renderIcon()}</div>
146
+ <div class="body">
147
+ <div class="row-label">
148
+ <span><strong>${this.label}</strong> <span class="description">${this.description}</span></span>
149
+ ${this.isHigherRisk()
150
+ ? html `<span class="risk-chip">${tokens.higherRiskChip}</span>`
151
+ : nothing}
152
+ </div>
153
+ <button
154
+ class="policy-toggle"
155
+ type="button"
156
+ @click=${this.togglePolicy}
157
+ aria-expanded="${String(this.policyOpen)}"
158
+ >
159
+ ${tokens.viewPolicyLink}
160
+ </button>
161
+ ${this.renderPolicy()}
162
+ </div>
163
+ </div>
164
+ `;
165
+ }
166
+ };
167
+ ConsentCapabilityCard.styles = css `
168
+ :host {
169
+ display: block;
170
+ border-bottom: 1px solid var(--cs-surface-border, rgba(15, 23, 42, 0.08));
171
+ }
172
+
173
+ :host(:last-of-type) {
174
+ border-bottom: none;
175
+ }
176
+
177
+ .row {
178
+ display: grid;
179
+ grid-template-columns: 22px 36px 1fr;
180
+ gap: 14px;
181
+ padding: 16px 0;
182
+ align-items: flex-start;
183
+ cursor: pointer;
184
+ transition: background 0.12s ease;
185
+ margin: 0 -10px;
186
+ padding-left: 10px;
187
+ padding-right: 10px;
188
+ border-radius: 8px;
189
+ }
190
+
191
+ .row:hover {
192
+ background: var(--cs-row-hover-bg, rgba(15, 23, 42, 0.025));
193
+ }
194
+
195
+ .checkbox {
196
+ width: 22px;
197
+ height: 22px;
198
+ border-radius: 6px;
199
+ border: 1.5px solid var(--cs-text-secondary, #334155);
200
+ background: transparent;
201
+ cursor: pointer;
202
+ display: flex;
203
+ align-items: center;
204
+ justify-content: center;
205
+ padding: 0;
206
+ transition: background 0.12s ease, border-color 0.12s ease;
207
+ }
208
+
209
+ .checkbox[aria-checked="true"] {
210
+ background: var(--cs-surface-accent, #0F172A);
211
+ border-color: var(--cs-surface-accent, #0F172A);
212
+ }
213
+
214
+ .checkbox:focus-visible {
215
+ outline: 2px solid var(--cs-focus-ring, #0F172A);
216
+ outline-offset: 2px;
217
+ }
218
+
219
+ .check-mark {
220
+ color: var(--cs-surface-accent-text, #fff);
221
+ font-size: 14px;
222
+ line-height: 1;
223
+ }
224
+
225
+ .icon-tile {
226
+ width: 36px;
227
+ height: 36px;
228
+ border-radius: 10px;
229
+ background: var(--cs-surface-inset, #F1ECE2);
230
+ display: flex;
231
+ align-items: center;
232
+ justify-content: center;
233
+ color: var(--cs-text-secondary, #334155);
234
+ }
235
+
236
+ .icon-tile svg {
237
+ width: 18px;
238
+ height: 18px;
239
+ }
240
+
241
+ .body {
242
+ display: flex;
243
+ flex-direction: column;
244
+ gap: 6px;
245
+ min-width: 0;
246
+ }
247
+
248
+ .row-label {
249
+ display: flex;
250
+ align-items: center;
251
+ gap: 10px;
252
+ flex-wrap: wrap;
253
+ font-size: 14.5px;
254
+ color: var(--cs-text-primary, #0F172A);
255
+ line-height: 1.45;
256
+ }
257
+
258
+ .row-label strong {
259
+ font-weight: 600;
260
+ }
261
+
262
+ .description {
263
+ color: var(--cs-text-secondary, #334155);
264
+ }
265
+
266
+ .risk-chip {
267
+ display: inline-flex;
268
+ padding: 2px 8px;
269
+ border-radius: 999px;
270
+ font-size: 10.5px;
271
+ font-weight: 700;
272
+ letter-spacing: 0.06em;
273
+ background: var(--cs-chip-risk-bg, #FCE7B6);
274
+ color: var(--cs-chip-risk-text, #7A4F00);
275
+ }
276
+
277
+ .policy-toggle {
278
+ align-self: flex-start;
279
+ background: none;
280
+ border: none;
281
+ padding: 0;
282
+ font-size: 12px;
283
+ font-weight: 500;
284
+ color: var(--cs-text-tertiary, #64748B);
285
+ text-decoration: underline;
286
+ text-underline-offset: 2px;
287
+ cursor: pointer;
288
+ }
289
+
290
+ .policy-toggle:focus-visible {
291
+ outline: 2px solid var(--cs-focus-ring, #0F172A);
292
+ outline-offset: 2px;
293
+ }
294
+
295
+ .policy-disclosure {
296
+ margin-top: 8px;
297
+ border-radius: 10px;
298
+ background: var(--cs-surface-inset, #F1ECE2);
299
+ padding: 10px 12px;
300
+ font-size: 12px;
301
+ color: var(--cs-text-secondary, #334155);
302
+ display: flex;
303
+ flex-direction: column;
304
+ gap: 8px;
305
+ }
306
+
307
+ .policy-disclosure h4 {
308
+ margin: 0;
309
+ font-size: 11px;
310
+ letter-spacing: 0.08em;
311
+ text-transform: uppercase;
312
+ color: var(--cs-text-tertiary, #64748B);
313
+ }
314
+
315
+ .policy-disclosure pre {
316
+ margin: 0;
317
+ font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
318
+ font-size: 11.5px;
319
+ line-height: 1.5;
320
+ white-space: pre-wrap;
321
+ word-break: break-word;
322
+ color: var(--cs-text-primary, #0F172A);
323
+ }
324
+
325
+ .policy-disclosure ul {
326
+ margin: 0;
327
+ padding-left: 18px;
328
+ }
329
+ `;
330
+ __decorate([
331
+ property({ type: String })
332
+ ], ConsentCapabilityCard.prototype, "capabilityId", void 0);
333
+ __decorate([
334
+ property({ type: String })
335
+ ], ConsentCapabilityCard.prototype, "label", void 0);
336
+ __decorate([
337
+ property({ type: String })
338
+ ], ConsentCapabilityCard.prototype, "description", void 0);
339
+ __decorate([
340
+ property({ type: String })
341
+ ], ConsentCapabilityCard.prototype, "icon", void 0);
342
+ __decorate([
343
+ property({ type: String })
344
+ ], ConsentCapabilityCard.prototype, "riskLevel", void 0);
345
+ __decorate([
346
+ property({ type: Boolean, reflect: true })
347
+ ], ConsentCapabilityCard.prototype, "checked", void 0);
348
+ __decorate([
349
+ property({ type: String, attribute: "compiled-cedar" })
350
+ ], ConsentCapabilityCard.prototype, "compiledCedar", void 0);
351
+ __decorate([
352
+ state()
353
+ ], ConsentCapabilityCard.prototype, "policyOpen", void 0);
354
+ ConsentCapabilityCard = __decorate([
355
+ customElement("consent-capability-card")
356
+ ], ConsentCapabilityCard);
357
+ export { ConsentCapabilityCard };
358
+ /**
359
+ * Inline SVG icons for the recognized capability icons. Kept inline to avoid
360
+ * an asset-loading hop in shadow DOM.
361
+ */
362
+ function iconSvgFor(icon) {
363
+ switch (icon) {
364
+ case "search":
365
+ return html `<svg viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"><circle cx="9" cy="9" r="5.25"/><path d="m13.25 13.25 3.5 3.5"/></svg>`;
366
+ case "cart":
367
+ return html `<svg viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"><path d="M3 3h2l1.4 9.4a1.5 1.5 0 0 0 1.5 1.3h7.6a1.5 1.5 0 0 0 1.5-1.2L18 6H6"/><circle cx="9" cy="17" r="1.2"/><circle cx="15" cy="17" r="1.2"/></svg>`;
368
+ case "card":
369
+ return html `<svg viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"><rect x="2.5" y="4.5" width="15" height="11" rx="2"/><path d="M2.5 9h15"/><path d="M5.5 13h3"/></svg>`;
370
+ case "pin":
371
+ return html `<svg viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"><path d="M10 17s-5.5-5-5.5-9a5.5 5.5 0 1 1 11 0c0 4-5.5 9-5.5 9z"/><circle cx="10" cy="8" r="2"/></svg>`;
372
+ case "pin-new":
373
+ return html `<svg viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"><path d="M10 17s-5.5-5-5.5-9a5.5 5.5 0 1 1 11 0c0 4-5.5 9-5.5 9z"/><path d="M10 6v4"/><path d="M8 8h4"/></svg>`;
374
+ case "shield":
375
+ return html `<svg viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"><path d="M10 2.5 4 5v5.5C4 14 6.5 16.5 10 17.5c3.5-1 6-3.5 6-7V5z"/></svg>`;
376
+ case "key":
377
+ return html `<svg viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"><circle cx="7" cy="13" r="3.25"/><path d="m9.5 11 6.5-6.5"/><path d="m13.5 7 2 2"/></svg>`;
378
+ case "tools":
379
+ return html `<svg viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"><path d="m4 4 6 6"/><path d="m10 4 6 6"/><path d="m4 16 12-12"/></svg>`;
380
+ case "user":
381
+ return html `<svg viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"><circle cx="10" cy="7" r="3"/><path d="M3 17a7 7 0 0 1 14 0"/></svg>`;
382
+ case "calendar":
383
+ return html `<svg viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="4" width="14" height="13" rx="2"/><path d="M3 8h14"/><path d="M7 2v4M13 2v4"/></svg>`;
384
+ case "lock":
385
+ return html `<svg viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"><rect x="4" y="9" width="12" height="8" rx="2"/><path d="M7 9V6a3 3 0 0 1 6 0v3"/></svg>`;
386
+ case "eye":
387
+ return html `<svg viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"><path d="M2 10s3-6 8-6 8 6 8 6-3 6-8 6-8-6-8-6z"/><circle cx="10" cy="10" r="2.25"/></svg>`;
388
+ case "send":
389
+ return html `<svg viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"><path d="m17 3-7 7-2 7-3-9z"/></svg>`;
390
+ case "package":
391
+ return html `<svg viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"><path d="m10 2 7 4v8l-7 4-7-4V6z"/><path d="m3 6 7 4 7-4"/><path d="M10 18V10"/></svg>`;
392
+ default:
393
+ return html `<svg viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"><circle cx="10" cy="10" r="5"/></svg>`;
394
+ }
395
+ }
396
+ //# sourceMappingURL=consent-capability-card.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"consent-capability-card.js","sourceRoot":"","sources":["../../src/components/consent-capability-card.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Consent Connector Header
3
+ *
4
+ * Top-of-page visual matching Peter's mockup: client logo on the left, an
5
+ * animated dotted bridge with the Checkpoint shield in the middle, and the
6
+ * server brand logo on the right. Communicates "{client} is connecting to
7
+ * {server} via Checkpoint" before the user reads any copy.
8
+ *
9
+ * Logo resolution priority:
10
+ * 1. explicit `clientLogoUrl` / `serverLogoUrl` attributes (operator override)
11
+ * 2. derived from `clientDid` (e.g. did:web:knowthat.ai:agents:claude →
12
+ * `https://knowthat.ai/img/agents/claude.png`)
13
+ * 3. logo.dev fallback when `logoDevToken` is set + a domain is derivable
14
+ * 4. monogram tile (first letter of name) as the last-resort placeholder
15
+ *
16
+ * Designed to be brand-agnostic: every client/server pair gets the same
17
+ * shape, with only the artwork swapped per deployment.
18
+ *
19
+ * @module components/consent-connector-header
20
+ */
21
+ import { LitElement } from "lit";
22
+ export declare class ConsentConnectorHeader extends LitElement {
23
+ /** Display name of the agent / client (e.g. "Claude"). */
24
+ clientName: string;
25
+ /** Agent DID — used for KTA-derived logo lookup when no explicit URL. */
26
+ clientDid: string;
27
+ /** Explicit override for the client logo. */
28
+ clientLogoUrl: string;
29
+ /** Display name of the server / org (e.g. "Hardware World"). */
30
+ serverName: string;
31
+ /** Server brand domain — used for logo.dev lookup when no explicit URL. */
32
+ serverDomain: string;
33
+ /** Explicit override for the server brand logo. */
34
+ serverLogoUrl: string;
35
+ /**
36
+ * Optional logo.dev publishable token. When supplied, used to fetch
37
+ * brand logos by domain. Falls back to monogram tile if missing or if
38
+ * logo.dev returns 404.
39
+ */
40
+ logoDevToken: string;
41
+ private clientImageOk;
42
+ private serverImageOk;
43
+ static styles: import("lit").CSSResult;
44
+ /**
45
+ * Derive a logo URL for an agent DID via KTA hosting convention.
46
+ * `did:web:knowthat.ai:agents:claude` → `https://knowthat.ai/img/agents/claude.png`
47
+ */
48
+ private ktaLogoFromDid;
49
+ /**
50
+ * Derive a brand logo URL via logo.dev given a domain. Returns undefined
51
+ * when no token is configured or the domain is unparseable.
52
+ */
53
+ private logoDevLogo;
54
+ private resolveClientLogo;
55
+ private resolveServerLogo;
56
+ private monogram;
57
+ render(): import("lit").TemplateResult<1>;
58
+ }
59
+ declare global {
60
+ interface HTMLElementTagNameMap {
61
+ "consent-connector-header": ConsentConnectorHeader;
62
+ }
63
+ }
64
+ //# sourceMappingURL=consent-connector-header.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"consent-connector-header.d.ts","sourceRoot":"","sources":["../../src/components/consent-connector-header.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,UAAU,EAAa,MAAM,KAAK,CAAC;AAG5C,qBACa,sBAAuB,SAAQ,UAAU;IACpD,0DAA0D;IAC9B,UAAU,SAAM;IAE5C,yEAAyE;IAC7C,SAAS,SAAM;IAE3C,6CAA6C;IACa,aAAa,SAAM;IAE7E,gEAAgE;IACpC,UAAU,SAAM;IAE5C,2EAA2E;IACnB,YAAY,SAAM;IAE1E,mDAAmD;IACO,aAAa,SAAM;IAE7E;;;;OAIG;IACsD,YAAY,SAAM;IAElE,OAAO,CAAC,aAAa,CAAQ;IAC7B,OAAO,CAAC,aAAa,CAAQ;IAEtC,OAAgB,MAAM,0BAsFpB;IAEF;;;OAGG;IACH,OAAO,CAAC,cAAc;IAOtB;;;OAGG;IACH,OAAO,CAAC,WAAW;IASnB,OAAO,CAAC,iBAAiB;IAKzB,OAAO,CAAC,iBAAiB;IAKzB,OAAO,CAAC,QAAQ;IAIP,MAAM;CAsChB;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,0BAA0B,EAAE,sBAAsB,CAAC;KACpD;CACF"}