@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.
Files changed (124) hide show
  1. package/.smartconfig.json +51 -0
  2. package/dist_bundle/bundle.js +5450 -3267
  3. package/dist_ts_web/00_commitinfo_data.js +3 -3
  4. package/dist_ts_web/elements/index.d.ts +20 -3
  5. package/dist_ts_web/elements/index.js +27 -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 +37 -0
  15. package/dist_ts_web/elements/sio-channel-rail.js +275 -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-message-input.d.ts +25 -4
  45. package/dist_ts_web/elements/sio-message-input.js +231 -226
  46. package/dist_ts_web/elements/sio-paper-thumb.d.ts +24 -0
  47. package/dist_ts_web/elements/sio-paper-thumb.js +293 -0
  48. package/dist_ts_web/elements/sio-pdf-viewer.d.ts +2 -0
  49. package/dist_ts_web/elements/sio-pdf-viewer.js +344 -244
  50. package/dist_ts_web/elements/sio-segmented.d.ts +32 -0
  51. package/dist_ts_web/elements/sio-segmented.js +217 -0
  52. package/dist_ts_web/elements/sio-step-timeline.d.ts +28 -0
  53. package/dist_ts_web/elements/sio-step-timeline.js +222 -0
  54. package/dist_ts_web/elements/sio-tab-bar.d.ts +36 -0
  55. package/dist_ts_web/elements/sio-tab-bar.js +232 -0
  56. package/dist_ts_web/elements/sio-unread-badge.d.ts +25 -0
  57. package/dist_ts_web/elements/sio-unread-badge.js +203 -0
  58. package/dist_ts_web/elements/sio-waveform.d.ts +34 -0
  59. package/dist_ts_web/elements/sio-waveform.js +304 -0
  60. package/dist_ts_web/elements/tokens.d.ts +70 -0
  61. package/dist_ts_web/elements/tokens.js +277 -0
  62. package/dist_ts_web/pages/firstpage.d.ts +5 -0
  63. package/dist_ts_web/pages/firstpage.js +21 -2
  64. package/dist_ts_web/pages/mainpage.d.ts +6 -0
  65. package/dist_ts_web/pages/mainpage.js +111 -39
  66. package/{license → license.md} +3 -1
  67. package/package.json +23 -29
  68. package/readme.hints.md +81 -0
  69. package/readme.md +85 -151
  70. package/ts_web/00_commitinfo_data.ts +2 -2
  71. package/ts_web/elements/index.ts +30 -7
  72. package/ts_web/elements/sio-ai-card.ts +175 -0
  73. package/ts_web/elements/sio-avatar.ts +295 -0
  74. package/ts_web/elements/sio-bucket-header.ts +157 -0
  75. package/ts_web/elements/sio-button.ts +149 -127
  76. package/ts_web/elements/sio-channel-rail.ts +243 -0
  77. package/ts_web/elements/sio-chip.ts +134 -0
  78. package/ts_web/elements/sio-cmdk.ts +461 -0
  79. package/ts_web/elements/sio-combox.ts +327 -204
  80. package/ts_web/elements/sio-composer.ts +306 -0
  81. package/ts_web/elements/sio-conversation-selector.ts +350 -228
  82. package/ts_web/elements/sio-conversation-view.ts +573 -457
  83. package/ts_web/elements/sio-dropdown-menu.ts +112 -130
  84. package/ts_web/elements/sio-fab.ts +192 -227
  85. package/ts_web/elements/sio-glass-toolbar.ts +140 -0
  86. package/ts_web/elements/sio-icon.ts +147 -25
  87. package/ts_web/elements/sio-image-lightbox.ts +62 -64
  88. package/ts_web/elements/sio-inset-list.ts +140 -0
  89. package/ts_web/elements/sio-kbd.ts +80 -0
  90. package/ts_web/elements/sio-list-row.ts +393 -0
  91. package/ts_web/elements/sio-message-input.ts +142 -221
  92. package/ts_web/elements/sio-paper-thumb.ts +244 -0
  93. package/ts_web/elements/sio-pdf-viewer.ts +58 -60
  94. package/ts_web/elements/sio-segmented.ts +183 -0
  95. package/ts_web/elements/sio-step-timeline.ts +179 -0
  96. package/ts_web/elements/sio-tab-bar.ts +195 -0
  97. package/ts_web/elements/sio-unread-badge.ts +147 -0
  98. package/ts_web/elements/sio-waveform.ts +239 -0
  99. package/ts_web/elements/tokens.ts +297 -0
  100. package/ts_web/pages/firstpage.ts +20 -1
  101. package/ts_web/pages/mainpage.ts +111 -39
  102. package/dist_bundle/bundle.js.map +0 -7
  103. package/dist_ts_web/elements/00colors.d.ts +0 -108
  104. package/dist_ts_web/elements/00colors.js +0 -137
  105. package/dist_ts_web/elements/00fonts.d.ts +0 -60
  106. package/dist_ts_web/elements/00fonts.js +0 -129
  107. package/dist_ts_web/elements/00tokens.d.ts +0 -123
  108. package/dist_ts_web/elements/00tokens.js +0 -176
  109. package/dist_ts_web/elements/sio-conversation-list.d.ts +0 -20
  110. package/dist_ts_web/elements/sio-conversation-list.js +0 -495
  111. package/dist_ts_web/elements/sio-recorder.d.ts +0 -60
  112. package/dist_ts_web/elements/sio-recorder.js +0 -173
  113. package/dist_ts_web/elements/sio-subwidget-conversations.d.ts +0 -16
  114. package/dist_ts_web/elements/sio-subwidget-conversations.js +0 -350
  115. package/dist_ts_web/elements/sio-subwidget-onboardme.d.ts +0 -7
  116. package/dist_ts_web/elements/sio-subwidget-onboardme.js +0 -243
  117. package/dist_watch/bundle.js +0 -81694
  118. package/dist_watch/bundle.js.map +0 -7
  119. package/dist_watch/index.html +0 -25
  120. package/npmextra.json +0 -19
  121. package/ts_web/elements/00colors.ts +0 -164
  122. package/ts_web/elements/00fonts.ts +0 -145
  123. package/ts_web/elements/00tokens.ts +0 -197
  124. 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
+ }