@social.io/catalog 1.3.0 → 2.1.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.
Files changed (130) hide show
  1. package/.smartconfig.json +51 -0
  2. package/dist_bundle/bundle.js +5455 -3248
  3. package/dist_ts_web/00_commitinfo_data.js +3 -3
  4. package/dist_ts_web/elements/index.d.ts +21 -3
  5. package/dist_ts_web/elements/index.js +28 -7
  6. package/dist_ts_web/elements/sio-ai-card.d.ts +39 -0
  7. package/dist_ts_web/elements/sio-ai-card.js +229 -0
  8. package/dist_ts_web/elements/sio-avatar.d.ts +46 -0
  9. package/dist_ts_web/elements/sio-avatar.js +379 -0
  10. package/dist_ts_web/elements/sio-bucket-header.d.ts +36 -0
  11. package/dist_ts_web/elements/sio-bucket-header.js +197 -0
  12. package/dist_ts_web/elements/sio-button.d.ts +7 -3
  13. package/dist_ts_web/elements/sio-button.js +253 -152
  14. package/dist_ts_web/elements/sio-channel-rail.d.ts +38 -0
  15. package/dist_ts_web/elements/sio-channel-rail.js +288 -0
  16. package/dist_ts_web/elements/sio-chip.d.ts +25 -0
  17. package/dist_ts_web/elements/sio-chip.js +188 -0
  18. package/dist_ts_web/elements/sio-cmdk.d.ts +59 -0
  19. package/dist_ts_web/elements/sio-cmdk.js +471 -0
  20. package/dist_ts_web/elements/sio-combox.d.ts +55 -1
  21. package/dist_ts_web/elements/sio-combox.js +458 -261
  22. package/dist_ts_web/elements/sio-composer.d.ts +48 -0
  23. package/dist_ts_web/elements/sio-composer.js +357 -0
  24. package/dist_ts_web/elements/sio-conversation-selector.d.ts +41 -1
  25. package/dist_ts_web/elements/sio-conversation-selector.js +426 -238
  26. package/dist_ts_web/elements/sio-conversation-view.d.ts +34 -6
  27. package/dist_ts_web/elements/sio-conversation-view.js +738 -564
  28. package/dist_ts_web/elements/sio-dropdown-menu.d.ts +6 -6
  29. package/dist_ts_web/elements/sio-dropdown-menu.js +223 -169
  30. package/dist_ts_web/elements/sio-fab.d.ts +23 -5
  31. package/dist_ts_web/elements/sio-fab.js +259 -235
  32. package/dist_ts_web/elements/sio-glass-toolbar.d.ts +22 -0
  33. package/dist_ts_web/elements/sio-glass-toolbar.js +178 -0
  34. package/dist_ts_web/elements/sio-icon.d.ts +1 -0
  35. package/dist_ts_web/elements/sio-icon.js +254 -94
  36. package/dist_ts_web/elements/sio-image-lightbox.d.ts +3 -4
  37. package/dist_ts_web/elements/sio-image-lightbox.js +282 -191
  38. package/dist_ts_web/elements/sio-inset-list.d.ts +28 -0
  39. package/dist_ts_web/elements/sio-inset-list.js +191 -0
  40. package/dist_ts_web/elements/sio-kbd.d.ts +16 -0
  41. package/dist_ts_web/elements/sio-kbd.js +117 -0
  42. package/dist_ts_web/elements/sio-list-row.d.ts +55 -0
  43. package/dist_ts_web/elements/sio-list-row.js +462 -0
  44. package/dist_ts_web/elements/sio-logo-render.d.ts +42 -0
  45. package/dist_ts_web/elements/sio-logo-render.js +306 -0
  46. package/dist_ts_web/elements/sio-logo.d.ts +64 -0
  47. package/dist_ts_web/elements/sio-logo.js +393 -0
  48. package/dist_ts_web/elements/sio-message-input.d.ts +25 -4
  49. package/dist_ts_web/elements/sio-message-input.js +231 -226
  50. package/dist_ts_web/elements/sio-paper-thumb.d.ts +24 -0
  51. package/dist_ts_web/elements/sio-paper-thumb.js +293 -0
  52. package/dist_ts_web/elements/sio-pdf-viewer.d.ts +2 -0
  53. package/dist_ts_web/elements/sio-pdf-viewer.js +344 -244
  54. package/dist_ts_web/elements/sio-segmented.d.ts +32 -0
  55. package/dist_ts_web/elements/sio-segmented.js +217 -0
  56. package/dist_ts_web/elements/sio-step-timeline.d.ts +28 -0
  57. package/dist_ts_web/elements/sio-step-timeline.js +222 -0
  58. package/dist_ts_web/elements/sio-tab-bar.d.ts +36 -0
  59. package/dist_ts_web/elements/sio-tab-bar.js +232 -0
  60. package/dist_ts_web/elements/sio-unread-badge.d.ts +25 -0
  61. package/dist_ts_web/elements/sio-unread-badge.js +203 -0
  62. package/dist_ts_web/elements/sio-waveform.d.ts +34 -0
  63. package/dist_ts_web/elements/sio-waveform.js +304 -0
  64. package/dist_ts_web/elements/tokens.d.ts +70 -0
  65. package/dist_ts_web/elements/tokens.js +277 -0
  66. package/dist_ts_web/pages/firstpage.d.ts +5 -0
  67. package/dist_ts_web/pages/firstpage.js +21 -2
  68. package/dist_ts_web/pages/mainpage.d.ts +6 -0
  69. package/dist_ts_web/pages/mainpage.js +111 -39
  70. package/{license → license.md} +3 -1
  71. package/package.json +23 -29
  72. package/readme.hints.md +82 -0
  73. package/readme.md +113 -146
  74. package/ts_web/00_commitinfo_data.ts +2 -2
  75. package/ts_web/elements/index.ts +31 -7
  76. package/ts_web/elements/sio-ai-card.ts +175 -0
  77. package/ts_web/elements/sio-avatar.ts +295 -0
  78. package/ts_web/elements/sio-bucket-header.ts +157 -0
  79. package/ts_web/elements/sio-button.ts +149 -127
  80. package/ts_web/elements/sio-channel-rail.ts +256 -0
  81. package/ts_web/elements/sio-chip.ts +134 -0
  82. package/ts_web/elements/sio-cmdk.ts +461 -0
  83. package/ts_web/elements/sio-combox.ts +327 -204
  84. package/ts_web/elements/sio-composer.ts +306 -0
  85. package/ts_web/elements/sio-conversation-selector.ts +350 -228
  86. package/ts_web/elements/sio-conversation-view.ts +573 -457
  87. package/ts_web/elements/sio-dropdown-menu.ts +112 -130
  88. package/ts_web/elements/sio-fab.ts +192 -227
  89. package/ts_web/elements/sio-glass-toolbar.ts +140 -0
  90. package/ts_web/elements/sio-icon.ts +147 -25
  91. package/ts_web/elements/sio-image-lightbox.ts +62 -64
  92. package/ts_web/elements/sio-inset-list.ts +140 -0
  93. package/ts_web/elements/sio-kbd.ts +80 -0
  94. package/ts_web/elements/sio-list-row.ts +393 -0
  95. package/ts_web/elements/sio-logo-render.ts +367 -0
  96. package/ts_web/elements/sio-logo.ts +311 -0
  97. package/ts_web/elements/sio-message-input.ts +142 -221
  98. package/ts_web/elements/sio-paper-thumb.ts +244 -0
  99. package/ts_web/elements/sio-pdf-viewer.ts +58 -60
  100. package/ts_web/elements/sio-segmented.ts +183 -0
  101. package/ts_web/elements/sio-step-timeline.ts +179 -0
  102. package/ts_web/elements/sio-tab-bar.ts +195 -0
  103. package/ts_web/elements/sio-unread-badge.ts +147 -0
  104. package/ts_web/elements/sio-waveform.ts +239 -0
  105. package/ts_web/elements/tokens.ts +297 -0
  106. package/ts_web/pages/firstpage.ts +20 -1
  107. package/ts_web/pages/mainpage.ts +111 -39
  108. package/dist_bundle/bundle.js.map +0 -7
  109. package/dist_ts_web/elements/00colors.d.ts +0 -108
  110. package/dist_ts_web/elements/00colors.js +0 -137
  111. package/dist_ts_web/elements/00fonts.d.ts +0 -60
  112. package/dist_ts_web/elements/00fonts.js +0 -129
  113. package/dist_ts_web/elements/00tokens.d.ts +0 -123
  114. package/dist_ts_web/elements/00tokens.js +0 -176
  115. package/dist_ts_web/elements/sio-conversation-list.d.ts +0 -20
  116. package/dist_ts_web/elements/sio-conversation-list.js +0 -495
  117. package/dist_ts_web/elements/sio-recorder.d.ts +0 -60
  118. package/dist_ts_web/elements/sio-recorder.js +0 -173
  119. package/dist_ts_web/elements/sio-subwidget-conversations.d.ts +0 -16
  120. package/dist_ts_web/elements/sio-subwidget-conversations.js +0 -350
  121. package/dist_ts_web/elements/sio-subwidget-onboardme.d.ts +0 -7
  122. package/dist_ts_web/elements/sio-subwidget-onboardme.js +0 -243
  123. package/dist_watch/bundle.js +0 -81694
  124. package/dist_watch/bundle.js.map +0 -7
  125. package/dist_watch/index.html +0 -25
  126. package/npmextra.json +0 -19
  127. package/ts_web/elements/00colors.ts +0 -164
  128. package/ts_web/elements/00fonts.ts +0 -145
  129. package/ts_web/elements/00tokens.ts +0 -197
  130. 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
+ }