@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,462 @@
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, state, customElement, css, } from '@design.estate/dees-element';
36
+ import { sioElementStyles, sioTabularNums } from './tokens.js';
37
+ import './sio-icon.js';
38
+ /**
39
+ * sio-list-row — the universal list row of social.io v7
40
+ * (thread lists, unified feed, search results, person history).
41
+ *
42
+ * Anatomy (design source: SIODesktopRow / SIOUniRow / SIORowMobile):
43
+ * [8px unread-dot gutter] [avatar slot] [line1: title + trailing + time]
44
+ * [line2: subject]
45
+ * [preview — clamped 2/1/0 lines]
46
+ * [meta slot — chips]
47
+ * plus a hover-revealed trailing `actions` slot (triage: done/snooze/draft)
48
+ * and a 0.5px inset hairline between rows (hidden on the last row).
49
+ *
50
+ * Slots:
51
+ * avatar — leading avatar (any element; 30px at cozy/comfortable, 24px compact)
52
+ * line1-trailing — small trailing adornments on line 1 (count, star, paperclip)
53
+ * meta — chip row (lane/channel chips, AI summary chip); hidden at compact
54
+ * actions — desktop triage actions, revealed on hover (opacity 0 -> 1, .12s)
55
+ *
56
+ * Events:
57
+ * row-select — bubbles/composed; fired on click or Enter/Space
58
+ * (not fired for clicks inside the `actions` slot).
59
+ */
60
+ let SioListRow = (() => {
61
+ let _classDecorators = [customElement('sio-list-row')];
62
+ let _classDescriptor;
63
+ let _classExtraInitializers = [];
64
+ let _classThis;
65
+ let _classSuper = DeesElement;
66
+ let _title_decorators;
67
+ let _title_initializers = [];
68
+ let _title_extraInitializers = [];
69
+ let _time_decorators;
70
+ let _time_initializers = [];
71
+ let _time_extraInitializers = [];
72
+ let _subject_decorators;
73
+ let _subject_initializers = [];
74
+ let _subject_extraInitializers = [];
75
+ let _preview_decorators;
76
+ let _preview_initializers = [];
77
+ let _preview_extraInitializers = [];
78
+ let _density_decorators;
79
+ let _density_initializers = [];
80
+ let _density_extraInitializers = [];
81
+ let _unread_decorators;
82
+ let _unread_initializers = [];
83
+ let _unread_extraInitializers = [];
84
+ let _selected_decorators;
85
+ let _selected_initializers = [];
86
+ let _selected_extraInitializers = [];
87
+ let _hasMeta_decorators;
88
+ let _hasMeta_initializers = [];
89
+ let _hasMeta_extraInitializers = [];
90
+ var SioListRow = class extends _classSuper {
91
+ static { _classThis = this; }
92
+ static {
93
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
94
+ _title_decorators = [property({ type: String })];
95
+ _time_decorators = [property({ type: String })];
96
+ _subject_decorators = [property({ type: String })];
97
+ _preview_decorators = [property({ type: String })];
98
+ _density_decorators = [property({ type: String, reflect: true })];
99
+ _unread_decorators = [property({ type: Boolean, reflect: true })];
100
+ _selected_decorators = [property({ type: Boolean, reflect: true })];
101
+ _hasMeta_decorators = [state()];
102
+ __esDecorate(this, null, _title_decorators, { kind: "accessor", name: "title", static: false, private: false, access: { has: obj => "title" in obj, get: obj => obj.title, set: (obj, value) => { obj.title = value; } }, metadata: _metadata }, _title_initializers, _title_extraInitializers);
103
+ __esDecorate(this, null, _time_decorators, { kind: "accessor", name: "time", static: false, private: false, access: { has: obj => "time" in obj, get: obj => obj.time, set: (obj, value) => { obj.time = value; } }, metadata: _metadata }, _time_initializers, _time_extraInitializers);
104
+ __esDecorate(this, null, _subject_decorators, { kind: "accessor", name: "subject", static: false, private: false, access: { has: obj => "subject" in obj, get: obj => obj.subject, set: (obj, value) => { obj.subject = value; } }, metadata: _metadata }, _subject_initializers, _subject_extraInitializers);
105
+ __esDecorate(this, null, _preview_decorators, { kind: "accessor", name: "preview", static: false, private: false, access: { has: obj => "preview" in obj, get: obj => obj.preview, set: (obj, value) => { obj.preview = value; } }, metadata: _metadata }, _preview_initializers, _preview_extraInitializers);
106
+ __esDecorate(this, null, _density_decorators, { kind: "accessor", name: "density", static: false, private: false, access: { has: obj => "density" in obj, get: obj => obj.density, set: (obj, value) => { obj.density = value; } }, metadata: _metadata }, _density_initializers, _density_extraInitializers);
107
+ __esDecorate(this, null, _unread_decorators, { kind: "accessor", name: "unread", static: false, private: false, access: { has: obj => "unread" in obj, get: obj => obj.unread, set: (obj, value) => { obj.unread = value; } }, metadata: _metadata }, _unread_initializers, _unread_extraInitializers);
108
+ __esDecorate(this, null, _selected_decorators, { kind: "accessor", name: "selected", static: false, private: false, access: { has: obj => "selected" in obj, get: obj => obj.selected, set: (obj, value) => { obj.selected = value; } }, metadata: _metadata }, _selected_initializers, _selected_extraInitializers);
109
+ __esDecorate(this, null, _hasMeta_decorators, { kind: "accessor", name: "hasMeta", static: false, private: false, access: { has: obj => "hasMeta" in obj, get: obj => obj.hasMeta, set: (obj, value) => { obj.hasMeta = value; } }, metadata: _metadata }, _hasMeta_initializers, _hasMeta_extraInitializers);
110
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
111
+ SioListRow = _classThis = _classDescriptor.value;
112
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
113
+ }
114
+ static demo = () => html `
115
+ <div style="max-width: 420px; font-family: var(--sio-font-sf); display: flex; flex-direction: column; gap: 18px;">
116
+ <div style="background: var(--sio-surface); border-radius: 12px; overflow: hidden; box-shadow: 0 0 0 var(--sio-hairline) var(--sio-separator);">
117
+ <sio-list-row
118
+ unread
119
+ title="Maya Lindqvist"
120
+ time="09:41"
121
+ subject="Q3 numbers ahead of the board call"
122
+ preview="Attached the deck — the growth slide still needs your revenue split before Thursday. Can you take a pass today?"
123
+ density="comfortable"
124
+ >
125
+ <span
126
+ slot="avatar"
127
+ style="width: 30px; height: 30px; border-radius: 50%; background: var(--sio-ch-mail); color: #fff; display: inline-flex; align-items: center; justify-content: center; font-size: 12px; font-weight: 600; letter-spacing: -0.2px;"
128
+ >ML</span>
129
+ <sio-icon slot="line1-trailing" icon="star" size="11" style="color: var(--sio-yellow);"></sio-icon>
130
+ <span
131
+ slot="meta"
132
+ style="display: inline-flex; align-items: center; gap: 4px; padding: 2px 7px; border-radius: 4px; background: color-mix(in oklab, var(--sio-ch-mail) 14%, transparent); color: var(--sio-ch-mail); font-size: 10.5px; font-weight: 700; letter-spacing: 0.04em; text-transform: uppercase;"
133
+ >Mail</span>
134
+ <span slot="meta" style="font-size: 11px; color: var(--sio-label-3);">3 attachments</span>
135
+ <span slot="actions" title="Done" style="width: 24px; height: 24px; border-radius: 6px; color: var(--sio-green); display: inline-flex; align-items: center; justify-content: center;"><sio-icon icon="check" size="13"></sio-icon></span>
136
+ <span slot="actions" title="Snooze" style="width: 24px; height: 24px; border-radius: 6px; color: var(--sio-orange); display: inline-flex; align-items: center; justify-content: center;"><sio-icon icon="clock" size="13"></sio-icon></span>
137
+ <span slot="actions" title="AI draft" style="width: 24px; height: 24px; border-radius: 6px; color: var(--sio-tint); display: inline-flex; align-items: center; justify-content: center;"><sio-icon icon="sparkles" size="13"></sio-icon></span>
138
+ </sio-list-row>
139
+ <sio-list-row
140
+ selected
141
+ title="Jonas Weber"
142
+ time="08:12"
143
+ subject="Launch copy — final review"
144
+ preview="I folded your edits in. One open question on the pricing line."
145
+ density="cozy"
146
+ >
147
+ <span
148
+ slot="avatar"
149
+ style="width: 30px; height: 30px; border-radius: 50%; background: var(--sio-ch-chats); color: #fff; display: inline-flex; align-items: center; justify-content: center; font-size: 12px; font-weight: 600; letter-spacing: -0.2px;"
150
+ >JW</span>
151
+ </sio-list-row>
152
+ <sio-list-row
153
+ unread
154
+ title="Deutsche Post"
155
+ time="Yesterday"
156
+ subject="Letter scanned: Finanzamt München"
157
+ preview="2 pages · OCR ready · deadline detected: Jul 24"
158
+ density="cozy"
159
+ >
160
+ <span
161
+ slot="avatar"
162
+ style="width: 30px; height: 30px; border-radius: 50%; background: var(--sio-ch-letters); color: #fff; display: inline-flex; align-items: center; justify-content: center; font-size: 12px; font-weight: 600; letter-spacing: -0.2px;"
163
+ >DP</span>
164
+ <span slot="line1-trailing" style="font-size: 11px; color: var(--sio-label-3); font-variant-numeric: tabular-nums;">2</span>
165
+ </sio-list-row>
166
+ <sio-list-row
167
+ title="Ana Ferreira"
168
+ time="Tue"
169
+ subject="Missed call · voicemail (0:42)"
170
+ density="compact"
171
+ >
172
+ <span
173
+ slot="avatar"
174
+ style="width: 24px; height: 24px; border-radius: 50%; background: var(--sio-ch-calls); color: #fff; display: inline-flex; align-items: center; justify-content: center; font-size: 10px; font-weight: 600; letter-spacing: -0.2px;"
175
+ >AF</span>
176
+ </sio-list-row>
177
+ </div>
178
+ </div>
179
+ `;
180
+ #title_accessor_storage = __runInitializers(this, _title_initializers, '');
181
+ get title() { return this.#title_accessor_storage; }
182
+ set title(value) { this.#title_accessor_storage = value; }
183
+ #time_accessor_storage = (__runInitializers(this, _title_extraInitializers), __runInitializers(this, _time_initializers, ''));
184
+ /** Trailing timestamp on line 1 — rendered with tabular-nums. */
185
+ get time() { return this.#time_accessor_storage; }
186
+ set time(value) { this.#time_accessor_storage = value; }
187
+ #subject_accessor_storage = (__runInitializers(this, _time_extraInitializers), __runInitializers(this, _subject_initializers, ''));
188
+ /** Line 2 — subject / one-line summary. Tinted when the row is selected. */
189
+ get subject() { return this.#subject_accessor_storage; }
190
+ set subject(value) { this.#subject_accessor_storage = value; }
191
+ #preview_accessor_storage = (__runInitializers(this, _subject_extraInitializers), __runInitializers(this, _preview_initializers, ''));
192
+ /** Optional preview text — clamped to 2 lines (comfortable) / 1 line (cozy), hidden at compact. */
193
+ get preview() { return this.#preview_accessor_storage; }
194
+ set preview(value) { this.#preview_accessor_storage = value; }
195
+ #density_accessor_storage = (__runInitializers(this, _preview_extraInitializers), __runInitializers(this, _density_initializers, 'cozy'));
196
+ get density() { return this.#density_accessor_storage; }
197
+ set density(value) { this.#density_accessor_storage = value; }
198
+ #unread_accessor_storage = (__runInitializers(this, _density_extraInitializers), __runInitializers(this, _unread_initializers, false));
199
+ /** Shows the 8px tint dot in the leading gutter. */
200
+ get unread() { return this.#unread_accessor_storage; }
201
+ set unread(value) { this.#unread_accessor_storage = value; }
202
+ #selected_accessor_storage = (__runInitializers(this, _unread_extraInitializers), __runInitializers(this, _selected_initializers, false));
203
+ /** Selected state — tint-soft background, tinted subject line. */
204
+ get selected() { return this.#selected_accessor_storage; }
205
+ set selected(value) { this.#selected_accessor_storage = value; }
206
+ #hasMeta_accessor_storage = (__runInitializers(this, _selected_extraInitializers), __runInitializers(this, _hasMeta_initializers, false));
207
+ get hasMeta() { return this.#hasMeta_accessor_storage; }
208
+ set hasMeta(value) { this.#hasMeta_accessor_storage = value; }
209
+ static styles = [
210
+ ...sioElementStyles,
211
+ css `
212
+ :host {
213
+ display: block;
214
+ position: relative;
215
+ cursor: default;
216
+ background: transparent;
217
+ transition: background 0.08s ease;
218
+ font-family: var(--sio-font-sf);
219
+ /* inset for the inter-row hairline: 14 pad + 8 gutter + 10 gap + 30 avatar + 10 gap */
220
+ --sio-row-hairline-inset: 72px;
221
+ }
222
+ :host(:hover) {
223
+ background: var(--sio-surface-2);
224
+ }
225
+ :host([selected]) {
226
+ background: var(--sio-tint-soft);
227
+ }
228
+ :host([selected]) .subject {
229
+ color: var(--sio-tint);
230
+ }
231
+ :host([density='compact']) {
232
+ --sio-row-hairline-inset: 66px;
233
+ }
234
+
235
+ .row {
236
+ position: relative;
237
+ display: flex;
238
+ gap: 10px;
239
+ padding: 11px 14px;
240
+ min-height: var(--sio-row-cozy);
241
+ box-sizing: border-box;
242
+ align-items: flex-start;
243
+ outline: none;
244
+ }
245
+ :host([density='comfortable']) .row {
246
+ padding: 14px;
247
+ min-height: var(--sio-row-comfortable);
248
+ }
249
+ :host([density='compact']) .row {
250
+ padding: 8px 14px;
251
+ min-height: var(--sio-row-compact);
252
+ }
253
+ .row:focus-visible {
254
+ box-shadow: inset 0 0 0 2px color-mix(in oklab, var(--sio-tint) 40%, transparent);
255
+ }
256
+
257
+ /* 8px unread-dot gutter */
258
+ .gutter {
259
+ width: 8px;
260
+ flex-shrink: 0;
261
+ padding-top: 8px;
262
+ display: flex;
263
+ justify-content: center;
264
+ }
265
+ .unread-dot {
266
+ width: 8px;
267
+ height: 8px;
268
+ border-radius: 50%;
269
+ background: var(--sio-tint);
270
+ flex-shrink: 0;
271
+ }
272
+
273
+ .avatar {
274
+ flex-shrink: 0;
275
+ display: flex;
276
+ align-items: flex-start;
277
+ }
278
+
279
+ .main {
280
+ flex: 1;
281
+ min-width: 0;
282
+ }
283
+
284
+ .line1 {
285
+ display: flex;
286
+ align-items: baseline;
287
+ gap: 6px;
288
+ }
289
+ .title {
290
+ flex: 1;
291
+ font-size: 13px;
292
+ font-weight: 500;
293
+ color: var(--sio-label);
294
+ letter-spacing: -0.1px;
295
+ overflow: hidden;
296
+ text-overflow: ellipsis;
297
+ white-space: nowrap;
298
+ }
299
+ :host([unread]) .title {
300
+ font-weight: 600;
301
+ }
302
+ .time {
303
+ font-size: 11px;
304
+ color: var(--sio-label-3);
305
+ ${sioTabularNums}
306
+ }
307
+ slot[name='line1-trailing'] {
308
+ display: contents;
309
+ }
310
+
311
+ .subject {
312
+ font-size: 13px;
313
+ font-weight: 400;
314
+ color: var(--sio-label-3);
315
+ overflow: hidden;
316
+ text-overflow: ellipsis;
317
+ white-space: nowrap;
318
+ margin-top: 1px;
319
+ }
320
+ :host([unread]) .subject {
321
+ font-weight: 500;
322
+ color: var(--sio-label);
323
+ }
324
+
325
+ .preview {
326
+ font-size: 12px;
327
+ color: var(--sio-label-3);
328
+ margin-top: 2px;
329
+ line-height: 1.4;
330
+ overflow: hidden;
331
+ display: -webkit-box;
332
+ -webkit-box-orient: vertical;
333
+ -webkit-line-clamp: 1;
334
+ }
335
+ :host([density='comfortable']) .preview {
336
+ -webkit-line-clamp: 2;
337
+ }
338
+ :host([density='compact']) .preview {
339
+ display: none;
340
+ }
341
+
342
+ .meta {
343
+ display: none;
344
+ gap: 6px;
345
+ align-items: center;
346
+ margin-top: 5px;
347
+ }
348
+ .meta.has-content {
349
+ display: flex;
350
+ }
351
+ :host([density='compact']) .meta {
352
+ display: none;
353
+ }
354
+
355
+ /* hover-revealed triage actions — desktop */
356
+ .actions {
357
+ position: absolute;
358
+ right: 10px;
359
+ top: 7px;
360
+ z-index: 5;
361
+ display: flex;
362
+ gap: 2px;
363
+ padding: 3px;
364
+ border-radius: 9px;
365
+ background: var(--sio-glass-bg);
366
+ backdrop-filter: blur(28px) saturate(180%);
367
+ -webkit-backdrop-filter: blur(28px) saturate(180%);
368
+ border: var(--sio-hairline) solid var(--sio-glass-border);
369
+ box-shadow: 0 4px 14px rgba(0, 0, 0, 0.14);
370
+ opacity: 0;
371
+ pointer-events: none;
372
+ transition: opacity 0.12s ease;
373
+ }
374
+ :host(:hover) .actions {
375
+ opacity: 1;
376
+ pointer-events: auto;
377
+ }
378
+
379
+ /* 0.5px inset hairline between rows */
380
+ .hairline {
381
+ position: absolute;
382
+ bottom: 0;
383
+ left: var(--sio-row-hairline-inset);
384
+ right: 0;
385
+ height: var(--sio-hairline);
386
+ background: var(--sio-separator);
387
+ pointer-events: none;
388
+ }
389
+ :host(:last-child) .hairline {
390
+ display: none;
391
+ }
392
+ `,
393
+ ];
394
+ render() {
395
+ return html `
396
+ <div
397
+ class="row"
398
+ role="option"
399
+ tabindex="0"
400
+ aria-selected=${this.selected ? 'true' : 'false'}
401
+ @click=${this.handleSelect}
402
+ @keydown=${this.handleKeydown}
403
+ >
404
+ <div class="gutter">
405
+ ${this.unread ? html `<div class="unread-dot"></div>` : html ``}
406
+ </div>
407
+ <div class="avatar">
408
+ <slot name="avatar"></slot>
409
+ </div>
410
+ <div class="main">
411
+ <div class="line1">
412
+ <span class="title">${this.title}</span>
413
+ <slot name="line1-trailing"></slot>
414
+ ${this.time ? html `<span class="time">${this.time}</span>` : html ``}
415
+ </div>
416
+ ${this.subject ? html `<div class="subject">${this.subject}</div>` : html ``}
417
+ ${this.preview ? html `<div class="preview">${this.preview}</div>` : html ``}
418
+ <div class="meta ${this.hasMeta ? 'has-content' : ''}">
419
+ <slot name="meta" @slotchange=${this.handleMetaSlotChange}></slot>
420
+ </div>
421
+ </div>
422
+ <div class="actions">
423
+ <slot name="actions"></slot>
424
+ </div>
425
+ <div class="hairline"></div>
426
+ </div>
427
+ `;
428
+ }
429
+ handleMetaSlotChange(eventArg) {
430
+ const slotElement = eventArg.target;
431
+ this.hasMeta = slotElement.assignedElements().length > 0;
432
+ }
433
+ handleSelect(eventArg) {
434
+ // clicks inside the triage actions belong to the consumer's own handlers
435
+ const actionsContainer = this.shadowRoot?.querySelector('.actions');
436
+ if (actionsContainer && eventArg.composedPath().includes(actionsContainer)) {
437
+ return;
438
+ }
439
+ this.dispatchEvent(new CustomEvent('row-select', {
440
+ detail: { selected: this.selected },
441
+ bubbles: true,
442
+ composed: true,
443
+ }));
444
+ }
445
+ handleKeydown(eventArg) {
446
+ if (eventArg.key === 'Enter' || eventArg.key === ' ') {
447
+ eventArg.preventDefault();
448
+ this.handleSelect(eventArg);
449
+ }
450
+ }
451
+ constructor() {
452
+ super(...arguments);
453
+ __runInitializers(this, _hasMeta_extraInitializers);
454
+ }
455
+ static {
456
+ __runInitializers(_classThis, _classExtraInitializers);
457
+ }
458
+ };
459
+ return SioListRow = _classThis;
460
+ })();
461
+ export { SioListRow };
462
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lvLWxpc3Qtcm93LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHNfd2ViL2VsZW1lbnRzL3Npby1saXN0LXJvdy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUNMLFdBQVcsRUFDWCxJQUFJLEVBQ0osUUFBUSxFQUNSLEtBQUssRUFDTCxhQUFhLEVBQ2IsR0FBRyxHQUVKLE1BQU0sNkJBQTZCLENBQUM7QUFDckMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGNBQWMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMvRCxPQUFPLGVBQWUsQ0FBQztBQWN2Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcUJHO0lBRVUsVUFBVTs0QkFEdEIsYUFBYSxDQUFDLGNBQWMsQ0FBQzs7OztzQkFDRSxXQUFXOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzBCQUFuQixTQUFRLFdBQVc7Ozs7aUNBb0V4QyxRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7Z0NBSTFCLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQzttQ0FJMUIsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDO21DQUkxQixRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7bUNBRzFCLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDO2tDQUl6QyxRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQztvQ0FJMUMsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUM7bUNBRzFDLEtBQUssRUFBRTtZQXpCUixvS0FBZ0IsS0FBSyw2QkFBTCxLQUFLLHFGQUFNO1lB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
@@ -1,20 +1,41 @@
1
1
  import { DeesElement, type TemplateResult } from '@design.estate/dees-element';
2
+ import { type TSioComposerVariant, type TSioComposerAccent } from './sio-composer.js';
2
3
  declare global {
3
4
  interface HTMLElementTagNameMap {
4
5
  'sio-message-input': SioMessageInput;
5
6
  }
6
7
  }
8
+ /**
9
+ * sio-message-input — the widget's composer row, a thin shell around
10
+ * sio-composer (v7 SocialIOWidget.jsx composer).
11
+ *
12
+ * Adds the widget-level concerns on top of the composer primitive:
13
+ * a hidden file input behind the composer's attach button, the
14
+ * email-capture variant for the away state, and the keyboard-visibility
15
+ * focus events the combox uses on phablet.
16
+ *
17
+ * Events (bubbles, composed):
18
+ * send-message { text, attachments: File[] }
19
+ * files-selected { files: File[] }
20
+ * input-focus / input-blur — phablet keyboard handling
21
+ */
7
22
  export declare class SioMessageInput extends DeesElement {
8
23
  static demo: () => TemplateResult<1>;
24
+ /** field placeholder; message variant defaults to "Write a message…", email to "you@email.com" */
9
25
  accessor placeholder: string;
10
26
  accessor disabled: boolean;
11
- private accessor messageText;
27
+ /** 'message' (default) or 'email' — the away-state email capture */
28
+ accessor variant: TSioComposerVariant;
29
+ /** send-button accent, forwarded to sio-composer */
30
+ accessor accent: TSioComposerAccent;
31
+ /** show the composer's attach "+" button (opens the file picker) */
32
+ accessor attach: boolean;
12
33
  private accessor pendingAttachments;
13
34
  static styles: import("@design.estate/dees-element").CSSResult[];
14
35
  render(): TemplateResult;
15
- private handleInput;
16
- private handleKeyDown;
17
- private sendMessage;
36
+ private handleComposerSend;
37
+ private handleFocus;
38
+ private handleBlur;
18
39
  private openFileSelector;
19
40
  private handleFileSelect;
20
41
  focus(): void;