@signalwire/web-components 1.0.0-dev-20260428141127 → 1.0.0-dev-20260428183200

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 (187) hide show
  1. package/README.md +45 -52
  2. package/dist/_virtual/_commonjsHelpers.js +9 -0
  3. package/dist/_virtual/_commonjsHelpers.js.map +1 -0
  4. package/dist/_virtual/prism-python.js +28 -0
  5. package/dist/_virtual/prism-python.js.map +1 -0
  6. package/dist/_virtual/prism-python2.js +5 -0
  7. package/dist/_virtual/prism-python2.js.map +1 -0
  8. package/dist/_virtual/prism-typescript.js +28 -0
  9. package/dist/_virtual/prism-typescript.js.map +1 -0
  10. package/dist/_virtual/prism-typescript2.js +5 -0
  11. package/dist/_virtual/prism-typescript2.js.map +1 -0
  12. package/dist/_virtual/prism.js +28 -0
  13. package/dist/_virtual/prism.js.map +1 -0
  14. package/dist/_virtual/prism2.js +5 -0
  15. package/dist/_virtual/prism2.js.map +1 -0
  16. package/dist/assets/sw_background.webp.js +5 -0
  17. package/dist/assets/sw_background.webp.js.map +1 -0
  18. package/dist/components/UI/DEFAULT_BACKGROUND.d.ts +4 -0
  19. package/dist/components/UI/DEFAULT_BACKGROUND.d.ts.map +1 -0
  20. package/dist/components/UI/DEFAULT_BACKGROUND.js +5 -0
  21. package/dist/components/UI/DEFAULT_BACKGROUND.js.map +1 -0
  22. package/dist/components/UI/controls/sw-ui-control-bar.d.ts +114 -0
  23. package/dist/components/UI/controls/sw-ui-control-bar.d.ts.map +1 -0
  24. package/dist/components/UI/controls/sw-ui-control-bar.js +324 -0
  25. package/dist/components/UI/controls/sw-ui-control-bar.js.map +1 -0
  26. package/dist/components/UI/controls/sw-ui-dialpad.d.ts +57 -0
  27. package/dist/components/UI/controls/sw-ui-dialpad.d.ts.map +1 -0
  28. package/dist/components/UI/controls/sw-ui-dialpad.js +319 -0
  29. package/dist/components/UI/controls/sw-ui-dialpad.js.map +1 -0
  30. package/dist/components/UI/controls/sw-ui-dropup.d.ts +42 -0
  31. package/dist/components/UI/controls/sw-ui-dropup.d.ts.map +1 -0
  32. package/dist/components/UI/controls/sw-ui-dropup.js +137 -0
  33. package/dist/components/UI/controls/sw-ui-dropup.js.map +1 -0
  34. package/dist/components/UI/controls/sw-ui-split-button.d.ts +44 -0
  35. package/dist/components/UI/controls/sw-ui-split-button.d.ts.map +1 -0
  36. package/dist/components/UI/controls/sw-ui-split-button.js +177 -0
  37. package/dist/components/UI/controls/sw-ui-split-button.js.map +1 -0
  38. package/dist/components/UI/icons/backspace.svg.js +10 -0
  39. package/dist/components/UI/icons/backspace.svg.js.map +1 -0
  40. package/dist/components/UI/icons/camera-off.svg.js +8 -0
  41. package/dist/components/UI/icons/camera-off.svg.js.map +1 -0
  42. package/dist/components/UI/icons/camera-on.svg.js +8 -0
  43. package/dist/components/UI/icons/camera-on.svg.js.map +1 -0
  44. package/dist/components/UI/icons/check-circle.svg.js +6 -0
  45. package/dist/components/UI/icons/check-circle.svg.js.map +1 -0
  46. package/dist/components/UI/icons/chevron-up.svg.js +8 -0
  47. package/dist/components/UI/icons/chevron-up.svg.js.map +1 -0
  48. package/dist/components/UI/icons/close.svg.js +6 -0
  49. package/dist/components/UI/icons/close.svg.js.map +1 -0
  50. package/dist/components/UI/icons/copy.svg.js +6 -0
  51. package/dist/components/UI/icons/copy.svg.js.map +1 -0
  52. package/dist/components/UI/icons/download.svg.js +6 -0
  53. package/dist/components/UI/icons/download.svg.js.map +1 -0
  54. package/dist/components/UI/icons/fullscreen-exit.svg.js +8 -0
  55. package/dist/components/UI/icons/fullscreen-exit.svg.js.map +1 -0
  56. package/dist/components/UI/icons/fullscreen.svg.js +8 -0
  57. package/dist/components/UI/icons/fullscreen.svg.js.map +1 -0
  58. package/dist/components/UI/icons/hand-raise.svg.js +6 -0
  59. package/dist/components/UI/icons/hand-raise.svg.js.map +1 -0
  60. package/dist/components/UI/icons/icons.d.ts +31 -0
  61. package/dist/components/UI/icons/icons.d.ts.map +1 -0
  62. package/dist/components/UI/icons/icons.js +60 -0
  63. package/dist/components/UI/icons/icons.js.map +1 -0
  64. package/dist/components/UI/icons/index.d.ts +4 -0
  65. package/dist/components/UI/icons/index.d.ts.map +1 -0
  66. package/dist/components/UI/icons/info-circle.svg.js +6 -0
  67. package/dist/components/UI/icons/info-circle.svg.js.map +1 -0
  68. package/dist/components/UI/icons/mic-off.svg.js +8 -0
  69. package/dist/components/UI/icons/mic-off.svg.js.map +1 -0
  70. package/dist/components/UI/icons/mic-on.svg.js +8 -0
  71. package/dist/components/UI/icons/mic-on.svg.js.map +1 -0
  72. package/dist/components/UI/icons/person.svg.js +8 -0
  73. package/dist/components/UI/icons/person.svg.js.map +1 -0
  74. package/dist/components/UI/icons/phone-call.svg.js +8 -0
  75. package/dist/components/UI/icons/phone-call.svg.js.map +1 -0
  76. package/dist/components/UI/icons/phone-end.svg.js +8 -0
  77. package/dist/components/UI/icons/phone-end.svg.js.map +1 -0
  78. package/dist/components/UI/icons/room.svg.js +8 -0
  79. package/dist/components/UI/icons/room.svg.js.map +1 -0
  80. package/dist/components/UI/icons/screen-share-off.svg.js +9 -0
  81. package/dist/components/UI/icons/screen-share-off.svg.js.map +1 -0
  82. package/dist/components/UI/icons/screen-share.svg.js +9 -0
  83. package/dist/components/UI/icons/screen-share.svg.js.map +1 -0
  84. package/dist/components/UI/icons/sendIcon.svg.js +9 -0
  85. package/dist/components/UI/icons/sendIcon.svg.js.map +1 -0
  86. package/dist/components/UI/icons/settings.svg.js +8 -0
  87. package/dist/components/UI/icons/settings.svg.js.map +1 -0
  88. package/dist/components/UI/icons/speaker-off.svg.js +8 -0
  89. package/dist/components/UI/icons/speaker-off.svg.js.map +1 -0
  90. package/dist/components/UI/icons/speaker-on.svg.js +8 -0
  91. package/dist/components/UI/icons/speaker-on.svg.js.map +1 -0
  92. package/dist/components/UI/icons/spinner.svg.js +9 -0
  93. package/dist/components/UI/icons/spinner.svg.js.map +1 -0
  94. package/dist/components/UI/icons/sw-logo.svg.js +11 -0
  95. package/dist/components/UI/icons/sw-logo.svg.js.map +1 -0
  96. package/dist/components/UI/icons/sw-ui-icon.d.ts +28 -0
  97. package/dist/components/UI/icons/sw-ui-icon.d.ts.map +1 -0
  98. package/dist/components/UI/icons/sw-ui-icon.js +47 -0
  99. package/dist/components/UI/icons/sw-ui-icon.js.map +1 -0
  100. package/dist/components/UI/icons/transcript.svg.js +10 -0
  101. package/dist/components/UI/icons/transcript.svg.js.map +1 -0
  102. package/dist/components/UI/index.d.ts +18 -0
  103. package/dist/components/UI/index.d.ts.map +1 -0
  104. package/dist/components/UI/layout/sw-ui-background.d.ts +33 -0
  105. package/dist/components/UI/layout/sw-ui-background.d.ts.map +1 -0
  106. package/dist/components/UI/layout/sw-ui-background.js +106 -0
  107. package/dist/components/UI/layout/sw-ui-background.js.map +1 -0
  108. package/dist/components/UI/layout/sw-ui-call-layout.d.ts +69 -0
  109. package/dist/components/UI/layout/sw-ui-call-layout.d.ts.map +1 -0
  110. package/dist/components/UI/layout/sw-ui-call-layout.js +278 -0
  111. package/dist/components/UI/layout/sw-ui-call-layout.js.map +1 -0
  112. package/dist/components/UI/layout/sw-ui-content-drawer.d.ts +50 -0
  113. package/dist/components/UI/layout/sw-ui-content-drawer.d.ts.map +1 -0
  114. package/dist/components/UI/layout/sw-ui-content-drawer.js +413 -0
  115. package/dist/components/UI/layout/sw-ui-content-drawer.js.map +1 -0
  116. package/dist/components/UI/layout/sw-ui-modal.d.ts +31 -0
  117. package/dist/components/UI/layout/sw-ui-modal.d.ts.map +1 -0
  118. package/dist/components/UI/layout/sw-ui-modal.js +150 -0
  119. package/dist/components/UI/layout/sw-ui-modal.js.map +1 -0
  120. package/dist/components/UI/layout/sw-ui-responsive-container.d.ts +15 -0
  121. package/dist/components/UI/layout/sw-ui-responsive-container.d.ts.map +1 -0
  122. package/dist/components/UI/layout/sw-ui-responsive-container.js +78 -0
  123. package/dist/components/UI/layout/sw-ui-responsive-container.js.map +1 -0
  124. package/dist/components/UI/sw-ui-alert.d.ts +37 -0
  125. package/dist/components/UI/sw-ui-alert.d.ts.map +1 -0
  126. package/dist/components/UI/sw-ui-alert.js +126 -0
  127. package/dist/components/UI/sw-ui-alert.js.map +1 -0
  128. package/dist/components/UI/sw-ui-transcript-view.d.ts +56 -0
  129. package/dist/components/UI/sw-ui-transcript-view.d.ts.map +1 -0
  130. package/dist/components/UI/sw-ui-transcript-view.js +341 -0
  131. package/dist/components/UI/sw-ui-transcript-view.js.map +1 -0
  132. package/dist/components/directory.d.ts +10 -18
  133. package/dist/components/directory.d.ts.map +1 -1
  134. package/dist/components/directory.js +129 -198
  135. package/dist/components/directory.js.map +1 -1
  136. package/dist/embed/signalwire-web-components-embed.iife.js +2336 -982
  137. package/dist/embed/signalwire-web-components-embed.iife.js.map +1 -1
  138. package/dist/embed/signalwire-web-components-embed.umd.cjs +2336 -982
  139. package/dist/embed/signalwire-web-components-embed.umd.cjs.map +1 -1
  140. package/dist/embed.d.ts +1 -1
  141. package/dist/embed.d.ts.map +1 -1
  142. package/dist/index.d.ts +2 -3
  143. package/dist/index.d.ts.map +1 -1
  144. package/dist/index.js +54 -33
  145. package/dist/index.js.map +1 -1
  146. package/dist/node_modules/dompurify/dist/purify.es.js +597 -0
  147. package/dist/node_modules/dompurify/dist/purify.es.js.map +1 -0
  148. package/dist/node_modules/marked/lib/marked.esm.js +1475 -0
  149. package/dist/node_modules/marked/lib/marked.esm.js.map +1 -0
  150. package/dist/node_modules/prismjs/components/prism-bash.js +220 -0
  151. package/dist/node_modules/prismjs/components/prism-bash.js.map +1 -0
  152. package/dist/node_modules/prismjs/components/prism-css.js +56 -0
  153. package/dist/node_modules/prismjs/components/prism-css.js.map +1 -0
  154. package/dist/node_modules/prismjs/components/prism-javascript.js +138 -0
  155. package/dist/node_modules/prismjs/components/prism-javascript.js.map +1 -0
  156. package/dist/node_modules/prismjs/components/prism-json.js +26 -0
  157. package/dist/node_modules/prismjs/components/prism-json.js.map +1 -0
  158. package/dist/node_modules/prismjs/components/prism-markdown.js +301 -0
  159. package/dist/node_modules/prismjs/components/prism-markdown.js.map +1 -0
  160. package/dist/node_modules/prismjs/components/prism-python.js +69 -0
  161. package/dist/node_modules/prismjs/components/prism-python.js.map +1 -0
  162. package/dist/node_modules/prismjs/components/prism-sql.js +34 -0
  163. package/dist/node_modules/prismjs/components/prism-sql.js.map +1 -0
  164. package/dist/node_modules/prismjs/components/prism-typescript.js +53 -0
  165. package/dist/node_modules/prismjs/components/prism-typescript.js.map +1 -0
  166. package/dist/node_modules/prismjs/components/prism-yaml.js +67 -0
  167. package/dist/node_modules/prismjs/components/prism-yaml.js.map +1 -0
  168. package/dist/node_modules/prismjs/prism.js +1165 -0
  169. package/dist/node_modules/prismjs/prism.js.map +1 -0
  170. package/dist/react.d.ts +3 -3
  171. package/dist/utils/prism.d.ts +4 -0
  172. package/dist/utils/prism.d.ts.map +1 -0
  173. package/dist/utils/prism.js +34 -0
  174. package/dist/utils/prism.js.map +1 -0
  175. package/dist/utils/transcriptToMarkdown.d.ts +14 -0
  176. package/dist/utils/transcriptToMarkdown.d.ts.map +1 -0
  177. package/dist/utils/transcriptToMarkdown.js +59 -0
  178. package/dist/utils/transcriptToMarkdown.js.map +1 -0
  179. package/package.json +53 -9
  180. package/dist/components/dialpad.d.ts +0 -74
  181. package/dist/components/dialpad.d.ts.map +0 -1
  182. package/dist/components/dialpad.js +0 -372
  183. package/dist/components/dialpad.js.map +0 -1
  184. package/dist/components/example-button.d.ts +0 -21
  185. package/dist/components/example-button.d.ts.map +0 -1
  186. package/dist/components/example-button.js +0 -74
  187. package/dist/components/example-button.js.map +0 -1
