@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.
- package/README.md +45 -52
- package/dist/_virtual/_commonjsHelpers.js +9 -0
- package/dist/_virtual/_commonjsHelpers.js.map +1 -0
- package/dist/_virtual/prism-python.js +28 -0
- package/dist/_virtual/prism-python.js.map +1 -0
- package/dist/_virtual/prism-python2.js +5 -0
- package/dist/_virtual/prism-python2.js.map +1 -0
- package/dist/_virtual/prism-typescript.js +28 -0
- package/dist/_virtual/prism-typescript.js.map +1 -0
- package/dist/_virtual/prism-typescript2.js +5 -0
- package/dist/_virtual/prism-typescript2.js.map +1 -0
- package/dist/_virtual/prism.js +28 -0
- package/dist/_virtual/prism.js.map +1 -0
- package/dist/_virtual/prism2.js +5 -0
- package/dist/_virtual/prism2.js.map +1 -0
- package/dist/assets/sw_background.webp.js +5 -0
- package/dist/assets/sw_background.webp.js.map +1 -0
- package/dist/components/UI/DEFAULT_BACKGROUND.d.ts +4 -0
- package/dist/components/UI/DEFAULT_BACKGROUND.d.ts.map +1 -0
- package/dist/components/UI/DEFAULT_BACKGROUND.js +5 -0
- package/dist/components/UI/DEFAULT_BACKGROUND.js.map +1 -0
- package/dist/components/UI/controls/sw-ui-control-bar.d.ts +114 -0
- package/dist/components/UI/controls/sw-ui-control-bar.d.ts.map +1 -0
- package/dist/components/UI/controls/sw-ui-control-bar.js +324 -0
- package/dist/components/UI/controls/sw-ui-control-bar.js.map +1 -0
- package/dist/components/UI/controls/sw-ui-dialpad.d.ts +57 -0
- package/dist/components/UI/controls/sw-ui-dialpad.d.ts.map +1 -0
- package/dist/components/UI/controls/sw-ui-dialpad.js +319 -0
- package/dist/components/UI/controls/sw-ui-dialpad.js.map +1 -0
- package/dist/components/UI/controls/sw-ui-dropup.d.ts +42 -0
- package/dist/components/UI/controls/sw-ui-dropup.d.ts.map +1 -0
- package/dist/components/UI/controls/sw-ui-dropup.js +137 -0
- package/dist/components/UI/controls/sw-ui-dropup.js.map +1 -0
- package/dist/components/UI/controls/sw-ui-split-button.d.ts +44 -0
- package/dist/components/UI/controls/sw-ui-split-button.d.ts.map +1 -0
- package/dist/components/UI/controls/sw-ui-split-button.js +177 -0
- package/dist/components/UI/controls/sw-ui-split-button.js.map +1 -0
- package/dist/components/UI/icons/backspace.svg.js +10 -0
- package/dist/components/UI/icons/backspace.svg.js.map +1 -0
- package/dist/components/UI/icons/camera-off.svg.js +8 -0
- package/dist/components/UI/icons/camera-off.svg.js.map +1 -0
- package/dist/components/UI/icons/camera-on.svg.js +8 -0
- package/dist/components/UI/icons/camera-on.svg.js.map +1 -0
- package/dist/components/UI/icons/check-circle.svg.js +6 -0
- package/dist/components/UI/icons/check-circle.svg.js.map +1 -0
- package/dist/components/UI/icons/chevron-up.svg.js +8 -0
- package/dist/components/UI/icons/chevron-up.svg.js.map +1 -0
- package/dist/components/UI/icons/close.svg.js +6 -0
- package/dist/components/UI/icons/close.svg.js.map +1 -0
- package/dist/components/UI/icons/copy.svg.js +6 -0
- package/dist/components/UI/icons/copy.svg.js.map +1 -0
- package/dist/components/UI/icons/download.svg.js +6 -0
- package/dist/components/UI/icons/download.svg.js.map +1 -0
- package/dist/components/UI/icons/fullscreen-exit.svg.js +8 -0
- package/dist/components/UI/icons/fullscreen-exit.svg.js.map +1 -0
- package/dist/components/UI/icons/fullscreen.svg.js +8 -0
- package/dist/components/UI/icons/fullscreen.svg.js.map +1 -0
- package/dist/components/UI/icons/hand-raise.svg.js +6 -0
- package/dist/components/UI/icons/hand-raise.svg.js.map +1 -0
- package/dist/components/UI/icons/icons.d.ts +31 -0
- package/dist/components/UI/icons/icons.d.ts.map +1 -0
- package/dist/components/UI/icons/icons.js +60 -0
- package/dist/components/UI/icons/icons.js.map +1 -0
- package/dist/components/UI/icons/index.d.ts +4 -0
- package/dist/components/UI/icons/index.d.ts.map +1 -0
- package/dist/components/UI/icons/info-circle.svg.js +6 -0
- package/dist/components/UI/icons/info-circle.svg.js.map +1 -0
- package/dist/components/UI/icons/mic-off.svg.js +8 -0
- package/dist/components/UI/icons/mic-off.svg.js.map +1 -0
- package/dist/components/UI/icons/mic-on.svg.js +8 -0
- package/dist/components/UI/icons/mic-on.svg.js.map +1 -0
- package/dist/components/UI/icons/person.svg.js +8 -0
- package/dist/components/UI/icons/person.svg.js.map +1 -0
- package/dist/components/UI/icons/phone-call.svg.js +8 -0
- package/dist/components/UI/icons/phone-call.svg.js.map +1 -0
- package/dist/components/UI/icons/phone-end.svg.js +8 -0
- package/dist/components/UI/icons/phone-end.svg.js.map +1 -0
- package/dist/components/UI/icons/room.svg.js +8 -0
- package/dist/components/UI/icons/room.svg.js.map +1 -0
- package/dist/components/UI/icons/screen-share-off.svg.js +9 -0
- package/dist/components/UI/icons/screen-share-off.svg.js.map +1 -0
- package/dist/components/UI/icons/screen-share.svg.js +9 -0
- package/dist/components/UI/icons/screen-share.svg.js.map +1 -0
- package/dist/components/UI/icons/sendIcon.svg.js +9 -0
- package/dist/components/UI/icons/sendIcon.svg.js.map +1 -0
- package/dist/components/UI/icons/settings.svg.js +8 -0
- package/dist/components/UI/icons/settings.svg.js.map +1 -0
- package/dist/components/UI/icons/speaker-off.svg.js +8 -0
- package/dist/components/UI/icons/speaker-off.svg.js.map +1 -0
- package/dist/components/UI/icons/speaker-on.svg.js +8 -0
- package/dist/components/UI/icons/speaker-on.svg.js.map +1 -0
- package/dist/components/UI/icons/spinner.svg.js +9 -0
- package/dist/components/UI/icons/spinner.svg.js.map +1 -0
- package/dist/components/UI/icons/sw-logo.svg.js +11 -0
- package/dist/components/UI/icons/sw-logo.svg.js.map +1 -0
- package/dist/components/UI/icons/sw-ui-icon.d.ts +28 -0
- package/dist/components/UI/icons/sw-ui-icon.d.ts.map +1 -0
- package/dist/components/UI/icons/sw-ui-icon.js +47 -0
- package/dist/components/UI/icons/sw-ui-icon.js.map +1 -0
- package/dist/components/UI/icons/transcript.svg.js +10 -0
- package/dist/components/UI/icons/transcript.svg.js.map +1 -0
- package/dist/components/UI/index.d.ts +18 -0
- package/dist/components/UI/index.d.ts.map +1 -0
- package/dist/components/UI/layout/sw-ui-background.d.ts +33 -0
- package/dist/components/UI/layout/sw-ui-background.d.ts.map +1 -0
- package/dist/components/UI/layout/sw-ui-background.js +106 -0
- package/dist/components/UI/layout/sw-ui-background.js.map +1 -0
- package/dist/components/UI/layout/sw-ui-call-layout.d.ts +69 -0
- package/dist/components/UI/layout/sw-ui-call-layout.d.ts.map +1 -0
- package/dist/components/UI/layout/sw-ui-call-layout.js +278 -0
- package/dist/components/UI/layout/sw-ui-call-layout.js.map +1 -0
- package/dist/components/UI/layout/sw-ui-content-drawer.d.ts +50 -0
- package/dist/components/UI/layout/sw-ui-content-drawer.d.ts.map +1 -0
- package/dist/components/UI/layout/sw-ui-content-drawer.js +413 -0
- package/dist/components/UI/layout/sw-ui-content-drawer.js.map +1 -0
- package/dist/components/UI/layout/sw-ui-modal.d.ts +31 -0
- package/dist/components/UI/layout/sw-ui-modal.d.ts.map +1 -0
- package/dist/components/UI/layout/sw-ui-modal.js +150 -0
- package/dist/components/UI/layout/sw-ui-modal.js.map +1 -0
- package/dist/components/UI/layout/sw-ui-responsive-container.d.ts +15 -0
- package/dist/components/UI/layout/sw-ui-responsive-container.d.ts.map +1 -0
- package/dist/components/UI/layout/sw-ui-responsive-container.js +78 -0
- package/dist/components/UI/layout/sw-ui-responsive-container.js.map +1 -0
- package/dist/components/UI/sw-ui-alert.d.ts +37 -0
- package/dist/components/UI/sw-ui-alert.d.ts.map +1 -0
- package/dist/components/UI/sw-ui-alert.js +126 -0
- package/dist/components/UI/sw-ui-alert.js.map +1 -0
- package/dist/components/UI/sw-ui-transcript-view.d.ts +56 -0
- package/dist/components/UI/sw-ui-transcript-view.d.ts.map +1 -0
- package/dist/components/UI/sw-ui-transcript-view.js +341 -0
- package/dist/components/UI/sw-ui-transcript-view.js.map +1 -0
- package/dist/components/directory.d.ts +10 -18
- package/dist/components/directory.d.ts.map +1 -1
- package/dist/components/directory.js +129 -198
- package/dist/components/directory.js.map +1 -1
- package/dist/embed/signalwire-web-components-embed.iife.js +2336 -982
- package/dist/embed/signalwire-web-components-embed.iife.js.map +1 -1
- package/dist/embed/signalwire-web-components-embed.umd.cjs +2336 -982
- package/dist/embed/signalwire-web-components-embed.umd.cjs.map +1 -1
- package/dist/embed.d.ts +1 -1
- package/dist/embed.d.ts.map +1 -1
- package/dist/index.d.ts +2 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +54 -33
- package/dist/index.js.map +1 -1
- package/dist/node_modules/dompurify/dist/purify.es.js +597 -0
- package/dist/node_modules/dompurify/dist/purify.es.js.map +1 -0
- package/dist/node_modules/marked/lib/marked.esm.js +1475 -0
- package/dist/node_modules/marked/lib/marked.esm.js.map +1 -0
- package/dist/node_modules/prismjs/components/prism-bash.js +220 -0
- package/dist/node_modules/prismjs/components/prism-bash.js.map +1 -0
- package/dist/node_modules/prismjs/components/prism-css.js +56 -0
- package/dist/node_modules/prismjs/components/prism-css.js.map +1 -0
- package/dist/node_modules/prismjs/components/prism-javascript.js +138 -0
- package/dist/node_modules/prismjs/components/prism-javascript.js.map +1 -0
- package/dist/node_modules/prismjs/components/prism-json.js +26 -0
- package/dist/node_modules/prismjs/components/prism-json.js.map +1 -0
- package/dist/node_modules/prismjs/components/prism-markdown.js +301 -0
- package/dist/node_modules/prismjs/components/prism-markdown.js.map +1 -0
- package/dist/node_modules/prismjs/components/prism-python.js +69 -0
- package/dist/node_modules/prismjs/components/prism-python.js.map +1 -0
- package/dist/node_modules/prismjs/components/prism-sql.js +34 -0
- package/dist/node_modules/prismjs/components/prism-sql.js.map +1 -0
- package/dist/node_modules/prismjs/components/prism-typescript.js +53 -0
- package/dist/node_modules/prismjs/components/prism-typescript.js.map +1 -0
- package/dist/node_modules/prismjs/components/prism-yaml.js +67 -0
- package/dist/node_modules/prismjs/components/prism-yaml.js.map +1 -0
- package/dist/node_modules/prismjs/prism.js +1165 -0
- package/dist/node_modules/prismjs/prism.js.map +1 -0
- package/dist/react.d.ts +3 -3
- package/dist/utils/prism.d.ts +4 -0
- package/dist/utils/prism.d.ts.map +1 -0
- package/dist/utils/prism.js +34 -0
- package/dist/utils/prism.js.map +1 -0
- package/dist/utils/transcriptToMarkdown.d.ts +14 -0
- package/dist/utils/transcriptToMarkdown.d.ts.map +1 -0
- package/dist/utils/transcriptToMarkdown.js +59 -0
- package/dist/utils/transcriptToMarkdown.js.map +1 -0
- package/package.json +53 -9
- package/dist/components/dialpad.d.ts +0 -74
- package/dist/components/dialpad.d.ts.map +0 -1
- package/dist/components/dialpad.js +0 -372
- package/dist/components/dialpad.js.map +0 -1
- package/dist/components/example-button.d.ts +0 -21
- package/dist/components/example-button.d.ts.map +0 -1
- package/dist/components/example-button.js +0 -74
- 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 [--
|
|
16
|
-
* @cssprop [--
|
|
17
|
-
* @cssprop [--
|
|
18
|
-
* @cssprop [--
|
|
19
|
-
* @cssprop [--
|
|
20
|
-
* @cssprop [--
|
|
21
|
-
* @cssprop [--
|
|
22
|
-
* @cssprop [--
|
|
23
|
-
* @cssprop [--
|
|
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
|
|
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
|
|
2
|
-
import { property as
|
|
3
|
-
var
|
|
4
|
-
for (var
|
|
5
|
-
(
|
|
6
|
-
return
|
|
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
|
|
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((
|
|
22
|
-
this.addresses =
|
|
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((
|
|
28
|
-
this.loading =
|
|
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((
|
|
34
|
-
this.hasMore =
|
|
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
|
|
49
|
-
const e = (
|
|
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
|
-
(
|
|
52
|
-
const
|
|
53
|
-
|
|
51
|
+
(t) => {
|
|
52
|
+
const s = t[0];
|
|
53
|
+
s != null && s.isIntersecting && this.hasMore && !this.loading && this.handleLoadMore();
|
|
54
54
|
},
|
|
55
55
|
{
|
|
56
|
-
root: (
|
|
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
|
-
(
|
|
73
|
+
(i) => i.name.toLowerCase().includes(e) || i.displayName && i.displayName.toLowerCase().includes(e)
|
|
74
74
|
);
|
|
75
75
|
}
|
|
76
76
|
handleSearchInput(e) {
|
|
77
|
-
const
|
|
77
|
+
const i = e.target;
|
|
78
78
|
this.searchDebounceTimer && clearTimeout(this.searchDebounceTimer), this.searchDebounceTimer = window.setTimeout(() => {
|
|
79
|
-
this.searchQuery =
|
|
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
|
-
|
|
109
|
-
|
|
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
|
|
124
|
-
return
|
|
112
|
+
const i = e.channels || {};
|
|
113
|
+
return a`
|
|
125
114
|
<div class="item-channels">
|
|
126
|
-
<
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
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
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
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
|
|
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,
|
|
161
|
-
return
|
|
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 ?
|
|
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
|
-
(
|
|
177
|
-
var
|
|
178
|
-
return
|
|
155
|
+
(t) => {
|
|
156
|
+
var s, c, d;
|
|
157
|
+
return a`
|
|
179
158
|
<div
|
|
180
|
-
class="item ${((
|
|
181
|
-
part="item ${((
|
|
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="${((
|
|
184
|
-
@click=${() => this.handleItemClick(
|
|
185
|
-
@dblclick=${() => this.handleItemDoubleClick(
|
|
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(
|
|
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
|
-
${
|
|
169
|
+
${t.displayName || t.name}
|
|
191
170
|
</div>
|
|
192
171
|
<div class="item-type" part="item-type">
|
|
193
|
-
${
|
|
172
|
+
${t.type || "address"}
|
|
194
173
|
</div>
|
|
195
174
|
</div>
|
|
196
|
-
${this.renderChannelIcons(
|
|
175
|
+
${this.renderChannelIcons(t)}
|
|
197
176
|
<button
|
|
198
177
|
class="dial-button"
|
|
199
178
|
@click=${(h) => {
|
|
200
|
-
h.stopPropagation(), this.handleDial(
|
|
179
|
+
h.stopPropagation(), this.handleDial(t);
|
|
201
180
|
}}
|
|
202
|
-
aria-label="Call ${
|
|
181
|
+
aria-label="Call ${t.displayName || t.name}"
|
|
203
182
|
>
|
|
204
|
-
<
|
|
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
|
-
|
|
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(--
|
|
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(--
|
|
279
|
-
border: 1px solid var(--
|
|
280
|
-
border-radius: var(--
|
|
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(--
|
|
288
|
-
padding: var(--
|
|
289
|
-
border-bottom: 1px solid var(--
|
|
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(--
|
|
295
|
-
border: 1px solid var(--
|
|
296
|
-
border-radius: var(--
|
|
297
|
-
background: var(--
|
|
298
|
-
color: var(--
|
|
299
|
-
font-family: var(--
|
|
300
|
-
font-size: var(--
|
|
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(--
|
|
237
|
+
border-color: var(--interactive-button-primary-bg);
|
|
307
238
|
}
|
|
308
239
|
|
|
309
240
|
.search-input::placeholder {
|
|
310
|
-
color: var(--
|
|
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(--
|
|
324
|
-
padding: var(--
|
|
325
|
-
border-bottom: 1px solid var(--
|
|
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(--
|
|
266
|
+
background: var(--bg-surface-raised);
|
|
336
267
|
}
|
|
337
268
|
|
|
338
269
|
.item:active {
|
|
339
|
-
background: var(--
|
|
270
|
+
background: var(--interactive-dropdown-hover);
|
|
340
271
|
}
|
|
341
272
|
|
|
342
273
|
.item.selected {
|
|
343
|
-
background: var(--
|
|
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(--
|
|
360
|
-
color: var(--
|
|
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(--
|
|
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(--
|
|
390
|
-
color: var(--
|
|
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(--
|
|
397
|
-
color: var(--
|
|
328
|
+
gap: var(--sp-1);
|
|
329
|
+
color: var(--fg-muted);
|
|
398
330
|
}
|
|
399
331
|
|
|
400
|
-
.item-channels
|
|
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(--
|
|
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(--
|
|
415
|
-
color: var(--
|
|
416
|
-
font-size: var(--
|
|
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(--
|
|
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(--
|
|
432
|
-
padding: var(--
|
|
433
|
-
color: var(--
|
|
434
|
-
font-size: var(--
|
|
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(--
|
|
441
|
-
border-top-color: var(--
|
|
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(--
|
|
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
|
|
472
|
-
|
|
473
|
-
height: 18px;
|
|
403
|
+
.dial-button sw-ui-icon {
|
|
404
|
+
pointer-events: none;
|
|
474
405
|
}
|
|
475
406
|
`;
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
],
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
],
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
],
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
],
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
],
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
],
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
],
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
],
|
|
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
|
-
|
|
432
|
+
r as DirectoryComponent
|
|
502
433
|
};
|
|
503
434
|
//# sourceMappingURL=directory.js.map
|