@social.io/catalog 1.3.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.smartconfig.json +51 -0
- package/dist_bundle/bundle.js +5450 -3267
- package/dist_ts_web/00_commitinfo_data.js +3 -3
- package/dist_ts_web/elements/index.d.ts +20 -3
- package/dist_ts_web/elements/index.js +27 -7
- package/dist_ts_web/elements/sio-ai-card.d.ts +39 -0
- package/dist_ts_web/elements/sio-ai-card.js +229 -0
- package/dist_ts_web/elements/sio-avatar.d.ts +46 -0
- package/dist_ts_web/elements/sio-avatar.js +379 -0
- package/dist_ts_web/elements/sio-bucket-header.d.ts +36 -0
- package/dist_ts_web/elements/sio-bucket-header.js +197 -0
- package/dist_ts_web/elements/sio-button.d.ts +7 -3
- package/dist_ts_web/elements/sio-button.js +253 -152
- package/dist_ts_web/elements/sio-channel-rail.d.ts +37 -0
- package/dist_ts_web/elements/sio-channel-rail.js +275 -0
- package/dist_ts_web/elements/sio-chip.d.ts +25 -0
- package/dist_ts_web/elements/sio-chip.js +188 -0
- package/dist_ts_web/elements/sio-cmdk.d.ts +59 -0
- package/dist_ts_web/elements/sio-cmdk.js +471 -0
- package/dist_ts_web/elements/sio-combox.d.ts +55 -1
- package/dist_ts_web/elements/sio-combox.js +458 -261
- package/dist_ts_web/elements/sio-composer.d.ts +48 -0
- package/dist_ts_web/elements/sio-composer.js +357 -0
- package/dist_ts_web/elements/sio-conversation-selector.d.ts +41 -1
- package/dist_ts_web/elements/sio-conversation-selector.js +426 -238
- package/dist_ts_web/elements/sio-conversation-view.d.ts +34 -6
- package/dist_ts_web/elements/sio-conversation-view.js +738 -564
- package/dist_ts_web/elements/sio-dropdown-menu.d.ts +6 -6
- package/dist_ts_web/elements/sio-dropdown-menu.js +223 -169
- package/dist_ts_web/elements/sio-fab.d.ts +23 -5
- package/dist_ts_web/elements/sio-fab.js +259 -235
- package/dist_ts_web/elements/sio-glass-toolbar.d.ts +22 -0
- package/dist_ts_web/elements/sio-glass-toolbar.js +178 -0
- package/dist_ts_web/elements/sio-icon.d.ts +1 -0
- package/dist_ts_web/elements/sio-icon.js +254 -94
- package/dist_ts_web/elements/sio-image-lightbox.d.ts +3 -4
- package/dist_ts_web/elements/sio-image-lightbox.js +282 -191
- package/dist_ts_web/elements/sio-inset-list.d.ts +28 -0
- package/dist_ts_web/elements/sio-inset-list.js +191 -0
- package/dist_ts_web/elements/sio-kbd.d.ts +16 -0
- package/dist_ts_web/elements/sio-kbd.js +117 -0
- package/dist_ts_web/elements/sio-list-row.d.ts +55 -0
- package/dist_ts_web/elements/sio-list-row.js +462 -0
- package/dist_ts_web/elements/sio-message-input.d.ts +25 -4
- package/dist_ts_web/elements/sio-message-input.js +231 -226
- package/dist_ts_web/elements/sio-paper-thumb.d.ts +24 -0
- package/dist_ts_web/elements/sio-paper-thumb.js +293 -0
- package/dist_ts_web/elements/sio-pdf-viewer.d.ts +2 -0
- package/dist_ts_web/elements/sio-pdf-viewer.js +344 -244
- package/dist_ts_web/elements/sio-segmented.d.ts +32 -0
- package/dist_ts_web/elements/sio-segmented.js +217 -0
- package/dist_ts_web/elements/sio-step-timeline.d.ts +28 -0
- package/dist_ts_web/elements/sio-step-timeline.js +222 -0
- package/dist_ts_web/elements/sio-tab-bar.d.ts +36 -0
- package/dist_ts_web/elements/sio-tab-bar.js +232 -0
- package/dist_ts_web/elements/sio-unread-badge.d.ts +25 -0
- package/dist_ts_web/elements/sio-unread-badge.js +203 -0
- package/dist_ts_web/elements/sio-waveform.d.ts +34 -0
- package/dist_ts_web/elements/sio-waveform.js +304 -0
- package/dist_ts_web/elements/tokens.d.ts +70 -0
- package/dist_ts_web/elements/tokens.js +277 -0
- package/dist_ts_web/pages/firstpage.d.ts +5 -0
- package/dist_ts_web/pages/firstpage.js +21 -2
- package/dist_ts_web/pages/mainpage.d.ts +6 -0
- package/dist_ts_web/pages/mainpage.js +111 -39
- package/{license → license.md} +3 -1
- package/package.json +23 -29
- package/readme.hints.md +81 -0
- package/readme.md +85 -151
- package/ts_web/00_commitinfo_data.ts +2 -2
- package/ts_web/elements/index.ts +30 -7
- package/ts_web/elements/sio-ai-card.ts +175 -0
- package/ts_web/elements/sio-avatar.ts +295 -0
- package/ts_web/elements/sio-bucket-header.ts +157 -0
- package/ts_web/elements/sio-button.ts +149 -127
- package/ts_web/elements/sio-channel-rail.ts +243 -0
- package/ts_web/elements/sio-chip.ts +134 -0
- package/ts_web/elements/sio-cmdk.ts +461 -0
- package/ts_web/elements/sio-combox.ts +327 -204
- package/ts_web/elements/sio-composer.ts +306 -0
- package/ts_web/elements/sio-conversation-selector.ts +350 -228
- package/ts_web/elements/sio-conversation-view.ts +573 -457
- package/ts_web/elements/sio-dropdown-menu.ts +112 -130
- package/ts_web/elements/sio-fab.ts +192 -227
- package/ts_web/elements/sio-glass-toolbar.ts +140 -0
- package/ts_web/elements/sio-icon.ts +147 -25
- package/ts_web/elements/sio-image-lightbox.ts +62 -64
- package/ts_web/elements/sio-inset-list.ts +140 -0
- package/ts_web/elements/sio-kbd.ts +80 -0
- package/ts_web/elements/sio-list-row.ts +393 -0
- package/ts_web/elements/sio-message-input.ts +142 -221
- package/ts_web/elements/sio-paper-thumb.ts +244 -0
- package/ts_web/elements/sio-pdf-viewer.ts +58 -60
- package/ts_web/elements/sio-segmented.ts +183 -0
- package/ts_web/elements/sio-step-timeline.ts +179 -0
- package/ts_web/elements/sio-tab-bar.ts +195 -0
- package/ts_web/elements/sio-unread-badge.ts +147 -0
- package/ts_web/elements/sio-waveform.ts +239 -0
- package/ts_web/elements/tokens.ts +297 -0
- package/ts_web/pages/firstpage.ts +20 -1
- package/ts_web/pages/mainpage.ts +111 -39
- package/dist_bundle/bundle.js.map +0 -7
- package/dist_ts_web/elements/00colors.d.ts +0 -108
- package/dist_ts_web/elements/00colors.js +0 -137
- package/dist_ts_web/elements/00fonts.d.ts +0 -60
- package/dist_ts_web/elements/00fonts.js +0 -129
- package/dist_ts_web/elements/00tokens.d.ts +0 -123
- package/dist_ts_web/elements/00tokens.js +0 -176
- package/dist_ts_web/elements/sio-conversation-list.d.ts +0 -20
- package/dist_ts_web/elements/sio-conversation-list.js +0 -495
- package/dist_ts_web/elements/sio-recorder.d.ts +0 -60
- package/dist_ts_web/elements/sio-recorder.js +0 -173
- package/dist_ts_web/elements/sio-subwidget-conversations.d.ts +0 -16
- package/dist_ts_web/elements/sio-subwidget-conversations.js +0 -350
- package/dist_ts_web/elements/sio-subwidget-onboardme.d.ts +0 -7
- package/dist_ts_web/elements/sio-subwidget-onboardme.js +0 -243
- package/dist_watch/bundle.js +0 -81694
- package/dist_watch/bundle.js.map +0 -7
- package/dist_watch/index.html +0 -25
- package/npmextra.json +0 -19
- package/ts_web/elements/00colors.ts +0 -164
- package/ts_web/elements/00fonts.ts +0 -145
- package/ts_web/elements/00tokens.ts +0 -197
- package/ts_web/elements/sio-recorder.ts +0 -213
|
@@ -0,0 +1,306 @@
|
|
|
1
|
+
import {
|
|
2
|
+
DeesElement,
|
|
3
|
+
html,
|
|
4
|
+
property,
|
|
5
|
+
customElement,
|
|
6
|
+
css,
|
|
7
|
+
type TemplateResult,
|
|
8
|
+
} from '@design.estate/dees-element';
|
|
9
|
+
import { sioElementStyles } from './tokens.js';
|
|
10
|
+
import './sio-icon.js';
|
|
11
|
+
|
|
12
|
+
/** Accent of the circular send button. 'tint' = system blue (default). */
|
|
13
|
+
export type TSioComposerAccent = 'tint' | 'mail' | 'chats' | 'calls' | 'letters';
|
|
14
|
+
|
|
15
|
+
/** 'email' swaps the field to type=email with a "you@email.com" placeholder. */
|
|
16
|
+
export type TSioComposerVariant = 'message' | 'email';
|
|
17
|
+
|
|
18
|
+
declare global {
|
|
19
|
+
interface HTMLElementTagNameMap {
|
|
20
|
+
'sio-composer': SioComposer;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* sio-composer — the v7 message composer row.
|
|
26
|
+
*
|
|
27
|
+
* Pill input (radius 20, --sio-surface-2, 15px) + circular 32px send
|
|
28
|
+
* button (solid accent, white arrow-up), optional leading attach "+"
|
|
29
|
+
* button, optional auto-expanding multiline field. Email-capture
|
|
30
|
+
* variant for the widget's mail-fallback moment.
|
|
31
|
+
*
|
|
32
|
+
* Events (bubbles, composed):
|
|
33
|
+
* composer-send { text } — send click or Enter (Shift+Enter = newline when auto-expand)
|
|
34
|
+
* composer-attach — attach button click
|
|
35
|
+
*
|
|
36
|
+
* Design sources: SocialIOChannels.jsx (chat composer),
|
|
37
|
+
* SocialIOWidget.jsx (widget composer + email capture).
|
|
38
|
+
*/
|
|
39
|
+
@customElement('sio-composer')
|
|
40
|
+
export class SioComposer extends DeesElement {
|
|
41
|
+
public static demo = () => html`
|
|
42
|
+
<div
|
|
43
|
+
style="display: grid; gap: 18px; max-width: 420px; padding: 24px; background: var(--sio-bg); font-family: var(--sio-font-sf);"
|
|
44
|
+
>
|
|
45
|
+
<div
|
|
46
|
+
style="font-size: 11px; font-weight: 700; letter-spacing: 0.06px; text-transform: uppercase; color: var(--sio-label-3);"
|
|
47
|
+
>
|
|
48
|
+
Chat composer — attach + chats accent
|
|
49
|
+
</div>
|
|
50
|
+
<div style="background: var(--sio-surface); border-radius: 16px; padding-top: 12px;">
|
|
51
|
+
<sio-composer attach accent="chats" placeholder="Message"></sio-composer>
|
|
52
|
+
</div>
|
|
53
|
+
|
|
54
|
+
<div
|
|
55
|
+
style="font-size: 11px; font-weight: 700; letter-spacing: 0.06px; text-transform: uppercase; color: var(--sio-label-3);"
|
|
56
|
+
>
|
|
57
|
+
Widget composer — auto-expand, tint accent
|
|
58
|
+
</div>
|
|
59
|
+
<div style="background: var(--sio-surface); border-radius: 16px; padding-top: 12px;">
|
|
60
|
+
<sio-composer auto-expand placeholder="Write a message…"></sio-composer>
|
|
61
|
+
</div>
|
|
62
|
+
|
|
63
|
+
<div
|
|
64
|
+
style="font-size: 11px; font-weight: 700; letter-spacing: 0.06px; text-transform: uppercase; color: var(--sio-label-3);"
|
|
65
|
+
>
|
|
66
|
+
Email capture — team is away
|
|
67
|
+
</div>
|
|
68
|
+
<div style="background: var(--sio-surface); border-radius: 16px; padding-top: 12px;">
|
|
69
|
+
<sio-composer variant="email"></sio-composer>
|
|
70
|
+
</div>
|
|
71
|
+
|
|
72
|
+
<div
|
|
73
|
+
style="font-size: 11px; font-weight: 700; letter-spacing: 0.06px; text-transform: uppercase; color: var(--sio-label-3);"
|
|
74
|
+
>
|
|
75
|
+
Mail reply — mail accent
|
|
76
|
+
</div>
|
|
77
|
+
<div style="background: var(--sio-surface); border-radius: 16px; padding-top: 12px;">
|
|
78
|
+
<sio-composer attach accent="mail" placeholder="Reply to Lena…"></sio-composer>
|
|
79
|
+
</div>
|
|
80
|
+
</div>
|
|
81
|
+
`;
|
|
82
|
+
|
|
83
|
+
/** Field placeholder; defaults to "Message" (or "you@email.com" for the email variant). */
|
|
84
|
+
@property({ type: String })
|
|
85
|
+
public accessor placeholder = '';
|
|
86
|
+
|
|
87
|
+
/** 'message' (default) or 'email' — email capture swaps input type + placeholder. */
|
|
88
|
+
@property({ type: String, reflect: true })
|
|
89
|
+
public accessor variant: TSioComposerVariant = 'message';
|
|
90
|
+
|
|
91
|
+
/** Send-button accent: system tint or a channel color. */
|
|
92
|
+
@property({ type: String, reflect: true })
|
|
93
|
+
public accessor accent: TSioComposerAccent = 'tint';
|
|
94
|
+
|
|
95
|
+
/** Show the leading circular "+" attach button. */
|
|
96
|
+
@property({ type: Boolean, reflect: true })
|
|
97
|
+
public accessor attach = false;
|
|
98
|
+
|
|
99
|
+
/** Multiline field that grows with content (Shift+Enter for newline). */
|
|
100
|
+
@property({ type: Boolean, reflect: true, attribute: 'auto-expand' })
|
|
101
|
+
public accessor autoExpand = false;
|
|
102
|
+
|
|
103
|
+
/** Current field text. */
|
|
104
|
+
@property({ type: String })
|
|
105
|
+
public accessor value = '';
|
|
106
|
+
|
|
107
|
+
public static styles = [
|
|
108
|
+
...sioElementStyles,
|
|
109
|
+
css`
|
|
110
|
+
:host {
|
|
111
|
+
display: flex;
|
|
112
|
+
gap: 8px;
|
|
113
|
+
align-items: flex-end;
|
|
114
|
+
padding: 8px 10px 14px;
|
|
115
|
+
border-top: var(--sio-hairline) solid var(--sio-separator);
|
|
116
|
+
font-family: var(--sio-font-sf);
|
|
117
|
+
--sio-composer-accent: var(--sio-tint);
|
|
118
|
+
--sio-composer-accent-active: var(--sio-tint-hover);
|
|
119
|
+
}
|
|
120
|
+
:host([accent='mail']) {
|
|
121
|
+
--sio-composer-accent: var(--sio-ch-mail);
|
|
122
|
+
--sio-composer-accent-active: color-mix(in oklab, var(--sio-ch-mail) 85%, var(--sio-label));
|
|
123
|
+
}
|
|
124
|
+
:host([accent='chats']) {
|
|
125
|
+
--sio-composer-accent: var(--sio-ch-chats);
|
|
126
|
+
--sio-composer-accent-active: color-mix(in oklab, var(--sio-ch-chats) 85%, var(--sio-label));
|
|
127
|
+
}
|
|
128
|
+
:host([accent='calls']) {
|
|
129
|
+
--sio-composer-accent: var(--sio-ch-calls);
|
|
130
|
+
--sio-composer-accent-active: color-mix(in oklab, var(--sio-ch-calls) 85%, var(--sio-label));
|
|
131
|
+
}
|
|
132
|
+
:host([accent='letters']) {
|
|
133
|
+
--sio-composer-accent: var(--sio-ch-letters);
|
|
134
|
+
--sio-composer-accent-active: color-mix(in oklab, var(--sio-ch-letters) 85%, var(--sio-label));
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
.attach,
|
|
138
|
+
.send {
|
|
139
|
+
width: 32px;
|
|
140
|
+
height: 32px;
|
|
141
|
+
border-radius: 16px;
|
|
142
|
+
border: none;
|
|
143
|
+
padding: 0;
|
|
144
|
+
margin-bottom: 2px;
|
|
145
|
+
display: flex;
|
|
146
|
+
align-items: center;
|
|
147
|
+
justify-content: center;
|
|
148
|
+
cursor: pointer;
|
|
149
|
+
flex: 0 0 auto;
|
|
150
|
+
font-family: inherit;
|
|
151
|
+
transition: background 120ms ease, color 120ms ease, transform 80ms ease;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
.attach {
|
|
155
|
+
background: var(--sio-surface-2);
|
|
156
|
+
color: var(--sio-label-3);
|
|
157
|
+
}
|
|
158
|
+
.attach:hover {
|
|
159
|
+
color: var(--sio-label-2);
|
|
160
|
+
}
|
|
161
|
+
.attach:active {
|
|
162
|
+
transform: scale(0.94);
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
.send {
|
|
166
|
+
background: var(--sio-composer-accent);
|
|
167
|
+
color: var(--sio-on-accent, #fff);
|
|
168
|
+
}
|
|
169
|
+
.send:hover:not(:disabled) {
|
|
170
|
+
background: var(--sio-composer-accent-active);
|
|
171
|
+
}
|
|
172
|
+
.send:active:not(:disabled) {
|
|
173
|
+
transform: scale(0.94);
|
|
174
|
+
}
|
|
175
|
+
.send:disabled {
|
|
176
|
+
opacity: 0.4;
|
|
177
|
+
cursor: default;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
.attach:focus-visible,
|
|
181
|
+
.send:focus-visible {
|
|
182
|
+
outline: 2px solid color-mix(in oklab, var(--sio-composer-accent) 55%, transparent);
|
|
183
|
+
outline-offset: 2px;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
.field {
|
|
187
|
+
flex: 1;
|
|
188
|
+
min-width: 0;
|
|
189
|
+
box-sizing: border-box;
|
|
190
|
+
min-height: 36px;
|
|
191
|
+
background: var(--sio-surface-2);
|
|
192
|
+
border: none;
|
|
193
|
+
outline: none;
|
|
194
|
+
border-radius: 20px;
|
|
195
|
+
padding: 8px 14px;
|
|
196
|
+
margin: 0;
|
|
197
|
+
font-family: inherit;
|
|
198
|
+
font-size: 15px;
|
|
199
|
+
line-height: 20px;
|
|
200
|
+
letter-spacing: -0.24px;
|
|
201
|
+
color: var(--sio-label);
|
|
202
|
+
}
|
|
203
|
+
.field::placeholder {
|
|
204
|
+
color: var(--sio-label-3);
|
|
205
|
+
}
|
|
206
|
+
.field:focus-visible {
|
|
207
|
+
box-shadow: 0 0 0 3px color-mix(in oklab, var(--sio-composer-accent) 25%, transparent);
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
textarea.field {
|
|
211
|
+
resize: none;
|
|
212
|
+
max-height: 120px;
|
|
213
|
+
overflow-y: auto;
|
|
214
|
+
display: block;
|
|
215
|
+
}
|
|
216
|
+
`,
|
|
217
|
+
];
|
|
218
|
+
|
|
219
|
+
public render(): TemplateResult {
|
|
220
|
+
const placeholder =
|
|
221
|
+
this.placeholder || (this.variant === 'email' ? 'you@email.com' : 'Message');
|
|
222
|
+
return html`
|
|
223
|
+
${this.attach
|
|
224
|
+
? html`
|
|
225
|
+
<button class="attach" aria-label="Add attachment" @click=${this.handleAttach}>
|
|
226
|
+
<sio-icon icon="plus" size="16" .strokeWidth=${2}></sio-icon>
|
|
227
|
+
</button>
|
|
228
|
+
`
|
|
229
|
+
: html``}
|
|
230
|
+
${this.autoExpand
|
|
231
|
+
? html`
|
|
232
|
+
<textarea
|
|
233
|
+
class="field"
|
|
234
|
+
rows="1"
|
|
235
|
+
placeholder=${placeholder}
|
|
236
|
+
.value=${this.value}
|
|
237
|
+
@input=${this.handleInput}
|
|
238
|
+
@keydown=${this.handleKeydown}
|
|
239
|
+
></textarea>
|
|
240
|
+
`
|
|
241
|
+
: html`
|
|
242
|
+
<input
|
|
243
|
+
class="field"
|
|
244
|
+
type=${this.variant === 'email' ? 'email' : 'text'}
|
|
245
|
+
placeholder=${placeholder}
|
|
246
|
+
.value=${this.value}
|
|
247
|
+
@input=${this.handleInput}
|
|
248
|
+
@keydown=${this.handleKeydown}
|
|
249
|
+
/>
|
|
250
|
+
`}
|
|
251
|
+
<button
|
|
252
|
+
class="send"
|
|
253
|
+
aria-label="Send"
|
|
254
|
+
?disabled=${!this.value.trim()}
|
|
255
|
+
@click=${this.handleSend}
|
|
256
|
+
>
|
|
257
|
+
<sio-icon icon="arrow-up" size="15" .strokeWidth=${2.2}></sio-icon>
|
|
258
|
+
</button>
|
|
259
|
+
`;
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
public updated() {
|
|
263
|
+
if (this.autoExpand) {
|
|
264
|
+
const textarea = this.shadowRoot?.querySelector('textarea');
|
|
265
|
+
if (textarea) {
|
|
266
|
+
textarea.style.height = 'auto';
|
|
267
|
+
textarea.style.height = `${Math.min(textarea.scrollHeight, 120)}px`;
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
private handleInput = (event: Event) => {
|
|
273
|
+
this.value = (event.target as HTMLInputElement | HTMLTextAreaElement).value;
|
|
274
|
+
};
|
|
275
|
+
|
|
276
|
+
private handleKeydown = (event: KeyboardEvent) => {
|
|
277
|
+
if (event.key === 'Enter' && !(this.autoExpand && event.shiftKey)) {
|
|
278
|
+
event.preventDefault();
|
|
279
|
+
this.handleSend();
|
|
280
|
+
}
|
|
281
|
+
};
|
|
282
|
+
|
|
283
|
+
private handleSend = () => {
|
|
284
|
+
const text = this.value.trim();
|
|
285
|
+
if (!text) {
|
|
286
|
+
return;
|
|
287
|
+
}
|
|
288
|
+
this.dispatchEvent(
|
|
289
|
+
new CustomEvent<{ text: string }>('composer-send', {
|
|
290
|
+
detail: { text },
|
|
291
|
+
bubbles: true,
|
|
292
|
+
composed: true,
|
|
293
|
+
}),
|
|
294
|
+
);
|
|
295
|
+
this.value = '';
|
|
296
|
+
};
|
|
297
|
+
|
|
298
|
+
private handleAttach = () => {
|
|
299
|
+
this.dispatchEvent(
|
|
300
|
+
new CustomEvent('composer-attach', {
|
|
301
|
+
bubbles: true,
|
|
302
|
+
composed: true,
|
|
303
|
+
}),
|
|
304
|
+
);
|
|
305
|
+
};
|
|
306
|
+
}
|