@@ -0,0 +1,78 @@
1
+ import { LitElement as l, html as h, css as p } from "lit";
2
+ import { customElement as c } from "lit/decorators.js";
3
+ var d = Object.getOwnPropertyDescriptor, m = (i, n, s, o) => {
4
+ for (var e = o > 1 ? void 0 : o ? d(n, s) : n, t = i.length - 1, r; t >= 0; t--)
5
+ (r = i[t]) && (e = r(e) || e);
6
+ return e;
7
+ };
8
+ let a = class extends l {
9
+ render() {
10
+ return h`<div class="container"><slot></slot></div>`;
11
+ }
12
+ };
13
+ a.styles = p`
14
+ .container {
15
+ margin: 0 auto;
16
+
17
+ /* Default: small monitors */
18
+ width: 90vw;
19
+
20
+ /* Maintain 16:9 baseline */
21
+ aspect-ratio: 16 / 9;
22
+
23
+ /* Height cap: (16/9 height) + 300px */
24
+ max-height: calc((100vw * 9 / 16) + 300px);
25
+
26
+ /* Prevent overflow issues */
27
+ overflow: hidden;
28
+ }
29
+
30
+ /* 1. Larger monitors (MacBook Air 13" and up ~1280px+) */
31
+ @media (min-width: 1280px) {
32
+ .container {
33
+ width: 80vw;
34
+
35
+ /* Adjust cap relative to actual width */
36
+ max-height: calc((80vw * 9 / 16) + 300px);
37
+ }
38
+ }
39
+
40
+ /* 3. Mobile devices (portrait) */
41
+ @media (max-width: 600px) {
42
+ .container {
43
+ width: calc(100vw - 40px);
44
+
45
+ aspect-ratio: auto; /* let it flow naturally */
46
+ max-height: none;
47
+ height: 85svh;
48
+ }
49
+ }
50
+
51
+ /* 4. Edge cases: very small but not mobile (e.g., 500x400, landscape phones) */
52
+ @media (max-height: 500px) and (min-width: 600px) {
53
+ .container {
54
+ width: 90vw;
55
+
56
+ /* Cap height more aggressively */
57
+ max-height: 90vh;
58
+
59
+ /* Drop strict aspect ratio if needed */
60
+ aspect-ratio: auto;
61
+ }
62
+ }
63
+
64
+ /* Optional: landscape phones treated like small monitors */
65
+ @media (max-width: 900px) and (orientation: landscape) {
66
+ .container {
67
+ width: 90vw;
68
+ max-height: 90vh;
69
+ }
70
+ }
71
+ `;
72
+ a = m([
73
+ c("sw-ui-responsive-container")
74
+ ], a);
75
+ export {
76
+ a as SwUiResponsiveContainer
77
+ };
78
+ //# sourceMappingURL=sw-ui-responsive-container.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sw-ui-responsive-container.js","sources":["../../../../src/components/UI/layout/sw-ui-responsive-container.ts"],"sourcesContent":["import { LitElement, css, html } from 'lit';\nimport { customElement } from 'lit/decorators.js';\n\n/**\n * Resizes itself to an appropriate modal size based on viewport size\n * @slot items to hold inside responsive modal\n */\n@customElement('sw-ui-responsive-container')\nexport class SwUiResponsiveContainer extends LitElement {\n static styles = css`\n .container {\n margin: 0 auto;\n\n /* Default: small monitors */\n width: 90vw;\n\n /* Maintain 16:9 baseline */\n aspect-ratio: 16 / 9;\n\n /* Height cap: (16/9 height) + 300px */\n max-height: calc((100vw * 9 / 16) + 300px);\n\n /* Prevent overflow issues */\n overflow: hidden;\n }\n\n /* 1. Larger monitors (MacBook Air 13\" and up ~1280px+) */\n @media (min-width: 1280px) {\n .container {\n width: 80vw;\n\n /* Adjust cap relative to actual width */\n max-height: calc((80vw * 9 / 16) + 300px);\n }\n }\n\n /* 3. Mobile devices (portrait) */\n @media (max-width: 600px) {\n .container {\n width: calc(100vw - 40px);\n\n aspect-ratio: auto; /* let it flow naturally */\n max-height: none;\n height: 85svh;\n }\n }\n\n /* 4. Edge cases: very small but not mobile (e.g., 500x400, landscape phones) */\n @media (max-height: 500px) and (min-width: 600px) {\n .container {\n width: 90vw;\n\n /* Cap height more aggressively */\n max-height: 90vh;\n\n /* Drop strict aspect ratio if needed */\n aspect-ratio: auto;\n }\n }\n\n /* Optional: landscape phones treated like small monitors */\n @media (max-width: 900px) and (orientation: landscape) {\n .container {\n width: 90vw;\n max-height: 90vh;\n }\n }\n `;\n\n render() {\n return html`<div class=\"container\"><slot></slot></div>`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'sw-ui-responsive-container': SwUiResponsiveContainer;\n }\n}\n"],"names":["SwUiResponsiveContainer","LitElement","html","css","__decorateClass","customElement"],"mappings":";;;;;;;AAQO,IAAMA,IAAN,cAAsCC,EAAW;AAAA,EA6DtD,SAAS;AACP,WAAOC;AAAA,EACT;AACF;AAhEaF,EACJ,SAASG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AADLH,IAANI,EAAA;AAAA,EADNC,EAAc,4BAA4B;AAAA,GAC9BL,CAAA;"}
@@ -0,0 +1,37 @@
1
+ import { LitElement } from 'lit';
2
+ export type PromptType = 'confirm' | 'alert';
3
+ /**
4
+ * Confirmation/alert prompt dialog
5
+ *
6
+ * @slot description content (falls back to the `description` property)
7
+ */
8
+ export declare class SwUiAlert extends LitElement {
9
+ static styles: import("lit").CSSResult;
10
+ title: string;
11
+ description: string;
12
+ type: PromptType;
13
+ private _dialog;
14
+ private _resolve;
15
+ /** Opens the prompt and returns a promise that resolves with the user's choice. */
16
+ show(): Promise<boolean>;
17
+ private _close;
18
+ render(): import("lit-html").TemplateResult<1>;
19
+ }
20
+ /**
21
+ * Programmatically show a prompt and await the user's response.
22
+ *
23
+ * @example
24
+ * const confirmed = await showPrompt({ title: "Delete item?", type: "confirm" });
25
+ * const ack = await showPrompt({ title: "Done!", type: "alert" });
26
+ */
27
+ export declare function showPrompt(options: {
28
+ title: string;
29
+ description?: string;
30
+ type?: PromptType;
31
+ }): Promise<boolean>;
32
+ declare global {
33
+ interface HTMLElementTagNameMap {
34
+ 'sw-ui-alert': SwUiAlert;
35
+ }
36
+ }
37
+ //# sourceMappingURL=sw-ui-alert.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sw-ui-alert.d.ts","sourceRoot":"","sources":["../../../src/components/UI/sw-ui-alert.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAa,MAAM,KAAK,CAAC;AAG5C,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,OAAO,CAAC;AAE7C;;;;GAIG;AACH,qBACa,SAAU,SAAQ,UAAU;IACvC,MAAM,CAAC,MAAM,0BA6DX;IAEkB,KAAK,EAAE,MAAM,CAAC;IACtB,WAAW,SAAM;IACA,IAAI,EAAE,UAAU,CAAa;IAEzC,OAAO,CAAC,OAAO,CAAqB;IAErD,OAAO,CAAC,QAAQ,CAA2C;IAE3D,mFAAmF;IACnF,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC;IAOxB,OAAO,CAAC,MAAM;IAMd,MAAM;CAkBP;AAED;;;;;;GAMG;AACH,wBAAsB,UAAU,CAAC,OAAO,EAAE;IACxC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,UAAU,CAAC;CACnB,GAAG,OAAO,CAAC,OAAO,CAAC,CAUnB;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,aAAa,EAAE,SAAS,CAAC;KAC1B;CACF"}
@@ -0,0 +1,126 @@
1
+ import { LitElement as p, html as n, css as u } from "lit";
2
+ import { property as d, query as h, customElement as m } from "lit/decorators.js";
3
+ var b = Object.defineProperty, f = Object.getOwnPropertyDescriptor, s = (e, t, i, c) => {
4
+ for (var r = c > 1 ? void 0 : c ? f(t, i) : t, l = e.length - 1, a; l >= 0; l--)
5
+ (a = e[l]) && (r = (c ? a(t, i, r) : a(r)) || r);
6
+ return c && r && b(t, i, r), r;
7
+ };
8
+ let o = class extends p {
9
+ constructor() {
10
+ super(...arguments), this.description = "", this.type = "confirm", this._resolve = null;
11
+ }
12
+ /** Opens the prompt and returns a promise that resolves with the user's choice. */
13
+ show() {
14
+ return this._dialog.showModal(), new Promise((e) => {
15
+ this._resolve = e;
16
+ });
17
+ }
18
+ _close(e) {
19
+ var t;
20
+ (t = this._resolve) == null || t.call(this, e), this._resolve = null, this._dialog.close();
21
+ }
22
+ render() {
23
+ return n`
24
+ <dialog>
25
+ <h2 class="title">${this.title}</h2>
26
+ <div class="body">
27
+ <slot>${this.description}</slot>
28
+ </div>
29
+ <div class="actions">
30
+ ${this.type === "confirm" ? n`
31
+ <button class="reject" @click=${() => this._close(!1)}>Reject</button>
32
+ <button class="accept" @click=${() => this._close(!0)}>Accept</button>
33
+ ` : n` <button class="accept" @click=${() => this._close(!0)}>OK</button> `}
34
+ </div>
35
+ </dialog>
36
+ `;
37
+ }
38
+ };
39
+ o.styles = u`
40
+ :host {
41
+ font-family: var(--type-family-body);
42
+ }
43
+
44
+ dialog {
45
+ border: none;
46
+ border-radius: var(--radius-md);
47
+ padding: 24px;
48
+ min-width: 280px;
49
+ max-width: 400px;
50
+ box-shadow: var(--shadow-md);
51
+ }
52
+
53
+ dialog::backdrop {
54
+ background: rgba(0, 0, 0, 0.4);
55
+ }
56
+
57
+ .title {
58
+ margin: 0 0 12px;
59
+ font-size: 1.125rem;
60
+ font-weight: 600;
61
+ }
62
+
63
+ .body {
64
+ margin: 0 0 20px;
65
+ line-height: 1.5;
66
+ }
67
+
68
+ .actions {
69
+ display: flex;
70
+ gap: 8px;
71
+ justify-content: flex-end;
72
+ }
73
+
74
+ button {
75
+ padding: 8px 16px;
76
+ border: none;
77
+ border-radius: 4px;
78
+ cursor: pointer;
79
+ font-size: 0.875rem;
80
+ font-family: inherit;
81
+ }
82
+
83
+ .accept {
84
+ background: var(--interactive-button-primary-bg);
85
+ color: white;
86
+ }
87
+
88
+ .accept:hover {
89
+ background: var(--interactive-button-primary-hover);
90
+ }
91
+
92
+ .reject {
93
+ background: #f3f4f6;
94
+ color: #374151;
95
+ }
96
+
97
+ .reject:hover {
98
+ background: #e5e7eb;
99
+ }
100
+ `;
101
+ s([
102
+ d()
103
+ ], o.prototype, "title", 2);
104
+ s([
105
+ d()
106
+ ], o.prototype, "description", 2);
107
+ s([
108
+ d({ reflect: !0 })
109
+ ], o.prototype, "type", 2);
110
+ s([
111
+ h("dialog")
112
+ ], o.prototype, "_dialog", 2);
113
+ o = s([
114
+ m("sw-ui-alert")
115
+ ], o);
116
+ async function g(e) {
117
+ const t = document.createElement("sw-ui-alert");
118
+ t.title = e.title, e.description !== void 0 && (t.description = e.description), e.type !== void 0 && (t.type = e.type), document.body.appendChild(t), await t.updateComplete;
119
+ const i = await t.show();
120
+ return t.remove(), i;
121
+ }
122
+ export {
123
+ o as SwUiAlert,
124
+ g as showPrompt
125
+ };
126
+ //# sourceMappingURL=sw-ui-alert.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sw-ui-alert.js","sources":["../../../src/components/UI/sw-ui-alert.ts"],"sourcesContent":["import { LitElement, css, html } from 'lit';\nimport { customElement, property, query } from 'lit/decorators.js';\n\nexport type PromptType = 'confirm' | 'alert';\n\n/**\n * Confirmation/alert prompt dialog\n *\n * @slot description content (falls back to the `description` property)\n */\n@customElement('sw-ui-alert')\nexport class SwUiAlert extends LitElement {\n static styles = css`\n :host {\n font-family: var(--type-family-body);\n }\n\n dialog {\n border: none;\n border-radius: var(--radius-md);\n padding: 24px;\n min-width: 280px;\n max-width: 400px;\n box-shadow: var(--shadow-md);\n }\n\n dialog::backdrop {\n background: rgba(0, 0, 0, 0.4);\n }\n\n .title {\n margin: 0 0 12px;\n font-size: 1.125rem;\n font-weight: 600;\n }\n\n .body {\n margin: 0 0 20px;\n line-height: 1.5;\n }\n\n .actions {\n display: flex;\n gap: 8px;\n justify-content: flex-end;\n }\n\n button {\n padding: 8px 16px;\n border: none;\n border-radius: 4px;\n cursor: pointer;\n font-size: 0.875rem;\n font-family: inherit;\n }\n\n .accept {\n background: var(--interactive-button-primary-bg);\n color: white;\n }\n\n .accept:hover {\n background: var(--interactive-button-primary-hover);\n }\n\n .reject {\n background: #f3f4f6;\n color: #374151;\n }\n\n .reject:hover {\n background: #e5e7eb;\n }\n `;\n\n @property() declare title: string;\n @property() description = '';\n @property({ reflect: true }) type: PromptType = 'confirm';\n\n @query('dialog') private _dialog!: HTMLDialogElement;\n\n private _resolve: ((value: boolean) => void) | null = null;\n\n /** Opens the prompt and returns a promise that resolves with the user's choice. */\n show(): Promise<boolean> {\n this._dialog.showModal();\n return new Promise((resolve) => {\n this._resolve = resolve;\n });\n }\n\n private _close(value: boolean) {\n this._resolve?.(value);\n this._resolve = null;\n this._dialog.close();\n }\n\n render() {\n return html`\n <dialog>\n <h2 class=\"title\">${this.title}</h2>\n <div class=\"body\">\n <slot>${this.description}</slot>\n </div>\n <div class=\"actions\">\n ${this.type === 'confirm'\n ? html`\n <button class=\"reject\" @click=${() => this._close(false)}>Reject</button>\n <button class=\"accept\" @click=${() => this._close(true)}>Accept</button>\n `\n : html` <button class=\"accept\" @click=${() => this._close(true)}>OK</button> `}\n </div>\n </dialog>\n `;\n }\n}\n\n/**\n * Programmatically show a prompt and await the user's response.\n *\n * @example\n * const confirmed = await showPrompt({ title: \"Delete item?\", type: \"confirm\" });\n * const ack = await showPrompt({ title: \"Done!\", type: \"alert\" });\n */\nexport async function showPrompt(options: {\n title: string;\n description?: string;\n type?: PromptType;\n}): Promise<boolean> {\n const el = document.createElement('sw-ui-alert') as SwUiAlert;\n el.title = options.title;\n if (options.description !== undefined) el.description = options.description;\n if (options.type !== undefined) el.type = options.type;\n document.body.appendChild(el);\n await el.updateComplete;\n const result = await el.show();\n el.remove();\n return result;\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'sw-ui-alert': SwUiAlert;\n }\n}\n"],"names":["SwUiAlert","LitElement","resolve","value","_a","html","css","__decorateClass","property","query","customElement","showPrompt","options","el","result"],"mappings":";;;;;;;AAWO,IAAMA,IAAN,cAAwBC,EAAW;AAAA,EAAnC,cAAA;AAAA,UAAA,GAAA,SAAA,GAiEO,KAAA,cAAc,IACG,KAAA,OAAmB,WAIhD,KAAQ,WAA8C;AAAA,EAAA;AAAA;AAAA,EAGtD,OAAyB;AACvB,gBAAK,QAAQ,UAAA,GACN,IAAI,QAAQ,CAACC,MAAY;AAC9B,WAAK,WAAWA;AAAA,IAClB,CAAC;AAAA,EACH;AAAA,EAEQ,OAAOC,GAAgB;;AAC7B,KAAAC,IAAA,KAAK,aAAL,QAAAA,EAAA,WAAgBD,IAChB,KAAK,WAAW,MAChB,KAAK,QAAQ,MAAA;AAAA,EACf;AAAA,EAEA,SAAS;AACP,WAAOE;AAAA;AAAA,4BAEiB,KAAK,KAAK;AAAA;AAAA,kBAEpB,KAAK,WAAW;AAAA;AAAA;AAAA,YAGtB,KAAK,SAAS,YACZA;AAAA,gDACkC,MAAM,KAAK,OAAO,EAAK,CAAC;AAAA,gDACxB,MAAM,KAAK,OAAO,EAAI,CAAC;AAAA,kBAEzDA,mCAAsC,MAAM,KAAK,OAAO,EAAI,CAAC,eAAe;AAAA;AAAA;AAAA;AAAA,EAIxF;AACF;AAxGaL,EACJ,SAASM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA+DIC,EAAA;AAAA,EAAnBC,EAAA;AAAS,GAhECR,EAgES,WAAA,SAAA,CAAA;AACRO,EAAA;AAAA,EAAXC,EAAA;AAAS,GAjECR,EAiEC,WAAA,eAAA,CAAA;AACiBO,EAAA;AAAA,EAA5BC,EAAS,EAAE,SAAS,GAAA,CAAM;AAAA,GAlEhBR,EAkEkB,WAAA,QAAA,CAAA;AAEJO,EAAA;AAAA,EAAxBE,EAAM,QAAQ;AAAA,GApEJT,EAoEc,WAAA,WAAA,CAAA;AApEdA,IAANO,EAAA;AAAA,EADNG,EAAc,aAAa;AAAA,GACfV,CAAA;AAiHb,eAAsBW,EAAWC,GAIZ;AACnB,QAAMC,IAAK,SAAS,cAAc,aAAa;AAC/C,EAAAA,EAAG,QAAQD,EAAQ,OACfA,EAAQ,gBAAgB,WAAWC,EAAG,cAAcD,EAAQ,cAC5DA,EAAQ,SAAS,WAAWC,EAAG,OAAOD,EAAQ,OAClD,SAAS,KAAK,YAAYC,CAAE,GAC5B,MAAMA,EAAG;AACT,QAAMC,IAAS,MAAMD,EAAG,KAAA;AACxB,SAAAA,EAAG,OAAA,GACIC;AACT;"}
@@ -0,0 +1,56 @@
1
+ import { LitElement } from 'lit';
2
+ /**
3
+ * A single transcript entry rendered as a chat bubble.
4
+ *
5
+ * The optional `meta` field carries rich content from the AI.
6
+ */
7
+ export interface TranscriptEntry {
8
+ id: string;
9
+ type: 'user' | 'agent' | 'system';
10
+ state: 'partial' | 'complete';
11
+ text: string;
12
+ meta?: TranscriptEntryMeta;
13
+ }
14
+ /** Rich content attached to a transcript entry. */
15
+ export interface TranscriptEntryMeta {
16
+ /** Clickable links. */
17
+ links?: {
18
+ label: string;
19
+ url: string;
20
+ }[];
21
+ /** Code snippet. */
22
+ code?: {
23
+ language?: string;
24
+ content: string;
25
+ };
26
+ /**
27
+ * Content that the agent pushed via a `display_content` user_event.
28
+ * Stored here so the download serializer can include the full payload.
29
+ */
30
+ displayContent?: {
31
+ title?: string;
32
+ content: string;
33
+ format: 'text' | 'markdown' | 'code' | 'html';
34
+ language?: string;
35
+ };
36
+ }
37
+ export declare class SwUiTranscriptView extends LitElement {
38
+ static styles: import("lit").CSSResult;
39
+ entries: TranscriptEntry[];
40
+ header: string;
41
+ emptyText: string;
42
+ private _codeCache;
43
+ private _lastEntryCount;
44
+ protected updated(changed: Map<string, unknown>): void;
45
+ private _highlightNewEntries;
46
+ private _downloadTranscript;
47
+ private _autoScroll;
48
+ private _renderCode;
49
+ render(): import("lit-html").TemplateResult<1>;
50
+ }
51
+ declare global {
52
+ interface HTMLElementTagNameMap {
53
+ 'sw-ui-transcript-view': SwUiTranscriptView;
54
+ }
55
+ }
56
+ //# sourceMappingURL=sw-ui-transcript-view.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sw-ui-transcript-view.d.ts","sourceRoot":"","sources":["../../../src/components/UI/sw-ui-transcript-view.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAsB,MAAM,KAAK,CAAC;AAMrD;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;IAClC,KAAK,EAAE,SAAS,GAAG,UAAU,CAAC;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,mBAAmB,CAAC;CAC5B;AAED,mDAAmD;AACnD,MAAM,WAAW,mBAAmB;IAClC,uBAAuB;IACvB,KAAK,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACzC,oBAAoB;IACpB,IAAI,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9C;;;OAGG;IACH,cAAc,CAAC,EAAE;QACf,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,MAAM,GAAG,MAAM,CAAC;QAC9C,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED,qBACa,kBAAmB,SAAQ,UAAU;IAChD,MAAM,CAAC,MAAM,0BAqOT;IAE4B,OAAO,EAAE,eAAe,EAAE,CAAM;IACpC,MAAM,SAAgB;IACG,SAAS,SAAM;IAG3D,OAAO,CAAC,UAAU,CAA6B;IAExD,OAAO,CAAC,eAAe,CAAK;IAE5B,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;YAWxC,oBAAoB;IAkBlC,OAAO,CAAC,mBAAmB;IAW3B,OAAO,CAAC,WAAW;IAOnB,OAAO,CAAC,WAAW;IAWnB,MAAM;CA4CP;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,uBAAuB,EAAE,kBAAkB,CAAC;KAC7C;CACF"}
@@ -0,0 +1,341 @@
1
+ import { LitElement as f, nothing as p, html as n, css as m } from "lit";
2
+ import { property as d, state as h, customElement as u } from "lit/decorators.js";
3
+ import { unsafeHTML as b } from "lit/directives/unsafe-html.js";
4
+ import { highlight as g } from "../../utils/prism.js";
5
+ import { transcriptToMarkdown as x } from "../../utils/transcriptToMarkdown.js";
6
+ var k = Object.defineProperty, v = Object.getOwnPropertyDescriptor, s = (e, t, o, r) => {
7
+ for (var a = r > 1 ? void 0 : r ? v(t, o) : t, l = e.length - 1, c; l >= 0; l--)
8
+ (c = e[l]) && (a = (r ? c(t, o, a) : c(a)) || a);
9
+ return r && a && k(t, o, a), a;
10
+ };
11
+ let i = class extends f {
12
+ constructor() {
13
+ super(...arguments), this.entries = [], this.header = "Transcript", this.emptyText = "", this._codeCache = /* @__PURE__ */ new Map(), this._lastEntryCount = 0;
14
+ }
15
+ updated(e) {
16
+ super.updated(e), this.entries.length !== this._lastEntryCount && (this._lastEntryCount = this.entries.length, this._autoScroll()), e.has("entries") && this._highlightNewEntries();
17
+ }
18
+ async _highlightNewEntries() {
19
+ const e = this.entries.filter((t) => {
20
+ var o;
21
+ return ((o = t.meta) == null ? void 0 : o.code) && !this._codeCache.has(t.id);
22
+ });
23
+ e.length !== 0 && (await Promise.all(
24
+ e.map(async (t) => {
25
+ const { content: o, language: r = "" } = t.meta.code, a = await g(o, r);
26
+ this._codeCache = new Map(this._codeCache).set(t.id, a);
27
+ })
28
+ ), await this.updateComplete, this._autoScroll());
29
+ }
30
+ _downloadTranscript() {
31
+ const e = x(this.entries), t = new Blob([e], { type: "text/markdown;charset=utf-8" }), o = URL.createObjectURL(t), r = document.createElement("a");
32
+ r.href = o, r.download = `transcript-${(/* @__PURE__ */ new Date()).toISOString().slice(0, 10)}.md`, r.click(), URL.revokeObjectURL(o);
33
+ }
34
+ _autoScroll() {
35
+ var o;
36
+ const e = (o = this.shadowRoot) == null ? void 0 : o.querySelector(".messages");
37
+ if (!e) return;
38
+ e.scrollHeight - e.scrollTop - e.clientHeight < 120 && e.scrollTo({ top: e.scrollHeight, behavior: "smooth" });
39
+ }
40
+ _renderCode(e) {
41
+ var r;
42
+ const t = (r = e.meta) == null ? void 0 : r.code;
43
+ if (!t) return p;
44
+ const o = this._codeCache.get(e.id);
45
+ return n`
46
+ <div class="meta-code" part="code">
47
+ <pre><code>${o ? b(o) : t.content}</code></pre>
48
+ </div>
49
+ `;
50
+ }
51
+ render() {
52
+ const e = this.entries.some((t) => t.state === "complete");
53
+ return n`
54
+ <div class="header" part="header">
55
+ <span>${this.header}</span>
56
+ <button
57
+ class="download-btn"
58
+ part="download-btn"
59
+ title="Download transcript as Markdown"
60
+ ?disabled=${!e}
61
+ @click=${this._downloadTranscript}
62
+ >
63
+ <sw-ui-icon name="download" size="15"></sw-ui-icon>
64
+ </button>
65
+ </div>
66
+
67
+ ${this.entries.length === 0 ? n`<div class="empty" part="empty">${this.emptyText}</div>` : n`
68
+ <div class="messages" part="messages">
69
+ ${this.entries.map(
70
+ (t) => {
71
+ var o, r;
72
+ return n`
73
+ <div
74
+ class="bubble ${t.type} ${t.state === "partial" ? "partial" : ""}"
75
+ part="bubble bubble-${t.type}"
76
+ >
77
+ ${t.text}
78
+ ${(r = (o = t.meta) == null ? void 0 : o.links) != null && r.length ? n`<div class="meta-links">
79
+ ${t.meta.links.map(
80
+ (a) => n`<a href=${a.url} target="_blank" rel="noopener">${a.label}</a>`
81
+ )}
82
+ </div>` : p}
83
+ ${this._renderCode(t)}
84
+ </div>
85
+ `;
86
+ }
87
+ )}
88
+ </div>
89
+ `}
90
+ `;
91
+ }
92
+ };
93
+ i.styles = m`
94
+ :host {
95
+ display: flex;
96
+ flex-direction: column;
97
+ height: 100%;
98
+ background: var(--bg-page);
99
+ color: var(--fg-default);
100
+ font-family: var(--type-family-body);
101
+ font-size: var(--type-size-small);
102
+ overflow: hidden;
103
+ }
104
+
105
+ .header {
106
+ flex: 0 0 auto;
107
+ display: flex;
108
+ align-items: center;
109
+ justify-content: space-between;
110
+ padding: 8px 10px 8px 14px;
111
+ font-size: 11px;
112
+ font-weight: 600;
113
+ letter-spacing: 0.08em;
114
+ text-transform: uppercase;
115
+ color: color-mix(in srgb, var(--fg-default) 40%, transparent);
116
+ border-bottom: 1px solid var(--border-default);
117
+ user-select: none;
118
+ }
119
+
120
+ .download-btn {
121
+ all: unset;
122
+ display: flex;
123
+ align-items: center;
124
+ justify-content: center;
125
+ width: 26px;
126
+ height: 26px;
127
+ border-radius: 5px;
128
+ cursor: pointer;
129
+ color: color-mix(in srgb, var(--fg-default) 50%, transparent);
130
+ transition:
131
+ background var(--transition-fast),
132
+ color var(--transition-fast);
133
+ }
134
+
135
+ .download-btn:hover {
136
+ background: var(--bg-surface-raised);
137
+ color: var(--fg-default);
138
+ }
139
+
140
+
141
+ .messages {
142
+ flex: 1;
143
+ overflow-y: auto;
144
+ overflow-x: hidden;
145
+ padding: 10px 12px 14px;
146
+ display: flex;
147
+ flex-direction: column;
148
+ gap: 8px;
149
+ scroll-behavior: smooth;
150
+ }
151
+
152
+ .messages::-webkit-scrollbar {
153
+ width: 4px;
154
+ }
155
+ .messages::-webkit-scrollbar-track {
156
+ background: transparent;
157
+ }
158
+ .messages::-webkit-scrollbar-thumb {
159
+ background: var(--bg-surface-raised);
160
+ border-radius: 2px;
161
+ }
162
+
163
+ .empty {
164
+ flex: 1;
165
+ display: flex;
166
+ align-items: center;
167
+ justify-content: center;
168
+ font-size: 13px;
169
+ color: rgba(255, 255, 255, 0.25);
170
+ padding: 20px;
171
+ text-align: center;
172
+ }
173
+
174
+ .bubble {
175
+ max-width: 85%;
176
+ padding: 8px 12px;
177
+ border-radius: 14px;
178
+ font-size: 0.8125rem;
179
+ line-height: 1.45;
180
+ word-break: break-word;
181
+ animation: pop-in 0.15s ease-out;
182
+ }
183
+
184
+ @keyframes pop-in {
185
+ from {
186
+ opacity: 0;
187
+ transform: scale(0.94) translateY(4px);
188
+ }
189
+ to {
190
+ opacity: 1;
191
+ transform: scale(1) translateY(0);
192
+ }
193
+ }
194
+
195
+ .user {
196
+ align-self: flex-end;
197
+ background: var(--interactive-button-primary-bg);
198
+ color: #fff;
199
+ border-bottom-right-radius: 4px;
200
+ }
201
+ .agent {
202
+ align-self: flex-start;
203
+ background: var(--bg-surface);
204
+ color: var(--fg-default);
205
+ border-bottom-left-radius: 4px;
206
+ }
207
+ .system {
208
+ align-self: center;
209
+ background: transparent;
210
+ border: 1px solid var(--border-default);
211
+ color: var(--fg-default);
212
+ font-size: 0.75rem;
213
+ max-width: 95%;
214
+ }
215
+
216
+ .partial {
217
+ opacity: 0.55;
218
+ }
219
+
220
+ /* ── Links ── */
221
+ .meta-links {
222
+ display: flex;
223
+ flex-wrap: wrap;
224
+ gap: 6px;
225
+ margin-top: 6px;
226
+ }
227
+
228
+ .meta-links a {
229
+ color: var(--interactive-button-primary-bg);
230
+ text-decoration: none;
231
+ font-size: 0.75rem;
232
+ padding: 2px 8px;
233
+ border: 1px solid var(--interactive-button-primary-bg);
234
+ border-radius: 4px;
235
+ transition: background var(--transition-fast);
236
+ }
237
+
238
+ .meta-links a:hover {
239
+ background: var(--interactive-button-primary-bg);
240
+ color: #fff;
241
+ }
242
+
243
+ /* ── Code block ── */
244
+ .meta-code {
245
+ margin-top: 8px;
246
+ border-radius: 6px;
247
+ overflow: hidden;
248
+ }
249
+
250
+ .meta-code pre {
251
+ margin: 0;
252
+ padding: 10px 12px;
253
+ background: #1a1b26;
254
+ overflow-x: auto;
255
+ font-size: 0.72rem;
256
+ line-height: 1.5;
257
+ }
258
+
259
+ .meta-code code {
260
+ font-family: ui-monospace, 'Cascadia Code', 'Source Code Pro', Menlo, Consolas, monospace;
261
+ color: #f8f8f2;
262
+ }
263
+
264
+ /* ── Prism Okaidia theme ── */
265
+ .token.comment,
266
+ .token.prolog,
267
+ .token.doctype,
268
+ .token.cdata {
269
+ color: #8292a2;
270
+ }
271
+ .token.punctuation {
272
+ color: #f8f8f2;
273
+ }
274
+ .token.namespace {
275
+ opacity: 0.7;
276
+ }
277
+ .token.property,
278
+ .token.tag,
279
+ .token.constant,
280
+ .token.symbol,
281
+ .token.deleted {
282
+ color: #f92672;
283
+ }
284
+ .token.boolean,
285
+ .token.number {
286
+ color: #ae81ff;
287
+ }
288
+ .token.selector,
289
+ .token.attr-name,
290
+ .token.string,
291
+ .token.char,
292
+ .token.builtin,
293
+ .token.inserted {
294
+ color: #a6e22e;
295
+ }
296
+ .token.operator,
297
+ .token.entity,
298
+ .token.url,
299
+ .token.variable {
300
+ color: #f8f8f2;
301
+ }
302
+ .token.atrule,
303
+ .token.attr-value,
304
+ .token.function,
305
+ .token.class-name {
306
+ color: #e6db74;
307
+ }
308
+ .token.keyword {
309
+ color: #66d9ef;
310
+ }
311
+ .token.regex,
312
+ .token.important {
313
+ color: #fd971f;
314
+ }
315
+ .token.important,
316
+ .token.bold {
317
+ font-weight: bold;
318
+ }
319
+ .token.italic {
320
+ font-style: italic;
321
+ }
322
+ `;
323
+ s([
324
+ d({ attribute: !1 })
325
+ ], i.prototype, "entries", 2);
326
+ s([
327
+ d({ type: String })
328
+ ], i.prototype, "header", 2);
329
+ s([
330
+ d({ type: String, attribute: "empty-text" })
331
+ ], i.prototype, "emptyText", 2);
332
+ s([
333
+ h()
334
+ ], i.prototype, "_codeCache", 2);
335
+ i = s([
336
+ u("sw-ui-transcript-view")
337
+ ], i);
338
+ export {
339
+ i as SwUiTranscriptView
340
+ };
341
+ //# sourceMappingURL=sw-ui-transcript-view.js.map