@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 @@
1
+ {"version":3,"file":"sw-ui-transcript-view.js","sources":["../../../src/components/UI/sw-ui-transcript-view.ts"],"sourcesContent":["import { LitElement, html, css, nothing } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { unsafeHTML } from 'lit/directives/unsafe-html.js';\nimport { highlight } from '../../utils/prism.js';\nimport { transcriptToMarkdown } from '../../utils/transcriptToMarkdown.js';\n\n/**\n * A single transcript entry rendered as a chat bubble.\n *\n * The optional `meta` field carries rich content from the AI.\n */\nexport interface TranscriptEntry {\n id: string;\n type: 'user' | 'agent' | 'system';\n state: 'partial' | 'complete';\n text: string;\n meta?: TranscriptEntryMeta;\n}\n\n/** Rich content attached to a transcript entry. */\nexport interface TranscriptEntryMeta {\n /** Clickable links. */\n links?: { label: string; url: string }[];\n /** Code snippet. */\n code?: { language?: string; content: string };\n /**\n * Content that the agent pushed via a `display_content` user_event.\n * Stored here so the download serializer can include the full payload.\n */\n displayContent?: {\n title?: string;\n content: string;\n format: 'text' | 'markdown' | 'code' | 'html';\n language?: string;\n };\n}\n\n@customElement('sw-ui-transcript-view')\nexport class SwUiTranscriptView extends LitElement {\n static styles = css`\n :host {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: var(--bg-page);\n color: var(--fg-default);\n font-family: var(--type-family-body);\n font-size: var(--type-size-small);\n overflow: hidden;\n }\n\n .header {\n flex: 0 0 auto;\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 8px 10px 8px 14px;\n font-size: 11px;\n font-weight: 600;\n letter-spacing: 0.08em;\n text-transform: uppercase;\n color: color-mix(in srgb, var(--fg-default) 40%, transparent);\n border-bottom: 1px solid var(--border-default);\n user-select: none;\n }\n\n .download-btn {\n all: unset;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 26px;\n height: 26px;\n border-radius: 5px;\n cursor: pointer;\n color: color-mix(in srgb, var(--fg-default) 50%, transparent);\n transition:\n background var(--transition-fast),\n color var(--transition-fast);\n }\n\n .download-btn:hover {\n background: var(--bg-surface-raised);\n color: var(--fg-default);\n }\n\n\n .messages {\n flex: 1;\n overflow-y: auto;\n overflow-x: hidden;\n padding: 10px 12px 14px;\n display: flex;\n flex-direction: column;\n gap: 8px;\n scroll-behavior: smooth;\n }\n\n .messages::-webkit-scrollbar {\n width: 4px;\n }\n .messages::-webkit-scrollbar-track {\n background: transparent;\n }\n .messages::-webkit-scrollbar-thumb {\n background: var(--bg-surface-raised);\n border-radius: 2px;\n }\n\n .empty {\n flex: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 13px;\n color: rgba(255, 255, 255, 0.25);\n padding: 20px;\n text-align: center;\n }\n\n .bubble {\n max-width: 85%;\n padding: 8px 12px;\n border-radius: 14px;\n font-size: 0.8125rem;\n line-height: 1.45;\n word-break: break-word;\n animation: pop-in 0.15s ease-out;\n }\n\n @keyframes pop-in {\n from {\n opacity: 0;\n transform: scale(0.94) translateY(4px);\n }\n to {\n opacity: 1;\n transform: scale(1) translateY(0);\n }\n }\n\n .user {\n align-self: flex-end;\n background: var(--interactive-button-primary-bg);\n color: #fff;\n border-bottom-right-radius: 4px;\n }\n .agent {\n align-self: flex-start;\n background: var(--bg-surface);\n color: var(--fg-default);\n border-bottom-left-radius: 4px;\n }\n .system {\n align-self: center;\n background: transparent;\n border: 1px solid var(--border-default);\n color: var(--fg-default);\n font-size: 0.75rem;\n max-width: 95%;\n }\n\n .partial {\n opacity: 0.55;\n }\n\n /* ── Links ── */\n .meta-links {\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n margin-top: 6px;\n }\n\n .meta-links a {\n color: var(--interactive-button-primary-bg);\n text-decoration: none;\n font-size: 0.75rem;\n padding: 2px 8px;\n border: 1px solid var(--interactive-button-primary-bg);\n border-radius: 4px;\n transition: background var(--transition-fast);\n }\n\n .meta-links a:hover {\n background: var(--interactive-button-primary-bg);\n color: #fff;\n }\n\n /* ── Code block ── */\n .meta-code {\n margin-top: 8px;\n border-radius: 6px;\n overflow: hidden;\n }\n\n .meta-code pre {\n margin: 0;\n padding: 10px 12px;\n background: #1a1b26;\n overflow-x: auto;\n font-size: 0.72rem;\n line-height: 1.5;\n }\n\n .meta-code code {\n font-family: ui-monospace, 'Cascadia Code', 'Source Code Pro', Menlo, Consolas, monospace;\n color: #f8f8f2;\n }\n\n /* ── Prism Okaidia theme ── */\n .token.comment,\n .token.prolog,\n .token.doctype,\n .token.cdata {\n color: #8292a2;\n }\n .token.punctuation {\n color: #f8f8f2;\n }\n .token.namespace {\n opacity: 0.7;\n }\n .token.property,\n .token.tag,\n .token.constant,\n .token.symbol,\n .token.deleted {\n color: #f92672;\n }\n .token.boolean,\n .token.number {\n color: #ae81ff;\n }\n .token.selector,\n .token.attr-name,\n .token.string,\n .token.char,\n .token.builtin,\n .token.inserted {\n color: #a6e22e;\n }\n .token.operator,\n .token.entity,\n .token.url,\n .token.variable {\n color: #f8f8f2;\n }\n .token.atrule,\n .token.attr-value,\n .token.function,\n .token.class-name {\n color: #e6db74;\n }\n .token.keyword {\n color: #66d9ef;\n }\n .token.regex,\n .token.important {\n color: #fd971f;\n }\n .token.important,\n .token.bold {\n font-weight: bold;\n }\n .token.italic {\n font-style: italic;\n }\n `;\n\n @property({ attribute: false }) entries: TranscriptEntry[] = [];\n @property({ type: String }) header = 'Transcript';\n @property({ type: String, attribute: 'empty-text' }) emptyText = '';\n\n // entry.id → highlighted HTML (populated asynchronously)\n @state() private _codeCache = new Map<string, string>();\n\n private _lastEntryCount = 0;\n\n protected updated(changed: Map<string, unknown>): void {\n super.updated(changed);\n if (this.entries.length !== this._lastEntryCount) {\n this._lastEntryCount = this.entries.length;\n this._autoScroll();\n }\n if (changed.has('entries')) {\n void this._highlightNewEntries();\n }\n }\n\n private async _highlightNewEntries(): Promise<void> {\n const toHighlight = this.entries.filter((e) => e.meta?.code && !this._codeCache.has(e.id));\n if (toHighlight.length === 0) return;\n\n await Promise.all(\n toHighlight.map(async (e) => {\n const { content, language = '' } = e.meta!.code!;\n const html = await highlight(content, language);\n this._codeCache = new Map(this._codeCache).set(e.id, html);\n })\n );\n\n // The highlighted re-render extends the scroll height — scroll again\n // now that the final DOM height is known.\n await this.updateComplete;\n this._autoScroll();\n }\n\n private _downloadTranscript(): void {\n const md = transcriptToMarkdown(this.entries);\n const blob = new Blob([md], { type: 'text/markdown;charset=utf-8' });\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = `transcript-${new Date().toISOString().slice(0, 10)}.md`;\n a.click();\n URL.revokeObjectURL(url);\n }\n\n private _autoScroll(): void {\n const el = this.shadowRoot?.querySelector('.messages');\n if (!el) return;\n const nearBottom = el.scrollHeight - el.scrollTop - el.clientHeight < 120;\n if (nearBottom) el.scrollTo({ top: el.scrollHeight, behavior: 'smooth' });\n }\n\n private _renderCode(entry: TranscriptEntry) {\n const code = entry.meta?.code;\n if (!code) return nothing;\n const cached = this._codeCache.get(entry.id);\n return html`\n <div class=\"meta-code\" part=\"code\">\n <pre><code>${cached ? unsafeHTML(cached) : code.content}</code></pre>\n </div>\n `;\n }\n\n render() {\n const hasEntries = this.entries.some((e) => e.state === 'complete');\n\n return html`\n <div class=\"header\" part=\"header\">\n <span>${this.header}</span>\n <button\n class=\"download-btn\"\n part=\"download-btn\"\n title=\"Download transcript as Markdown\"\n ?disabled=${!hasEntries}\n @click=${this._downloadTranscript}\n >\n <sw-ui-icon name=\"download\" size=\"15\"></sw-ui-icon>\n </button>\n </div>\n\n ${this.entries.length === 0\n ? html`<div class=\"empty\" part=\"empty\">${this.emptyText}</div>`\n : html`\n <div class=\"messages\" part=\"messages\">\n ${this.entries.map(\n (e) => html`\n <div\n class=\"bubble ${e.type} ${e.state === 'partial' ? 'partial' : ''}\"\n part=\"bubble bubble-${e.type}\"\n >\n ${e.text}\n ${e.meta?.links?.length\n ? html`<div class=\"meta-links\">\n ${e.meta.links.map(\n (l) =>\n html`<a href=${l.url} target=\"_blank\" rel=\"noopener\">${l.label}</a>`\n )}\n </div>`\n : nothing}\n ${this._renderCode(e)}\n </div>\n `\n )}\n </div>\n `}\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'sw-ui-transcript-view': SwUiTranscriptView;\n }\n}\n"],"names":["SwUiTranscriptView","LitElement","changed","toHighlight","e","_a","content","language","html","highlight","md","transcriptToMarkdown","blob","url","a","el","entry","code","nothing","cached","unsafeHTML","hasEntries","_b","l","css","__decorateClass","property","state","customElement"],"mappings":"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"}
@@ -12,27 +12,19 @@
12
12
  * @fires sw-address-select - Fired when an address is selected. Detail: `{ address: Address }`
