@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,48 @@
1
+ import { DeesElement, type TemplateResult } from '@design.estate/dees-element';
2
+ import './sio-icon.js';
3
+ /** Accent of the circular send button. 'tint' = system blue (default). */
4
+ export type TSioComposerAccent = 'tint' | 'mail' | 'chats' | 'calls' | 'letters';
5
+ /** 'email' swaps the field to type=email with a "you@email.com" placeholder. */
6
+ export type TSioComposerVariant = 'message' | 'email';
7
+ declare global {
8
+ interface HTMLElementTagNameMap {
9
+ 'sio-composer': SioComposer;
10
+ }
11
+ }
12
+ /**
13
+ * sio-composer — the v7 message composer row.
14
+ *
15
+ * Pill input (radius 20, --sio-surface-2, 15px) + circular 32px send
16
+ * button (solid accent, white arrow-up), optional leading attach "+"
17
+ * button, optional auto-expanding multiline field. Email-capture
18
+ * variant for the widget's mail-fallback moment.
19
+ *
20
+ * Events (bubbles, composed):
21
+ * composer-send { text } — send click or Enter (Shift+Enter = newline when auto-expand)
22
+ * composer-attach — attach button click
23
+ *
24
+ * Design sources: SocialIOChannels.jsx (chat composer),
25
+ * SocialIOWidget.jsx (widget composer + email capture).
26
+ */
27
+ export declare class SioComposer extends DeesElement {
28
+ static demo: () => TemplateResult<1>;
29
+ /** Field placeholder; defaults to "Message" (or "you@email.com" for the email variant). */
30
+ accessor placeholder: string;
31
+ /** 'message' (default) or 'email' — email capture swaps input type + placeholder. */
32
+ accessor variant: TSioComposerVariant;
33
+ /** Send-button accent: system tint or a channel color. */
34
+ accessor accent: TSioComposerAccent;
35
+ /** Show the leading circular "+" attach button. */
36
+ accessor attach: boolean;
37
+ /** Multiline field that grows with content (Shift+Enter for newline). */
38
+ accessor autoExpand: boolean;
39
+ /** Current field text. */
40
+ accessor value: string;
41
+ static styles: import("@design.estate/dees-element").CSSResult[];
42
+ render(): TemplateResult;
43
+ updated(): void;
44
+ private handleInput;
45
+ private handleKeydown;
46
+ private handleSend;
47
+ private handleAttach;
48
+ }
@@ -0,0 +1,357 @@
1
+ var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
2
+ function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
3
+ var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
4
+ var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
5
+ var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
6
+ var _, done = false;
7
+ for (var i = decorators.length - 1; i >= 0; i--) {
8
+ var context = {};
9
+ for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
10
+ for (var p in contextIn.access) context.access[p] = contextIn.access[p];
11
+ context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
12
+ var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
13
+ if (kind === "accessor") {
14
+ if (result === void 0) continue;
15
+ if (result === null || typeof result !== "object") throw new TypeError("Object expected");
16
+ if (_ = accept(result.get)) descriptor.get = _;
17
+ if (_ = accept(result.set)) descriptor.set = _;
18
+ if (_ = accept(result.init)) initializers.unshift(_);
19
+ }
20
+ else if (_ = accept(result)) {
21
+ if (kind === "field") initializers.unshift(_);
22
+ else descriptor[key] = _;
23
+ }
24
+ }
25
+ if (target) Object.defineProperty(target, contextIn.name, descriptor);
26
+ done = true;
27
+ };
28
+ var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
29
+ var useValue = arguments.length > 2;
30
+ for (var i = 0; i < initializers.length; i++) {
31
+ value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
32
+ }
33
+ return useValue ? value : void 0;
34
+ };
35
+ import { DeesElement, html, property, customElement, css, } from '@design.estate/dees-element';
36
+ import { sioElementStyles } from './tokens.js';
37
+ import './sio-icon.js';
38
+ /**
39
+ * sio-composer — the v7 message composer row.
40
+ *
41
+ * Pill input (radius 20, --sio-surface-2, 15px) + circular 32px send
42
+ * button (solid accent, white arrow-up), optional leading attach "+"
43
+ * button, optional auto-expanding multiline field. Email-capture
44
+ * variant for the widget's mail-fallback moment.
45
+ *
46
+ * Events (bubbles, composed):
47
+ * composer-send { text } — send click or Enter (Shift+Enter = newline when auto-expand)
48
+ * composer-attach — attach button click
49
+ *
50
+ * Design sources: SocialIOChannels.jsx (chat composer),
51
+ * SocialIOWidget.jsx (widget composer + email capture).
52
+ */
53
+ let SioComposer = (() => {
54
+ let _classDecorators = [customElement('sio-composer')];
55
+ let _classDescriptor;
56
+ let _classExtraInitializers = [];
57
+ let _classThis;
58
+ let _classSuper = DeesElement;
59
+ let _placeholder_decorators;
60
+ let _placeholder_initializers = [];
61
+ let _placeholder_extraInitializers = [];
62
+ let _variant_decorators;
63
+ let _variant_initializers = [];
64
+ let _variant_extraInitializers = [];
65
+ let _accent_decorators;
66
+ let _accent_initializers = [];
67
+ let _accent_extraInitializers = [];
68
+ let _attach_decorators;
69
+ let _attach_initializers = [];
70
+ let _attach_extraInitializers = [];
71
+ let _autoExpand_decorators;
72
+ let _autoExpand_initializers = [];
73
+ let _autoExpand_extraInitializers = [];
74
+ let _value_decorators;
75
+ let _value_initializers = [];
76
+ let _value_extraInitializers = [];
77
+ var SioComposer = class extends _classSuper {
78
+ static { _classThis = this; }
79
+ static {
80
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
81
+ _placeholder_decorators = [property({ type: String })];
82
+ _variant_decorators = [property({ type: String, reflect: true })];
83
+ _accent_decorators = [property({ type: String, reflect: true })];
84
+ _attach_decorators = [property({ type: Boolean, reflect: true })];
85
+ _autoExpand_decorators = [property({ type: Boolean, reflect: true, attribute: 'auto-expand' })];
86
+ _value_decorators = [property({ type: String })];
87
+ __esDecorate(this, null, _placeholder_decorators, { kind: "accessor", name: "placeholder", static: false, private: false, access: { has: obj => "placeholder" in obj, get: obj => obj.placeholder, set: (obj, value) => { obj.placeholder = value; } }, metadata: _metadata }, _placeholder_initializers, _placeholder_extraInitializers);
88
+ __esDecorate(this, null, _variant_decorators, { kind: "accessor", name: "variant", static: false, private: false, access: { has: obj => "variant" in obj, get: obj => obj.variant, set: (obj, value) => { obj.variant = value; } }, metadata: _metadata }, _variant_initializers, _variant_extraInitializers);
89
+ __esDecorate(this, null, _accent_decorators, { kind: "accessor", name: "accent", static: false, private: false, access: { has: obj => "accent" in obj, get: obj => obj.accent, set: (obj, value) => { obj.accent = value; } }, metadata: _metadata }, _accent_initializers, _accent_extraInitializers);
90
+ __esDecorate(this, null, _attach_decorators, { kind: "accessor", name: "attach", static: false, private: false, access: { has: obj => "attach" in obj, get: obj => obj.attach, set: (obj, value) => { obj.attach = value; } }, metadata: _metadata }, _attach_initializers, _attach_extraInitializers);
91
+ __esDecorate(this, null, _autoExpand_decorators, { kind: "accessor", name: "autoExpand", static: false, private: false, access: { has: obj => "autoExpand" in obj, get: obj => obj.autoExpand, set: (obj, value) => { obj.autoExpand = value; } }, metadata: _metadata }, _autoExpand_initializers, _autoExpand_extraInitializers);
92
+ __esDecorate(this, null, _value_decorators, { kind: "accessor", name: "value", static: false, private: false, access: { has: obj => "value" in obj, get: obj => obj.value, set: (obj, value) => { obj.value = value; } }, metadata: _metadata }, _value_initializers, _value_extraInitializers);
93
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
94
+ SioComposer = _classThis = _classDescriptor.value;
95
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
96
+ }
97
+ static demo = () => html `
98
+ <div
99
+ style="display: grid; gap: 18px; max-width: 420px; padding: 24px; background: var(--sio-bg); font-family: var(--sio-font-sf);"
100
+ >
101
+ <div
102
+ style="font-size: 11px; font-weight: 700; letter-spacing: 0.06px; text-transform: uppercase; color: var(--sio-label-3);"
103
+ >
104
+ Chat composer — attach + chats accent
105
+ </div>
106
+ <div style="background: var(--sio-surface); border-radius: 16px; padding-top: 12px;">
107
+ <sio-composer attach accent="chats" placeholder="Message"></sio-composer>
108
+ </div>
109
+
110
+ <div
111
+ style="font-size: 11px; font-weight: 700; letter-spacing: 0.06px; text-transform: uppercase; color: var(--sio-label-3);"
112
+ >
113
+ Widget composer — auto-expand, tint accent
114
+ </div>
115
+ <div style="background: var(--sio-surface); border-radius: 16px; padding-top: 12px;">
116
+ <sio-composer auto-expand placeholder="Write a message…"></sio-composer>
117
+ </div>
118
+
119
+ <div
120
+ style="font-size: 11px; font-weight: 700; letter-spacing: 0.06px; text-transform: uppercase; color: var(--sio-label-3);"
121
+ >
122
+ Email capture — team is away
123
+ </div>
124
+ <div style="background: var(--sio-surface); border-radius: 16px; padding-top: 12px;">
125
+ <sio-composer variant="email"></sio-composer>
126
+ </div>
127
+
128
+ <div
129
+ style="font-size: 11px; font-weight: 700; letter-spacing: 0.06px; text-transform: uppercase; color: var(--sio-label-3);"
130
+ >
131
+ Mail reply — mail accent
132
+ </div>
133
+ <div style="background: var(--sio-surface); border-radius: 16px; padding-top: 12px;">
134
+ <sio-composer attach accent="mail" placeholder="Reply to Lena…"></sio-composer>
135
+ </div>
136
+ </div>
137
+ `;
138
+ #placeholder_accessor_storage = __runInitializers(this, _placeholder_initializers, '');
139
+ /** Field placeholder; defaults to "Message" (or "you@email.com" for the email variant). */
140
+ get placeholder() { return this.#placeholder_accessor_storage; }
141
+ set placeholder(value) { this.#placeholder_accessor_storage = value; }
142
+ #variant_accessor_storage = (__runInitializers(this, _placeholder_extraInitializers), __runInitializers(this, _variant_initializers, 'message'));
143
+ /** 'message' (default) or 'email' — email capture swaps input type + placeholder. */
144
+ get variant() { return this.#variant_accessor_storage; }
145
+ set variant(value) { this.#variant_accessor_storage = value; }
146
+ #accent_accessor_storage = (__runInitializers(this, _variant_extraInitializers), __runInitializers(this, _accent_initializers, 'tint'));
147
+ /** Send-button accent: system tint or a channel color. */
148
+ get accent() { return this.#accent_accessor_storage; }
149
+ set accent(value) { this.#accent_accessor_storage = value; }
150
+ #attach_accessor_storage = (__runInitializers(this, _accent_extraInitializers), __runInitializers(this, _attach_initializers, false));
151
+ /** Show the leading circular "+" attach button. */
152
+ get attach() { return this.#attach_accessor_storage; }
153
+ set attach(value) { this.#attach_accessor_storage = value; }
154
+ #autoExpand_accessor_storage = (__runInitializers(this, _attach_extraInitializers), __runInitializers(this, _autoExpand_initializers, false));
155
+ /** Multiline field that grows with content (Shift+Enter for newline). */
156
+ get autoExpand() { return this.#autoExpand_accessor_storage; }
157
+ set autoExpand(value) { this.#autoExpand_accessor_storage = value; }
158
+ #value_accessor_storage = (__runInitializers(this, _autoExpand_extraInitializers), __runInitializers(this, _value_initializers, ''));
159
+ /** Current field text. */
160
+ get value() { return this.#value_accessor_storage; }
161
+ set value(value) { this.#value_accessor_storage = value; }
162
+ static styles = [
163
+ ...sioElementStyles,
164
+ css `
165
+ :host {
166
+ display: flex;
167
+ gap: 8px;
168
+ align-items: flex-end;
169
+ padding: 8px 10px 14px;
170
+ border-top: var(--sio-hairline) solid var(--sio-separator);
171
+ font-family: var(--sio-font-sf);
172
+ --sio-composer-accent: var(--sio-tint);
173
+ --sio-composer-accent-active: var(--sio-tint-hover);
174
+ }
175
+ :host([accent='mail']) {
176
+ --sio-composer-accent: var(--sio-ch-mail);
177
+ --sio-composer-accent-active: color-mix(in oklab, var(--sio-ch-mail) 85%, var(--sio-label));
178
+ }
179
+ :host([accent='chats']) {
180
+ --sio-composer-accent: var(--sio-ch-chats);
181
+ --sio-composer-accent-active: color-mix(in oklab, var(--sio-ch-chats) 85%, var(--sio-label));
182
+ }
183
+ :host([accent='calls']) {
184
+ --sio-composer-accent: var(--sio-ch-calls);
185
+ --sio-composer-accent-active: color-mix(in oklab, var(--sio-ch-calls) 85%, var(--sio-label));
186
+ }
187
+ :host([accent='letters']) {
188
+ --sio-composer-accent: var(--sio-ch-letters);
189
+ --sio-composer-accent-active: color-mix(in oklab, var(--sio-ch-letters) 85%, var(--sio-label));
190
+ }
191
+
192
+ .attach,
193
+ .send {
194
+ width: 32px;
195
+ height: 32px;
196
+ border-radius: 16px;
197
+ border: none;
198
+ padding: 0;
199
+ margin-bottom: 2px;
200
+ display: flex;
201
+ align-items: center;
202
+ justify-content: center;
203
+ cursor: pointer;
204
+ flex: 0 0 auto;
205
+ font-family: inherit;
206
+ transition: background 120ms ease, color 120ms ease, transform 80ms ease;
207
+ }
208
+
209
+ .attach {
210
+ background: var(--sio-surface-2);
211
+ color: var(--sio-label-3);
212
+ }
213
+ .attach:hover {
214
+ color: var(--sio-label-2);
215
+ }
216
+ .attach:active {
217
+ transform: scale(0.94);
218
+ }
219
+
220
+ .send {
221
+ background: var(--sio-composer-accent);
222
+ color: var(--sio-on-accent, #fff);
223
+ }
224
+ .send:hover:not(:disabled) {
225
+ background: var(--sio-composer-accent-active);
226
+ }
227
+ .send:active:not(:disabled) {
228
+ transform: scale(0.94);
229
+ }
230
+ .send:disabled {
231
+ opacity: 0.4;
232
+ cursor: default;
233
+ }
234
+
235
+ .attach:focus-visible,
236
+ .send:focus-visible {
237
+ outline: 2px solid color-mix(in oklab, var(--sio-composer-accent) 55%, transparent);
238
+ outline-offset: 2px;
239
+ }
240
+
241
+ .field {
242
+ flex: 1;
243
+ min-width: 0;
244
+ box-sizing: border-box;
245
+ min-height: 36px;
246
+ background: var(--sio-surface-2);
247
+ border: none;
248
+ outline: none;
249
+ border-radius: 20px;
250
+ padding: 8px 14px;
251
+ margin: 0;
252
+ font-family: inherit;
253
+ font-size: 15px;
254
+ line-height: 20px;
255
+ letter-spacing: -0.24px;
256
+ color: var(--sio-label);
257
+ }
258
+ .field::placeholder {
259
+ color: var(--sio-label-3);
260
+ }
261
+ .field:focus-visible {
262
+ box-shadow: 0 0 0 3px color-mix(in oklab, var(--sio-composer-accent) 25%, transparent);
263
+ }
264
+
265
+ textarea.field {
266
+ resize: none;
267
+ max-height: 120px;
268
+ overflow-y: auto;
269
+ display: block;
270
+ }
271
+ `,
272
+ ];
273
+ render() {
274
+ const placeholder = this.placeholder || (this.variant === 'email' ? 'you@email.com' : 'Message');
275
+ return html `
276
+ ${this.attach
277
+ ? html `
278
+ <button class="attach" aria-label="Add attachment" @click=${this.handleAttach}>
279
+ <sio-icon icon="plus" size="16" .strokeWidth=${2}></sio-icon>
280
+ </button>
281
+ `
282
+ : html ``}
283
+ ${this.autoExpand
284
+ ? html `
285
+ <textarea
286
+ class="field"
287
+ rows="1"
288
+ placeholder=${placeholder}
289
+ .value=${this.value}
290
+ @input=${this.handleInput}
291
+ @keydown=${this.handleKeydown}
292
+ ></textarea>
293
+ `
294
+ : html `
295
+ <input
296
+ class="field"
297
+ type=${this.variant === 'email' ? 'email' : 'text'}
298
+ placeholder=${placeholder}
299
+ .value=${this.value}
300
+ @input=${this.handleInput}
301
+ @keydown=${this.handleKeydown}
302
+ />
303
+ `}
304
+ <button
305
+ class="send"
306
+ aria-label="Send"
307
+ ?disabled=${!this.value.trim()}
308
+ @click=${this.handleSend}
309
+ >
310
+ <sio-icon icon="arrow-up" size="15" .strokeWidth=${2.2}></sio-icon>
311
+ </button>
312
+ `;
313
+ }
314
+ updated() {
315
+ if (this.autoExpand) {
316
+ const textarea = this.shadowRoot?.querySelector('textarea');
317
+ if (textarea) {
318
+ textarea.style.height = 'auto';
319
+ textarea.style.height = `${Math.min(textarea.scrollHeight, 120)}px`;
320
+ }
321
+ }
322
+ }
323
+ handleInput = (__runInitializers(this, _value_extraInitializers), (event) => {
324
+ this.value = event.target.value;
325
+ });
326
+ handleKeydown = (event) => {
327
+ if (event.key === 'Enter' && !(this.autoExpand && event.shiftKey)) {
328
+ event.preventDefault();
329
+ this.handleSend();
330
+ }
331
+ };
332
+ handleSend = () => {
333
+ const text = this.value.trim();
334
+ if (!text) {
335
+ return;
336
+ }
337
+ this.dispatchEvent(new CustomEvent('composer-send', {
338
+ detail: { text },
339
+ bubbles: true,
340
+ composed: true,
341
+ }));
342
+ this.value = '';
343
+ };
344
+ handleAttach = () => {
345
+ this.dispatchEvent(new CustomEvent('composer-attach', {
346
+ bubbles: true,
347
+ composed: true,
348
+ }));
349
+ };
350
+ static {
351
+ __runInitializers(_classThis, _classExtraInitializers);
352
+ }
353
+ };
354
+ return SioComposer = _classThis;
355
+ })();
356
+ export { SioComposer };
357
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lvLWNvbXBvc2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHNfd2ViL2VsZW1lbnRzL3Npby1jb21wb3Nlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUNMLFdBQVcsRUFDWCxJQUFJLEVBQ0osUUFBUSxFQUNSLGFBQWEsRUFDYixHQUFHLEdBRUosTUFBTSw2QkFBNkIsQ0FBQztBQUNyQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDL0MsT0FBTyxlQUFlLENBQUM7QUFjdkI7Ozs7Ozs7Ozs7Ozs7O0dBY0c7SUFFVSxXQUFXOzRCQUR2QixhQUFhLENBQUMsY0FBYyxDQUFDOzs7O3NCQUNHLFdBQVc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7MkJBQW5CLFNBQVEsV0FBVzs7Ozt1Q0E0Q3pDLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQzttQ0FJMUIsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUM7a0NBSXpDLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDO2tDQUl6QyxRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQztzQ0FJMUMsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsQ0FBQztpQ0FJcEUsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDO1lBbkIzQixzTEFBZ0IsV0FBVyw2QkFBWCxXQUFXLGlHQUFNO1lBSWpDLDBLQUFnQixPQUFPLDZCQUFQLE9BQU8seUZBQWtDO1lBSXpELHVLQUFnQixNQUFNLDZCQUFO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
@@ -1,4 +1,7 @@
1
1
  import { DeesElement, type TemplateResult } from '@design.estate/dees-element';
2
+ import './sio-icon.js';
3
+ import './sio-avatar.js';
4
+ export type TConversationStatus = 'new' | 'waiting' | 'needs-action' | 'resolved';
2
5
  export interface IConversation {
3
6
  id: string;
4
7
  title: string;
@@ -6,19 +9,56 @@ export interface IConversation {
6
9
  time: string;
7
10
  unread?: boolean;
8
11
  avatar?: string;
12
+ status?: TConversationStatus;
13
+ /** agent initials for the avatar circle (falls back to the title's initials) */
14
+ initials?: string;
15
+ /** agent accent color (data-driven, any CSS color) */
16
+ tint?: string;
17
+ }
18
+ /** team member shown in the welcome header's avatar stack */
19
+ export interface ITeamMember {
20
+ initials: string;
21
+ tint: string;
9
22
  }
10
23
  declare global {
11
24
  interface HTMLElementTagNameMap {
12
25
  'sio-conversation-selector': SioConversationSelector;
13
26
  }
14
27
  }
28
+ /**
29
+ * sio-conversation-selector — the widget's home / welcome state
30
+ * (v7 SocialIOWidget.jsx SIOWidgetHome).
31
+ *
32
+ * Gradient tint header (white text) with the 3-avatar team stack,
33
+ * "Hi there 👋 / How can we help?" greeting and the presence line;
34
+ * body cards on radius 14: recent-conversation resume rows, the solid
35
+ * tint "Send us a message" CTA and the FAQ list with 0.5px hairlines.
36
+ *
37
+ * Events (bubbles, composed):
38
+ * conversation-selected { conversation } — resume a recent thread
39
+ * new-conversation — CTA row click
40
+ * faq-selected { question } — FAQ row click
41
+ * close — phablet close chevron
42
+ */
15
43
  export declare class SioConversationSelector extends DeesElement {
16
44
  static demo: () => TemplateResult<1>;
17
45
  accessor conversations: IConversation[];
18
46
  accessor selectedConversationId: string | null;
19
- private accessor searchQuery;
47
+ /** greeting headline, first line */
48
+ accessor greeting: string;
49
+ /** greeting headline, second line */
50
+ accessor tagline: string;
51
+ /** presence line next to the green dot */
52
+ accessor replyNote: string;
53
+ /** team members for the overlapping avatar stack in the header */
54
+ accessor team: ITeamMember[];
55
+ /** FAQ quick answers */
56
+ accessor faqs: string[];
20
57
  static styles: import("@design.estate/dees-element").CSSResult[];
21
58
  render(): TemplateResult;
59
+ private deriveInitials;
22
60
  private selectConversation;
23
61
  private startNewConversation;
62
+ private selectFaq;
63
+ private handleClose;
24
64
  }