13
13
  * @fires sw-dial - Fired when the call button on an address is clicked. Detail: `{ address: Address, channel: string }`
14
14
  *
15
- * @cssprop [--sw-color-primary=#044cf6] - Primary brand color
16
- * @cssprop [--sw-color-primary-hover=#0339c4] - Primary color on hover
17
- * @cssprop [--sw-color-success=#10b981] - Success/positive color
18
- * @cssprop [--sw-color-text=#1f2937] - Primary text color
19
- * @cssprop [--sw-color-text-muted=#6b7280] - Secondary/muted text color
20
- * @cssprop [--sw-color-background=#ffffff] - Component background color
21
- * @cssprop [--sw-color-background-hover=#f3f4f6] - Background color on hover
22
- * @cssprop [--sw-color-background-active=#e5e7eb] - Background color on active/press
23
- * @cssprop [--sw-color-border=#e5e7eb] - Border color
24
- * @cssprop [--sw-font-family=-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif] - Font family
25
- * @cssprop [--sw-font-size-sm=12px] - Small font size
26
- * @cssprop [--sw-font-size-base=14px] - Base font size
27
- * @cssprop [--sw-font-size-lg=16px] - Large font size
28
- * @cssprop [--sw-space-1=4px] - Smallest spacing unit
29
- * @cssprop [--sw-space-2=8px] - Small spacing unit
30
- * @cssprop [--sw-space-3=12px] - Medium spacing unit
31
- * @cssprop [--sw-space-4=16px] - Large spacing unit
32
- * @cssprop [--sw-border-radius=8px] - Border radius for containers and inputs
15
+ * @cssprop [--interactive-button-primary-bg=#044ef4] - Primary brand color
16
+ * @cssprop [--interactive-button-primary-hover=#0342cf] - Primary color on hover
17
+ * @cssprop [--interactive-status-success=#22c55e] - Success/positive color
18
+ * @cssprop [--fg-default=#f0f0f4] - Primary text color
19
+ * @cssprop [--fg-muted=#a0a0aa] - Secondary/muted text color
20
+ * @cssprop [--bg-surface=#181a28] - Component background color
21
+ * @cssprop [--bg-surface-raised=#222436] - Background color on hover
22
+ * @cssprop [--interactive-dropdown-hover=#333338] - Background color on active/press
23
+ * @cssprop [--border-default=rgba(255,255,255,0.12)] - Border color
33
24
  */
34
25
  import { LitElement } from 'lit';
35
26
  import type { Observable } from 'rxjs';
27
+ import './UI/icons/sw-ui-icon.js';
36
28
  /**
37
29
  * Address type from SDK
38
30
  */
@@ -1 +1 @@
1
- {"version":3,"file":"directory.d.ts","sourceRoot":"","sources":["../../src/components/directory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH,OAAO,EAAE,UAAU,EAAa,MAAM,KAAK,CAAC;AAG5C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAEvC;;GAEG;AACH,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC;IACzB,QAAQ,CAAC,EAAE;QACT,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,SAAS,CAAC,EAAE,OAAO,CAAC;KACrB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC;IAClC,QAAQ,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC;IAC/B,QAAQ,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC;IAC/B,QAAQ,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5B;AAED,qBACa,kBAAmB,SAAQ,UAAU;IAChD,MAAM,CAAC,MAAM,0BAuPX;IAEF;;OAEG;IAEH,SAAS,EAAE,gBAAgB,GAAG,IAAI,CAAQ;IAE1C;;OAEG;IAEH,OAAO,CAAC,eAAe,CAAwB;IAE/C;;OAEG;IAEH,OAAO,CAAC,WAAW,CAAc;IAEjC;;OAEG;IAEH,OAAO,CAAC,SAAS,CAAiB;IAElC;;OAEG;IAEH,OAAO,CAAC,OAAO,CAAkB;IAEjC;;OAEG;IAEH,OAAO,CAAC,OAAO,CAAkB;IAEjC;;OAEG;IACH,OAAO,CAAC,aAAa,CAAsB;IAE3C;;OAEG;IACH,OAAO,CAAC,mBAAmB,CAAuB;IAElD;;OAEG;IACH,OAAO,CAAC,oBAAoB,CAAqC;IAEjE;;OAEG;IAEH,OAAO,CAAC,sBAAsB,CAAkB;IAEhD,iBAAiB;IAKjB,oBAAoB;IAKpB,OAAO,CAAC,oBAAoB;IAiC5B,OAAO,CAAC,OAAO;IAYf,SAAS,CAAC,YAAY;IAItB,OAAO,CAAC,mBAAmB;IAqB3B,SAAS,CAAC,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC;YAyB3C,sBAAsB;IAiBpC,OAAO,KAAK,iBAAiB,GAU5B;IAED,OAAO,CAAC,iBAAiB;IAazB,OAAO,CAAC,eAAe;IAYvB,OAAO,CAAC,qBAAqB;IAI7B,OAAO,CAAC,UAAU;YAUJ,cAAc;IAM5B,OAAO,CAAC,iBAAiB;IAmBzB,OAAO,CAAC,kBAAkB;IA8B1B,OAAO,CAAC,sBAAsB;IAS9B,MAAM;CA+EP;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,cAAc,EAAE,kBAAkB,CAAC;KACpC;CACF"}
1
+ {"version":3,"file":"directory.d.ts","sourceRoot":"","sources":["../../src/components/directory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,EAAE,UAAU,EAAa,MAAM,KAAK,CAAC;AAG5C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AACvC,OAAO,0BAA0B,CAAC;AAElC;;GAEG;AACH,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC;IACzB,QAAQ,CAAC,EAAE;QACT,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,SAAS,CAAC,EAAE,OAAO,CAAC;KACrB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC;IAClC,QAAQ,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC;IAC/B,QAAQ,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC;IAC/B,QAAQ,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5B;AAED,qBACa,kBAAmB,SAAQ,UAAU;IAChD,MAAM,CAAC,MAAM,0BA+MX;IAEF;;OAEG;IAEH,SAAS,EAAE,gBAAgB,GAAG,IAAI,CAAQ;IAE1C;;OAEG;IAEH,OAAO,CAAC,eAAe,CAAwB;IAE/C;;OAEG;IAEH,OAAO,CAAC,WAAW,CAAc;IAEjC;;OAEG;IAEH,OAAO,CAAC,SAAS,CAAiB;IAElC;;OAEG;IAEH,OAAO,CAAC,OAAO,CAAkB;IAEjC;;OAEG;IAEH,OAAO,CAAC,OAAO,CAAkB;IAEjC;;OAEG;IACH,OAAO,CAAC,aAAa,CAAsB;IAE3C;;OAEG;IACH,OAAO,CAAC,mBAAmB,CAAuB;IAElD;;OAEG;IACH,OAAO,CAAC,oBAAoB,CAAqC;IAEjE;;OAEG;IAEH,OAAO,CAAC,sBAAsB,CAAkB;IAEhD,iBAAiB;IAKjB,oBAAoB;IAKpB,OAAO,CAAC,oBAAoB;IAiC5B,OAAO,CAAC,OAAO;IAYf,SAAS,CAAC,YAAY;IAItB,OAAO,CAAC,mBAAmB;IAqB3B,SAAS,CAAC,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC;YAyB3C,sBAAsB;IAiBpC,OAAO,KAAK,iBAAiB,GAU5B;IAED,OAAO,CAAC,iBAAiB;IAazB,OAAO,CAAC,eAAe;IAYvB,OAAO,CAAC,qBAAqB;IAI7B,OAAO,CAAC,UAAU;YAUJ,cAAc;IAM5B,OAAO,CAAC,iBAAiB;IAKzB,OAAO,CAAC,kBAAkB;IAoB1B,OAAO,CAAC,sBAAsB;IAS9B,MAAM;CAuEP;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,cAAc,EAAE,kBAAkB,CAAC;KACpC;CACF"}
@@ -1,11 +1,11 @@
1
- import { LitElement as p, html as i, css as u } from "lit";
2
- import { property as v, state as d, customElement as w } from "lit/decorators.js";
3
- var b = Object.defineProperty, m = Object.getOwnPropertyDescriptor, c = (e, s, a, r) => {
4
- for (var t = r > 1 ? void 0 : r ? m(s, a) : s, n = e.length - 1, l; n >= 0; n--)
5
- (l = e[n]) && (t = (r ? l(s, a, t) : l(t)) || t);
6
- return r && t && b(s, a, t), t;
1
+ import { LitElement as u, html as a, css as p } from "lit";
2
+ import { property as m, state as l, customElement as b } from "lit/decorators.js";
3
+ var v = Object.defineProperty, f = Object.getOwnPropertyDescriptor, n = (e, i, o, t) => {
4
+ for (var s = t > 1 ? void 0 : t ? f(i, o) : i, c = e.length - 1, d; c >= 0; c--)
5
+ (d = e[c]) && (s = (t ? d(i, o, s) : d(s)) || s);
6
+ return t && s && v(i, o, s), s;
7
7
  };
8
- let o = class extends p {
8
+ let r = class extends u {
9
9
  constructor() {
10
10
  super(...arguments), this.directory = null, this.selectedAddress = null, this.searchQuery = "", this.addresses = [], this.loading = !1, this.hasMore = !1, this.subscriptions = [], this.searchDebounceTimer = null, this.intersectionObserver = null, this.isAutoLoadingForSearch = !1;
11
11
  }
@@ -18,20 +18,20 @@ let o = class extends p {
18
18
  subscribeToDirectory() {
19
19
  if (this.directory) {
20
20
  if (this.directory.addresses$) {
21
- const e = this.directory.addresses$.subscribe((s) => {
22
- this.addresses = s;
21
+ const e = this.directory.addresses$.subscribe((i) => {
22
+ this.addresses = i;
23
23
  });
24
24
  this.subscriptions.push(e);
25
25
  }
26
26
  if (this.directory.loading$) {
27
- const e = this.directory.loading$.subscribe((s) => {
28
- this.loading = s;
27
+ const e = this.directory.loading$.subscribe((i) => {
28
+ this.loading = i;
29
29
  });
30
30
  this.subscriptions.push(e);
31
31
  }
32
32
  if (this.directory.hasMore$) {
33
- const e = this.directory.hasMore$.subscribe((s) => {
34
- this.hasMore = s;
33
+ const e = this.directory.hasMore$.subscribe((i) => {
34
+ this.hasMore = i;
35
35
  });
36
36
  this.subscriptions.push(e);
37
37
  }
@@ -45,15 +45,15 @@ let o = class extends p {
45
45
  this.setupInfiniteScroll();
46
46
  }
47
47
  setupInfiniteScroll() {
48
- var s, a;
49
- const e = (s = this.shadowRoot) == null ? void 0 : s.querySelector(".scroll-sentinel");
48
+ var i, o;
49
+ const e = (i = this.shadowRoot) == null ? void 0 : i.querySelector(".scroll-sentinel");
50
50
  e && (this.intersectionObserver = new IntersectionObserver(
51
- (r) => {
52
- const t = r[0];
53
- t != null && t.isIntersecting && this.hasMore && !this.loading && this.handleLoadMore();
51
+ (t) => {
52
+ const s = t[0];
53
+ s != null && s.isIntersecting && this.hasMore && !this.loading && this.handleLoadMore();
54
54
  },
55
55
  {
56
- root: (a = this.shadowRoot) == null ? void 0 : a.querySelector(".list"),
56
+ root: (o = this.shadowRoot) == null ? void 0 : o.querySelector(".list"),
57
57
  rootMargin: "100px",
58
58
  threshold: 0
59
59
  }
@@ -70,13 +70,13 @@ let o = class extends p {
70
70
  return this.addresses;
71
71
  const e = this.searchQuery.toLowerCase();
72
72
  return this.addresses.filter(
73
- (s) => s.name.toLowerCase().includes(e) || s.displayName && s.displayName.toLowerCase().includes(e)
73
+ (i) => i.name.toLowerCase().includes(e) || i.displayName && i.displayName.toLowerCase().includes(e)
74
74
  );
75
75
  }
76
76
  handleSearchInput(e) {
77
- const s = e.target;
77
+ const i = e.target;
78
78
  this.searchDebounceTimer && clearTimeout(this.searchDebounceTimer), this.searchDebounceTimer = window.setTimeout(() => {
79
- this.searchQuery = s.value;
79
+ this.searchQuery = i.value;
80
80
  }, 200);
81
81
  }
82
82
  handleItemClick(e) {
@@ -105,51 +105,30 @@ let o = class extends p {
105
105
  (e = this.directory) != null && e.loadMore && await this.directory.loadMore();
106
106
  }
107
107
  renderAddressIcon(e) {
108
- return e.type === "room" ? i`
109
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor">
110
- <path
111
- d="M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-7 3c1.93 0 3.5 1.57 3.5 3.5S13.93 13 12 13s-3.5-1.57-3.5-3.5S10.07 6 12 6zm7 13H5v-.23c0-.62.28-1.2.76-1.58C7.47 15.82 9.64 15 12 15s4.53.82 6.24 2.19c.48.38.76.97.76 1.58V19z"
112
- />
113
- </svg>
114
- ` : i`
115
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor">
116
- <path
117
- d="M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z"
118
- />
119
- </svg>
120
- `;
108
+ const i = e.type === "room" ? "room" : "person";
109
+ return a`<sw-ui-icon name=${i} size="20"></sw-ui-icon>`;
121
110
  }
122
111
  renderChannelIcons(e) {
123
- const s = e.channels || {};
124
- return i`
112
+ const i = e.channels || {};
113
+ return a`
125
114
  <div class="item-channels">
126
- <svg
127
- xmlns="http://www.w3.org/2000/svg"
128
- viewBox="0 0 24 24"
129
- fill="currentColor"
130
- class="${s.audio ? "active" : ""}"
115
+ <sw-ui-icon
116
+ name="mic-on"
117
+ size="16"
118
+ class="${i.audio ? "active" : ""}"
131
119
  title="Audio"
132
- >
133
- <path
134
- d="M12 14c1.66 0 2.99-1.34 2.99-3L15 5c0-1.66-1.34-3-3-3S9 3.34 9 5v6c0 1.66 1.34 3 3 3z"
135
- />
136
- </svg>
137
- <svg
138
- xmlns="http://www.w3.org/2000/svg"
139
- viewBox="0 0 24 24"
140
- fill="currentColor"
141
- class="${s.video ? "active" : ""}"
120
+ ></sw-ui-icon>
121
+ <sw-ui-icon
122
+ name="camera-on"
123
+ size="16"
124
+ class="${i.video ? "active" : ""}"
142
125
  title="Video"
143
- >
144
- <path
145
- d="M17 10.5V7c0-.55-.45-1-1-1H4c-.55 0-1 .45-1 1v10c0 .55.45 1 1 1h12c.55 0 1-.45 1-1v-3.5l4 4v-11l-4 4z"
146
- />
147
- </svg>
126
+ ></sw-ui-icon>
148
127
  </div>
149
128
  `;
150
129
  }
151
130
  renderLoadingIndicator() {
152
- return i`
131
+ return a`
153
132
  <div class="scroll-loading">
154
133
  <div class="spinner"></div>
155
134
  <span>${this.isAutoLoadingForSearch ? "Searching..." : "Loading more..."}</span>
@@ -157,8 +136,8 @@ let o = class extends p {
157
136
  `;
158
137
  }
159
138
  render() {
160
- const e = this.loading && this.addresses.length === 0, s = !this.loading && this.filteredAddresses.length === 0 && !this.hasMore, a = this.isAutoLoadingForSearch && this.filteredAddresses.length === 0;
161
- return i`
139
+ const e = this.loading && this.addresses.length === 0, i = !this.loading && this.filteredAddresses.length === 0 && !this.hasMore, o = this.isAutoLoadingForSearch && this.filteredAddresses.length === 0;
140
+ return a`
162
141
  <div class="container" part="container">
163
142
  <div class="search" part="search">
164
143
  <input
@@ -171,45 +150,37 @@ let o = class extends p {
171
150
  </div>
172
151
 
173
152
  <div class="list" part="list" role="listbox">
174
- ${e ? i`<div class="loading">Loading...</div>` : a ? this.renderLoadingIndicator() : s ? i`<div class="empty">No addresses found</div>` : i`
153
+ ${e ? a`<div class="loading">Loading...</div>` : o ? this.renderLoadingIndicator() : i ? a`<div class="empty">No addresses found</div>` : a`
175
154
  ${this.filteredAddresses.map(
176
- (r) => {
177
- var t, n, l;
178
- return i`
155
+ (t) => {
156
+ var s, c, d;
157
+ return a`
179
158
  <div
180
- class="item ${((t = this.selectedAddress) == null ? void 0 : t.id) === r.id ? "selected" : ""}"
181
- part="item ${((n = this.selectedAddress) == null ? void 0 : n.id) === r.id ? "item-selected" : ""}"
159
+ class="item ${((s = this.selectedAddress) == null ? void 0 : s.id) === t.id ? "selected" : ""}"
160
+ part="item ${((c = this.selectedAddress) == null ? void 0 : c.id) === t.id ? "item-selected" : ""}"
182
161
  role="option"
183
- aria-selected="${((l = this.selectedAddress) == null ? void 0 : l.id) === r.id}"
184
- @click=${() => this.handleItemClick(r)}
185
- @dblclick=${() => this.handleItemDoubleClick(r)}
162
+ aria-selected="${((d = this.selectedAddress) == null ? void 0 : d.id) === t.id}"
163
+ @click=${() => this.handleItemClick(t)}
164
+ @dblclick=${() => this.handleItemDoubleClick(t)}
186
165
  >
187
- <div class="item-icon">${this.renderAddressIcon(r)}</div>
166
+ <div class="item-icon">${this.renderAddressIcon(t)}</div>
188
167
  <div class="item-content">
189
168
  <div class="item-name" part="item-name">
190
- ${r.displayName || r.name}
169
+ ${t.displayName || t.name}
191
170
  </div>
192
171
  <div class="item-type" part="item-type">
193
- ${r.type || "address"}
172
+ ${t.type || "address"}
194
173
  </div>
195
174
  </div>
196
- ${this.renderChannelIcons(r)}
175
+ ${this.renderChannelIcons(t)}
197
176
  <button
198
177
  class="dial-button"
199
178
  @click=${(h) => {
200
- h.stopPropagation(), this.handleDial(r);
179
+ h.stopPropagation(), this.handleDial(t);
201
180
  }}
202
- aria-label="Call ${r.displayName || r.name}"
181
+ aria-label="Call ${t.displayName || t.name}"
203
182
  >
204
- <svg
205
- xmlns="http://www.w3.org/2000/svg"
206
- viewBox="0 0 24 24"
207
- fill="currentColor"
208
- >
209
- <path
210
- d="M6.62 10.79c1.44 2.83 3.76 5.15 6.59 6.59l2.2-2.2c.27-.27.67-.36 1.02-.24 1.12.37 2.33.57 3.57.57.55 0 1 .45 1 1V20c0 .55-.45 1-1 1-9.39 0-17-7.61-17-17 0-.55.45-1 1-1h3.5c.55 0 1 .45 1 1 0 1.25.2 2.45.57 3.57.11.35.03.74-.25 1.02l-2.2 2.2z"
211
- />
212
- </svg>
183
+ <sw-ui-icon name="phone-call" size="18"></sw-ui-icon>
213
184
  </button>
214
185
  </div>
215
186
  `;
@@ -225,89 +196,49 @@ let o = class extends p {
225
196
  `;
226
197
  }
227
198
  };
228
- o.styles = u`
199
+ r.styles = p`
229
200
  :host {
230
- /* CSS Custom Properties for theming */
231
- --sw-color-primary: #044cf6;
232
- --sw-color-primary-hover: #0339c4;
233
- --sw-color-success: #10b981;
234
- --sw-color-text: #1f2937;
235
- --sw-color-text-muted: #6b7280;
236
- --sw-color-background: #ffffff;
237
- --sw-color-background-hover: #f3f4f6;
238
- --sw-color-background-active: #e5e7eb;
239
- --sw-color-border: #e5e7eb;
240
- --sw-font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
241
- --sw-font-size-sm: 12px;
242
- --sw-font-size-base: 14px;
243
- --sw-font-size-lg: 16px;
244
- --sw-space-1: 4px;
245
- --sw-space-2: 8px;
246
- --sw-space-3: 12px;
247
- --sw-space-4: 16px;
248
- --sw-border-radius: 8px;
249
-
250
201
  display: block;
251
- font-family: var(--sw-font-family);
252
- }
253
-
254
- /* Dark mode support */
255
- :host([data-theme='dark']) {
256
- --sw-color-text: #f9fafb;
257
- --sw-color-text-muted: #9ca3af;
258
- --sw-color-background: #1f2937;
259
- --sw-color-background-hover: #374151;
260
- --sw-color-background-active: #4b5563;
261
- --sw-color-border: #374151;
262
- }
263
-
264
- @media (prefers-color-scheme: dark) {
265
- :host(:not([data-theme='light'])) {
266
- --sw-color-text: #f9fafb;
267
- --sw-color-text-muted: #9ca3af;
268
- --sw-color-background: #1f2937;
269
- --sw-color-background-hover: #374151;
270
- --sw-color-background-active: #4b5563;
271
- --sw-color-border: #374151;
272
- }
202
+ font-family: var(--type-family-body);
203
+ color: var(--fg-default);
273
204
  }
274
205
 
275
206
  .container {
276
207
  display: flex;
277
208
  flex-direction: column;
278
- background: var(--sw-color-background);
279
- border: 1px solid var(--sw-color-border);
280
- border-radius: var(--sw-border-radius);
209
+ background: var(--bg-surface);
210
+ border: 1px solid var(--border-default);
211
+ border-radius: var(--radius-md);
281
212
  overflow: hidden;
282
213
  }
283
214
 
284
215
  .search {
285
216
  display: flex;
286
217
  align-items: center;
287
- gap: var(--sw-space-2);
288
- padding: var(--sw-space-3);
289
- border-bottom: 1px solid var(--sw-color-border);
218
+ gap: var(--sp-2);
219
+ padding: var(--sp-3);
220
+ border-bottom: 1px solid var(--border-default);
290
221
  }
291
222
 
292
223
  .search-input {
293
224
  flex: 1;
294
- padding: var(--sw-space-2) var(--sw-space-3);
295
- border: 1px solid var(--sw-color-border);
296
- border-radius: var(--sw-border-radius);
297
- background: var(--sw-color-background);
298
- color: var(--sw-color-text);
299
- font-family: var(--sw-font-family);
300
- font-size: var(--sw-font-size-base);
225
+ padding: var(--sp-2) var(--sp-3);
226
+ border: 1px solid var(--border-default);
227
+ border-radius: var(--radius-md);
228
+ background: var(--bg-surface);
229
+ color: var(--fg-default);
230
+ font-family: var(--type-family-body);
231
+ font-size: var(--type-size-small);
301
232
  outline: none;
302
233
  transition: border-color 0.15s ease;
303
234
  }
304
235
 
305
236
  .search-input:focus {
306
- border-color: var(--sw-color-primary);
237
+ border-color: var(--interactive-button-primary-bg);
307
238
  }
308
239
 
309
240
  .search-input::placeholder {
310
- color: var(--sw-color-text-muted);
241
+ color: var(--fg-muted);
311
242
  }
312
243
 
313
244
  .list {
@@ -320,9 +251,9 @@ o.styles = u`
320
251
  .item {
321
252
  display: flex;
322
253
  align-items: center;
323
- gap: var(--sw-space-3);
324
- padding: var(--sw-space-3) var(--sw-space-4);
325
- border-bottom: 1px solid var(--sw-color-border);
254
+ gap: var(--sp-3);
255
+ padding: var(--sp-3) var(--sp-4);
256
+ border-bottom: 1px solid var(--border-default);
326
257
  cursor: pointer;
327
258
  transition: background-color 0.15s ease;
328
259
  }
@@ -332,15 +263,15 @@ o.styles = u`
332
263
  }
333
264
 
334
265
  .item:hover {
335
- background: var(--sw-color-background-hover);
266
+ background: var(--bg-surface-raised);
336
267
  }
337
268
 
338
269
  .item:active {
339
- background: var(--sw-color-background-active);
270
+ background: var(--interactive-dropdown-hover);
340
271
  }
341
272
 
342
273
  .item.selected {
343
- background: var(--sw-color-primary);
274
+ background: var(--interactive-button-primary-bg);
344
275
  color: white;
345
276
  }
346
277
 
@@ -356,8 +287,8 @@ o.styles = u`
356
287
  width: 40px;
357
288
  height: 40px;
358
289
  border-radius: 50%;
359
- background: var(--sw-color-background-hover);
360
- color: var(--sw-color-text-muted);
290
+ background: var(--bg-surface-raised);
291
+ color: var(--fg-muted);
361
292
  flex-shrink: 0;
362
293
  }
363
294
 
@@ -366,7 +297,8 @@ o.styles = u`
366
297
  color: white;
367
298
  }
368
299
 
369
- .item-icon svg {
300
+ .item-icon svg,
301
+ .item-icon sw-ui-icon {
370
302
  width: 20px;
371
303
  height: 20px;
372
304
  }
@@ -377,7 +309,7 @@ o.styles = u`
377
309
  }
378
310
 
379
311
  .item-name {
380
- font-size: var(--sw-font-size-base);
312
+ font-size: var(--type-size-small);
381
313
  font-weight: 500;
382
314
  color: inherit;
383
315
  white-space: nowrap;
@@ -386,24 +318,24 @@ o.styles = u`
386
318
  }
387
319
 
388
320
  .item-type {
389
- font-size: var(--sw-font-size-sm);
390
- color: var(--sw-color-text-muted);
321
+ font-size: var(--type-size-caption);
322
+ color: var(--fg-muted);
391
323
  text-transform: capitalize;
392
324
  }
393
325
 
394
326
  .item-channels {
395
327
  display: flex;
396
- gap: var(--sw-space-1);
397
- color: var(--sw-color-text-muted);
328
+ gap: var(--sp-1);
329
+ color: var(--fg-muted);
398
330
  }
399
331
 
400
- .item-channels svg {
332
+ .item-channels sw-ui-icon {
401
333
  width: 16px;
402
334
  height: 16px;
403
335
  }
404
336
 
405
- .item-channels .active {
406
- color: var(--sw-color-success);
337
+ .item-channels sw-ui-icon.active {
338
+ color: var(--interactive-status-success);
407
339
  }
408
340
 
409
341
  .loading,
@@ -411,16 +343,16 @@ o.styles = u`
411
343
  display: flex;
412
344
  align-items: center;
413
345
  justify-content: center;
414
- padding: var(--sw-space-4);
415
- color: var(--sw-color-text-muted);
416
- font-size: var(--sw-font-size-base);
346
+ padding: var(--sp-4);
347
+ color: var(--fg-muted);
348
+ font-size: var(--type-size-small);
417
349
  }
418
350
 
419
351
  .scroll-sentinel {
420
352
  display: flex;
421
353
  align-items: center;
422
354
  justify-content: center;
423
- padding: var(--sw-space-3);
355
+ padding: var(--sp-3);
424
356
  min-height: 1px;
425
357
  }
426
358
 
@@ -428,17 +360,17 @@ o.styles = u`
428
360
  display: flex;
429
361
  align-items: center;
430
362
  justify-content: center;
431
- gap: var(--sw-space-2);
432
- padding: var(--sw-space-3);
433
- color: var(--sw-color-text-muted);
434
- font-size: var(--sw-font-size-sm);
363
+ gap: var(--sp-2);
364
+ padding: var(--sp-3);
365
+ color: var(--fg-muted);
366
+ font-size: var(--type-size-caption);
435
367
  }
436
368
 
437
369
  .spinner {
438
370
  width: 16px;
439
371
  height: 16px;
440
- border: 2px solid var(--sw-color-border);
441
- border-top-color: var(--sw-color-primary);
372
+ border: 2px solid var(--border-default);
373
+ border-top-color: var(--interactive-button-primary-bg);
442
374
  border-radius: 50%;
443
375
  animation: spin 0.8s linear infinite;
444
376
  }
@@ -455,7 +387,7 @@ o.styles = u`
455
387
  justify-content: center;
456
388
  width: 36px;
457
389
  height: 36px;
458
- background: var(--sw-color-success);
390
+ background: var(--interactive-status-success);
459
391
  border: none;
460
392
  border-radius: 50%;
461
393
  color: white;
@@ -468,36 +400,35 @@ o.styles = u`
468
400
  background: #0ea472;
469
401
  }
470
402
 
471
- .dial-button svg {
472
- width: 18px;
473
- height: 18px;
403
+ .dial-button sw-ui-icon {
404
+ pointer-events: none;
474
405
  }
475
406
  `;
476
- c([
477
- v({ type: Object })
478
- ], o.prototype, "directory", 2);
479
- c([
480
- d()
481
- ], o.prototype, "selectedAddress", 2);
482
- c([
483
- d()
484
- ], o.prototype, "searchQuery", 2);
485
- c([
486
- d()
487
- ], o.prototype, "addresses", 2);
488
- c([
489
- d()
490
- ], o.prototype, "loading", 2);
491
- c([
492
- d()
493
- ], o.prototype, "hasMore", 2);
494
- c([
495
- d()
496
- ], o.prototype, "isAutoLoadingForSearch", 2);
497
- o = c([
498
- w("sw-directory")
499
- ], o);
407
+ n([
408
+ m({ type: Object })
409
+ ], r.prototype, "directory", 2);
410
+ n([
411
+ l()
412
+ ], r.prototype, "selectedAddress", 2);
413
+ n([
414
+ l()
415
+ ], r.prototype, "searchQuery", 2);
416
+ n([
417
+ l()
418
+ ], r.prototype, "addresses", 2);
419
+ n([
420
+ l()
421
+ ], r.prototype, "loading", 2);
422
+ n([
423
+ l()
424
+ ], r.prototype, "hasMore", 2);
425
+ n([
426
+ l()
427
+ ], r.prototype, "isAutoLoadingForSearch", 2);
428
+ r = n([
429
+ b("sw-directory")
430
+ ], r);
500
431
  export {
501
- o as DirectoryComponent
432
+ r as DirectoryComponent
502
433
  };
503
434
  //# sourceMappingURL=directory.js.map