@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.
- package/.smartconfig.json +51 -0
- package/dist_bundle/bundle.js +5455 -3248
- package/dist_ts_web/00_commitinfo_data.js +3 -3
- package/dist_ts_web/elements/index.d.ts +21 -3
- package/dist_ts_web/elements/index.js +28 -7
- package/dist_ts_web/elements/sio-ai-card.d.ts +39 -0
- package/dist_ts_web/elements/sio-ai-card.js +229 -0
- package/dist_ts_web/elements/sio-avatar.d.ts +46 -0
- package/dist_ts_web/elements/sio-avatar.js +379 -0
- package/dist_ts_web/elements/sio-bucket-header.d.ts +36 -0
- package/dist_ts_web/elements/sio-bucket-header.js +197 -0
- package/dist_ts_web/elements/sio-button.d.ts +7 -3
- package/dist_ts_web/elements/sio-button.js +253 -152
- package/dist_ts_web/elements/sio-channel-rail.d.ts +38 -0
- package/dist_ts_web/elements/sio-channel-rail.js +288 -0
- package/dist_ts_web/elements/sio-chip.d.ts +25 -0
- package/dist_ts_web/elements/sio-chip.js +188 -0
- package/dist_ts_web/elements/sio-cmdk.d.ts +59 -0
- package/dist_ts_web/elements/sio-cmdk.js +471 -0
- package/dist_ts_web/elements/sio-combox.d.ts +55 -1
- package/dist_ts_web/elements/sio-combox.js +458 -261
- package/dist_ts_web/elements/sio-composer.d.ts +48 -0
- package/dist_ts_web/elements/sio-composer.js +357 -0
- package/dist_ts_web/elements/sio-conversation-selector.d.ts +41 -1
- package/dist_ts_web/elements/sio-conversation-selector.js +426 -238
- package/dist_ts_web/elements/sio-conversation-view.d.ts +34 -6
- package/dist_ts_web/elements/sio-conversation-view.js +738 -564
- package/dist_ts_web/elements/sio-dropdown-menu.d.ts +6 -6
- package/dist_ts_web/elements/sio-dropdown-menu.js +223 -169
- package/dist_ts_web/elements/sio-fab.d.ts +23 -5
- package/dist_ts_web/elements/sio-fab.js +259 -235
- package/dist_ts_web/elements/sio-glass-toolbar.d.ts +22 -0
- package/dist_ts_web/elements/sio-glass-toolbar.js +178 -0
- package/dist_ts_web/elements/sio-icon.d.ts +1 -0
- package/dist_ts_web/elements/sio-icon.js +254 -94
- package/dist_ts_web/elements/sio-image-lightbox.d.ts +3 -4
- package/dist_ts_web/elements/sio-image-lightbox.js +282 -191
- package/dist_ts_web/elements/sio-inset-list.d.ts +28 -0
- package/dist_ts_web/elements/sio-inset-list.js +191 -0
- package/dist_ts_web/elements/sio-kbd.d.ts +16 -0
- package/dist_ts_web/elements/sio-kbd.js +117 -0
- package/dist_ts_web/elements/sio-list-row.d.ts +55 -0
- package/dist_ts_web/elements/sio-list-row.js +462 -0
- package/dist_ts_web/elements/sio-logo-render.d.ts +42 -0
- package/dist_ts_web/elements/sio-logo-render.js +306 -0
- package/dist_ts_web/elements/sio-logo.d.ts +64 -0
- package/dist_ts_web/elements/sio-logo.js +393 -0
- package/dist_ts_web/elements/sio-message-input.d.ts +25 -4
- package/dist_ts_web/elements/sio-message-input.js +231 -226
- package/dist_ts_web/elements/sio-paper-thumb.d.ts +24 -0
- package/dist_ts_web/elements/sio-paper-thumb.js +293 -0
- package/dist_ts_web/elements/sio-pdf-viewer.d.ts +2 -0
- package/dist_ts_web/elements/sio-pdf-viewer.js +344 -244
- package/dist_ts_web/elements/sio-segmented.d.ts +32 -0
- package/dist_ts_web/elements/sio-segmented.js +217 -0
- package/dist_ts_web/elements/sio-step-timeline.d.ts +28 -0
- package/dist_ts_web/elements/sio-step-timeline.js +222 -0
- package/dist_ts_web/elements/sio-tab-bar.d.ts +36 -0
- package/dist_ts_web/elements/sio-tab-bar.js +232 -0
- package/dist_ts_web/elements/sio-unread-badge.d.ts +25 -0
- package/dist_ts_web/elements/sio-unread-badge.js +203 -0
- package/dist_ts_web/elements/sio-waveform.d.ts +34 -0
- package/dist_ts_web/elements/sio-waveform.js +304 -0
- package/dist_ts_web/elements/tokens.d.ts +70 -0
- package/dist_ts_web/elements/tokens.js +277 -0
- package/dist_ts_web/pages/firstpage.d.ts +5 -0
- package/dist_ts_web/pages/firstpage.js +21 -2
- package/dist_ts_web/pages/mainpage.d.ts +6 -0
- package/dist_ts_web/pages/mainpage.js +111 -39
- package/{license → license.md} +3 -1
- package/package.json +23 -29
- package/readme.hints.md +82 -0
- package/readme.md +113 -146
- package/ts_web/00_commitinfo_data.ts +2 -2
- package/ts_web/elements/index.ts +31 -7
- package/ts_web/elements/sio-ai-card.ts +175 -0
- package/ts_web/elements/sio-avatar.ts +295 -0
- package/ts_web/elements/sio-bucket-header.ts +157 -0
- package/ts_web/elements/sio-button.ts +149 -127
- package/ts_web/elements/sio-channel-rail.ts +256 -0
- package/ts_web/elements/sio-chip.ts +134 -0
- package/ts_web/elements/sio-cmdk.ts +461 -0
- package/ts_web/elements/sio-combox.ts +327 -204
- package/ts_web/elements/sio-composer.ts +306 -0
- package/ts_web/elements/sio-conversation-selector.ts +350 -228
- package/ts_web/elements/sio-conversation-view.ts +573 -457
- package/ts_web/elements/sio-dropdown-menu.ts +112 -130
- package/ts_web/elements/sio-fab.ts +192 -227
- package/ts_web/elements/sio-glass-toolbar.ts +140 -0
- package/ts_web/elements/sio-icon.ts +147 -25
- package/ts_web/elements/sio-image-lightbox.ts +62 -64
- package/ts_web/elements/sio-inset-list.ts +140 -0
- package/ts_web/elements/sio-kbd.ts +80 -0
- package/ts_web/elements/sio-list-row.ts +393 -0
- package/ts_web/elements/sio-logo-render.ts +367 -0
- package/ts_web/elements/sio-logo.ts +311 -0
- package/ts_web/elements/sio-message-input.ts +142 -221
- package/ts_web/elements/sio-paper-thumb.ts +244 -0
- package/ts_web/elements/sio-pdf-viewer.ts +58 -60
- package/ts_web/elements/sio-segmented.ts +183 -0
- package/ts_web/elements/sio-step-timeline.ts +179 -0
- package/ts_web/elements/sio-tab-bar.ts +195 -0
- package/ts_web/elements/sio-unread-badge.ts +147 -0
- package/ts_web/elements/sio-waveform.ts +239 -0
- package/ts_web/elements/tokens.ts +297 -0
- package/ts_web/pages/firstpage.ts +20 -1
- package/ts_web/pages/mainpage.ts +111 -39
- package/dist_bundle/bundle.js.map +0 -7
- package/dist_ts_web/elements/00colors.d.ts +0 -108
- package/dist_ts_web/elements/00colors.js +0 -137
- package/dist_ts_web/elements/00fonts.d.ts +0 -60
- package/dist_ts_web/elements/00fonts.js +0 -129
- package/dist_ts_web/elements/00tokens.d.ts +0 -123
- package/dist_ts_web/elements/00tokens.js +0 -176
- package/dist_ts_web/elements/sio-conversation-list.d.ts +0 -20
- package/dist_ts_web/elements/sio-conversation-list.js +0 -495
- package/dist_ts_web/elements/sio-recorder.d.ts +0 -60
- package/dist_ts_web/elements/sio-recorder.js +0 -173
- package/dist_ts_web/elements/sio-subwidget-conversations.d.ts +0 -16
- package/dist_ts_web/elements/sio-subwidget-conversations.js +0 -350
- package/dist_ts_web/elements/sio-subwidget-onboardme.d.ts +0 -7
- package/dist_ts_web/elements/sio-subwidget-onboardme.js +0 -243
- package/dist_watch/bundle.js +0 -81694
- package/dist_watch/bundle.js.map +0 -7
- package/dist_watch/index.html +0 -25
- package/npmextra.json +0 -19
- package/ts_web/elements/00colors.ts +0 -164
- package/ts_web/elements/00fonts.ts +0 -145
- package/ts_web/elements/00tokens.ts +0 -197
- package/ts_web/elements/sio-recorder.ts +0 -213
|
@@ -0,0 +1,471 @@
|
|
|
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, css, customElement, property, state, } from '@design.estate/dees-element';
|
|
36
|
+
import { sioElementStyles } from './tokens.js';
|
|
37
|
+
import './sio-icon.js';
|
|
38
|
+
import './sio-kbd.js';
|
|
39
|
+
let SioCmdk = (() => {
|
|
40
|
+
let _classDecorators = [customElement('sio-cmdk')];
|
|
41
|
+
let _classDescriptor;
|
|
42
|
+
let _classExtraInitializers = [];
|
|
43
|
+
let _classThis;
|
|
44
|
+
let _classSuper = DeesElement;
|
|
45
|
+
let _sections_decorators;
|
|
46
|
+
let _sections_initializers = [];
|
|
47
|
+
let _sections_extraInitializers = [];
|
|
48
|
+
let _open_decorators;
|
|
49
|
+
let _open_initializers = [];
|
|
50
|
+
let _open_extraInitializers = [];
|
|
51
|
+
let _query_decorators;
|
|
52
|
+
let _query_initializers = [];
|
|
53
|
+
let _query_extraInitializers = [];
|
|
54
|
+
let _placeholder_decorators;
|
|
55
|
+
let _placeholder_initializers = [];
|
|
56
|
+
let _placeholder_extraInitializers = [];
|
|
57
|
+
let _activeIndex_decorators;
|
|
58
|
+
let _activeIndex_initializers = [];
|
|
59
|
+
let _activeIndex_extraInitializers = [];
|
|
60
|
+
var SioCmdk = class extends _classSuper {
|
|
61
|
+
static { _classThis = this; }
|
|
62
|
+
static {
|
|
63
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
64
|
+
_sections_decorators = [property({ type: Array })];
|
|
65
|
+
_open_decorators = [property({ type: Boolean, reflect: true })];
|
|
66
|
+
_query_decorators = [property({ type: String })];
|
|
67
|
+
_placeholder_decorators = [property({ type: String })];
|
|
68
|
+
_activeIndex_decorators = [state()];
|
|
69
|
+
__esDecorate(this, null, _sections_decorators, { kind: "accessor", name: "sections", static: false, private: false, access: { has: obj => "sections" in obj, get: obj => obj.sections, set: (obj, value) => { obj.sections = value; } }, metadata: _metadata }, _sections_initializers, _sections_extraInitializers);
|
|
70
|
+
__esDecorate(this, null, _open_decorators, { kind: "accessor", name: "open", static: false, private: false, access: { has: obj => "open" in obj, get: obj => obj.open, set: (obj, value) => { obj.open = value; } }, metadata: _metadata }, _open_initializers, _open_extraInitializers);
|
|
71
|
+
__esDecorate(this, null, _query_decorators, { kind: "accessor", name: "query", static: false, private: false, access: { has: obj => "query" in obj, get: obj => obj.query, set: (obj, value) => { obj.query = value; } }, metadata: _metadata }, _query_initializers, _query_extraInitializers);
|
|
72
|
+
__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);
|
|
73
|
+
__esDecorate(this, null, _activeIndex_decorators, { kind: "accessor", name: "activeIndex", static: false, private: false, access: { has: obj => "activeIndex" in obj, get: obj => obj.activeIndex, set: (obj, value) => { obj.activeIndex = value; } }, metadata: _metadata }, _activeIndex_initializers, _activeIndex_extraInitializers);
|
|
74
|
+
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
|
|
75
|
+
SioCmdk = _classThis = _classDescriptor.value;
|
|
76
|
+
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
77
|
+
}
|
|
78
|
+
static demo = () => {
|
|
79
|
+
const demoSections = [
|
|
80
|
+
{
|
|
81
|
+
name: 'Actions',
|
|
82
|
+
items: [
|
|
83
|
+
{ id: 'action.reply', icon: 'reply', label: 'Reply', shortcut: 'R' },
|
|
84
|
+
{ id: 'action.reply-all', icon: 'reply-all', label: 'Reply all', shortcut: '⇧R' },
|
|
85
|
+
{ id: 'action.forward', icon: 'forward', label: 'Forward', shortcut: 'F' },
|
|
86
|
+
{ id: 'action.archive', icon: 'archive', label: 'Archive', shortcut: 'E' },
|
|
87
|
+
],
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
name: 'Jump to',
|
|
91
|
+
items: [
|
|
92
|
+
{ id: 'goto.inbox-people', icon: 'inbox', label: 'Inbox · People', shortcut: 'G I' },
|
|
93
|
+
{ id: 'goto.starred', icon: 'star', label: 'Starred', shortcut: 'G S' },
|
|
94
|
+
{ id: 'goto.sent', icon: 'send', label: 'Sent', shortcut: 'G T' },
|
|
95
|
+
],
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
name: 'Snooze',
|
|
99
|
+
items: [
|
|
100
|
+
{ id: 'snooze.tomorrow', icon: 'sunset', label: 'Tomorrow morning', shortcut: 'H 1' },
|
|
101
|
+
{ id: 'snooze.evening', icon: 'clock', label: 'This evening', shortcut: 'H 2' },
|
|
102
|
+
{ id: 'snooze.next-week', icon: 'calendar', label: 'Next week', shortcut: 'H 3' },
|
|
103
|
+
],
|
|
104
|
+
},
|
|
105
|
+
];
|
|
106
|
+
// The wrapper's transform contains the fixed-position overlay so each
|
|
107
|
+
// frame keeps its own palette (same trick as the prototype's mac window).
|
|
108
|
+
const frameStyle = `
|
|
109
|
+
position: relative; transform: translateZ(0); overflow: hidden;
|
|
110
|
+
border-radius: 12px; background: var(--sio-bg);
|
|
111
|
+
box-shadow: 0 0 0 0.5px var(--sio-separator);
|
|
112
|
+
`;
|
|
113
|
+
const mockRow = (from, subject, time) => html `
|
|
114
|
+
<div style="display: flex; align-items: center; gap: 12px; padding: 12px 18px; border-bottom: 0.5px solid var(--sio-separator);">
|
|
115
|
+
<span style="width: 8px; height: 8px; border-radius: 50%; background: var(--sio-tint); flex-shrink: 0;"></span>
|
|
116
|
+
<span style="width: 140px; font-size: 14px; font-weight: 600; color: var(--sio-label); white-space: nowrap; overflow: hidden; text-overflow: ellipsis;">${from}</span>
|
|
117
|
+
<span style="flex: 1; font-size: 14px; color: var(--sio-label-2); white-space: nowrap; overflow: hidden; text-overflow: ellipsis;">${subject}</span>
|
|
118
|
+
<span style="font-size: 12px; color: var(--sio-label-3); font-variant-numeric: tabular-nums;">${time}</span>
|
|
119
|
+
</div>
|
|
120
|
+
`;
|
|
121
|
+
const mockWindow = html `
|
|
122
|
+
<div style="height: 44px; display: flex; align-items: center; gap: 8px; padding: 0 18px; border-bottom: 0.5px solid var(--sio-separator); background: var(--sio-surface);">
|
|
123
|
+
<span style="width: 12px; height: 12px; border-radius: 50%; background: #FF5F57;"></span>
|
|
124
|
+
<span style="width: 12px; height: 12px; border-radius: 50%; background: #FEBC2E;"></span>
|
|
125
|
+
<span style="width: 12px; height: 12px; border-radius: 50%; background: #28C840;"></span>
|
|
126
|
+
<span style="margin-left: 10px; font-size: 15px; font-weight: 700; letter-spacing: -0.3px; color: var(--sio-label);">People</span>
|
|
127
|
+
<span style="font-size: 12px; font-weight: 500; color: var(--sio-label-3);">3 unread</span>
|
|
128
|
+
</div>
|
|
129
|
+
${mockRow('Maya Lindqvist', 'Launch copy — final pass before Thursday', '09:41')}
|
|
130
|
+
${mockRow('Jonas Weber', 'Re: Offsite agenda + travel booking', 'Yesterday')}
|
|
131
|
+
${mockRow('Priya Nair', 'Voicemail transcript: callback re: contract', 'Tue')}
|
|
132
|
+
`;
|
|
133
|
+
return html `
|
|
134
|
+
<div style="display: flex; flex-direction: column; gap: 28px; font-family: var(--sio-font-sf);">
|
|
135
|
+
<div>
|
|
136
|
+
<div style="font-size: 12px; font-weight: 600; letter-spacing: 0.4px; text-transform: uppercase; color: var(--sio-label-3); margin: 0 0 10px 2px;">
|
|
137
|
+
⌘K over the desktop — grouped results, first row active
|
|
138
|
+
</div>
|
|
139
|
+
<div style="${frameStyle} height: 480px;">
|
|
140
|
+
<div>${mockWindow}</div>
|
|
141
|
+
<sio-cmdk
|
|
142
|
+
open
|
|
143
|
+
.sections=${demoSections}
|
|
144
|
+
@cmdk-run=${(eventArg) => console.log('cmdk-run', eventArg.detail.id)}
|
|
145
|
+
@cmdk-close=${() => console.log('cmdk-close')}
|
|
146
|
+
></sio-cmdk>
|
|
147
|
+
</div>
|
|
148
|
+
</div>
|
|
149
|
+
<div>
|
|
150
|
+
<div style="font-size: 12px; font-weight: 600; letter-spacing: 0.4px; text-transform: uppercase; color: var(--sio-label-3); margin: 0 0 10px 2px;">
|
|
151
|
+
Typed query "re" — sections filter down, empty groups drop out
|
|
152
|
+
</div>
|
|
153
|
+
<div style="${frameStyle} height: 340px;">
|
|
154
|
+
<div>${mockWindow}</div>
|
|
155
|
+
<sio-cmdk open query="re" .sections=${demoSections}></sio-cmdk>
|
|
156
|
+
</div>
|
|
157
|
+
</div>
|
|
158
|
+
</div>
|
|
159
|
+
`;
|
|
160
|
+
};
|
|
161
|
+
#sections_accessor_storage = __runInitializers(this, _sections_initializers, []);
|
|
162
|
+
// --------------------------------------------------------------------- api
|
|
163
|
+
/** Grouped commands; filtered live against `query`. */
|
|
164
|
+
get sections() { return this.#sections_accessor_storage; }
|
|
165
|
+
set sections(value) { this.#sections_accessor_storage = value; }
|
|
166
|
+
#open_accessor_storage = (__runInitializers(this, _sections_extraInitializers), __runInitializers(this, _open_initializers, false));
|
|
167
|
+
/** Host-owned visibility flag (wire ⌘K / cmdk-close in the app shell). */
|
|
168
|
+
get open() { return this.#open_accessor_storage; }
|
|
169
|
+
set open(value) { this.#open_accessor_storage = value; }
|
|
170
|
+
#query_accessor_storage = (__runInitializers(this, _open_extraInitializers), __runInitializers(this, _query_initializers, ''));
|
|
171
|
+
/** Current filter text — settable to preseed, updated as the user types. */
|
|
172
|
+
get query() { return this.#query_accessor_storage; }
|
|
173
|
+
set query(value) { this.#query_accessor_storage = value; }
|
|
174
|
+
#placeholder_accessor_storage = (__runInitializers(this, _query_extraInitializers), __runInitializers(this, _placeholder_initializers, 'Type a command…'));
|
|
175
|
+
get placeholder() { return this.#placeholder_accessor_storage; }
|
|
176
|
+
set placeholder(value) { this.#placeholder_accessor_storage = value; }
|
|
177
|
+
#activeIndex_accessor_storage = (__runInitializers(this, _placeholder_extraInitializers), __runInitializers(this, _activeIndex_initializers, 0));
|
|
178
|
+
get activeIndex() { return this.#activeIndex_accessor_storage; }
|
|
179
|
+
set activeIndex(value) { this.#activeIndex_accessor_storage = value; }
|
|
180
|
+
// ------------------------------------------------------------------ styles
|
|
181
|
+
static styles = [
|
|
182
|
+
...sioElementStyles,
|
|
183
|
+
css `
|
|
184
|
+
:host {
|
|
185
|
+
display: none;
|
|
186
|
+
}
|
|
187
|
+
:host([open]) {
|
|
188
|
+
display: block;
|
|
189
|
+
position: fixed;
|
|
190
|
+
inset: 0;
|
|
191
|
+
z-index: 100;
|
|
192
|
+
}
|
|
193
|
+
/* scrim + shadow values are spec'd black in the v7 prototype
|
|
194
|
+
(socialio.css .sio-cmdk*) — they are not theme surfaces. */
|
|
195
|
+
.backdrop {
|
|
196
|
+
position: absolute;
|
|
197
|
+
inset: 0;
|
|
198
|
+
background: rgba(0, 0, 0, 0.32);
|
|
199
|
+
backdrop-filter: blur(6px);
|
|
200
|
+
-webkit-backdrop-filter: blur(6px);
|
|
201
|
+
display: flex;
|
|
202
|
+
justify-content: center;
|
|
203
|
+
align-items: flex-start;
|
|
204
|
+
padding-top: 14vh;
|
|
205
|
+
}
|
|
206
|
+
.panel {
|
|
207
|
+
width: 640px;
|
|
208
|
+
max-width: calc(100% - 80px);
|
|
209
|
+
background: var(--sio-surface);
|
|
210
|
+
border-radius: var(--sio-radius-lg);
|
|
211
|
+
box-shadow:
|
|
212
|
+
0 30px 80px rgba(0, 0, 0, 0.35),
|
|
213
|
+
0 0 0 var(--sio-hairline) var(--sio-separator);
|
|
214
|
+
overflow: hidden;
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
/* search row */
|
|
218
|
+
.search-row {
|
|
219
|
+
display: flex;
|
|
220
|
+
align-items: center;
|
|
221
|
+
gap: 10px;
|
|
222
|
+
padding: 14px 16px;
|
|
223
|
+
border-bottom: var(--sio-hairline) solid var(--sio-separator);
|
|
224
|
+
}
|
|
225
|
+
.search-icon {
|
|
226
|
+
color: var(--sio-label-3);
|
|
227
|
+
flex-shrink: 0;
|
|
228
|
+
}
|
|
229
|
+
.search-input {
|
|
230
|
+
flex: 1;
|
|
231
|
+
min-width: 0;
|
|
232
|
+
padding: 0;
|
|
233
|
+
border: none;
|
|
234
|
+
outline: none;
|
|
235
|
+
background: transparent;
|
|
236
|
+
font-family: var(--sio-font-sf);
|
|
237
|
+
font-size: 15px;
|
|
238
|
+
line-height: 20px;
|
|
239
|
+
letter-spacing: -0.24px;
|
|
240
|
+
color: var(--sio-label);
|
|
241
|
+
}
|
|
242
|
+
.search-input::placeholder {
|
|
243
|
+
color: var(--sio-label-4);
|
|
244
|
+
}
|
|
245
|
+
.esc-hint {
|
|
246
|
+
flex-shrink: 0;
|
|
247
|
+
cursor: pointer;
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
/* grouped results */
|
|
251
|
+
.results {
|
|
252
|
+
padding: 6px 0;
|
|
253
|
+
max-height: 360px;
|
|
254
|
+
overflow-y: auto;
|
|
255
|
+
overscroll-behavior: contain;
|
|
256
|
+
}
|
|
257
|
+
.section {
|
|
258
|
+
padding: 4px 0;
|
|
259
|
+
}
|
|
260
|
+
.section-header {
|
|
261
|
+
padding: 6px 18px;
|
|
262
|
+
font-size: 11px;
|
|
263
|
+
line-height: 13px;
|
|
264
|
+
font-weight: 600;
|
|
265
|
+
letter-spacing: 0.06px;
|
|
266
|
+
text-transform: uppercase;
|
|
267
|
+
color: var(--sio-label-3);
|
|
268
|
+
}
|
|
269
|
+
.row {
|
|
270
|
+
display: flex;
|
|
271
|
+
align-items: center;
|
|
272
|
+
gap: 12px;
|
|
273
|
+
padding: 8px 18px;
|
|
274
|
+
color: var(--sio-label);
|
|
275
|
+
cursor: default;
|
|
276
|
+
transition: background 0.08s ease;
|
|
277
|
+
}
|
|
278
|
+
.row.active {
|
|
279
|
+
background: var(--sio-tint-soft);
|
|
280
|
+
color: var(--sio-tint);
|
|
281
|
+
}
|
|
282
|
+
.glyph {
|
|
283
|
+
width: 18px;
|
|
284
|
+
display: inline-flex;
|
|
285
|
+
align-items: center;
|
|
286
|
+
justify-content: center;
|
|
287
|
+
flex-shrink: 0;
|
|
288
|
+
color: inherit;
|
|
289
|
+
}
|
|
290
|
+
.label {
|
|
291
|
+
flex: 1;
|
|
292
|
+
min-width: 0;
|
|
293
|
+
font-size: 14px;
|
|
294
|
+
line-height: 19px;
|
|
295
|
+
letter-spacing: -0.15px;
|
|
296
|
+
white-space: nowrap;
|
|
297
|
+
overflow: hidden;
|
|
298
|
+
text-overflow: ellipsis;
|
|
299
|
+
}
|
|
300
|
+
.row sio-kbd {
|
|
301
|
+
flex-shrink: 0;
|
|
302
|
+
}
|
|
303
|
+
.empty {
|
|
304
|
+
padding: 18px;
|
|
305
|
+
text-align: center;
|
|
306
|
+
font-size: 14px;
|
|
307
|
+
color: var(--sio-label-3);
|
|
308
|
+
}
|
|
309
|
+
`,
|
|
310
|
+
];
|
|
311
|
+
// --------------------------------------------------------------- filtering
|
|
312
|
+
getFilteredSections() {
|
|
313
|
+
const normalizedQuery = this.query.trim().toLowerCase();
|
|
314
|
+
if (!normalizedQuery) {
|
|
315
|
+
return this.sections;
|
|
316
|
+
}
|
|
317
|
+
return this.sections
|
|
318
|
+
.map((sectionArg) => ({
|
|
319
|
+
...sectionArg,
|
|
320
|
+
items: sectionArg.items.filter((itemArg) => itemArg.label.toLowerCase().includes(normalizedQuery)),
|
|
321
|
+
}))
|
|
322
|
+
.filter((sectionArg) => sectionArg.items.length > 0);
|
|
323
|
+
}
|
|
324
|
+
getFlatItems() {
|
|
325
|
+
return this.getFilteredSections().flatMap((sectionArg) => sectionArg.items);
|
|
326
|
+
}
|
|
327
|
+
// -------------------------------------------------------------- lifecycle
|
|
328
|
+
willUpdate() {
|
|
329
|
+
// keep the active row inside the (possibly shrunken) filtered list
|
|
330
|
+
const totalItems = this.getFlatItems().length;
|
|
331
|
+
if (this.activeIndex >= totalItems) {
|
|
332
|
+
this.activeIndex = totalItems > 0 ? totalItems - 1 : 0;
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
updated(changedPropertiesArg) {
|
|
336
|
+
if (changedPropertiesArg.has('open') && this.open) {
|
|
337
|
+
const inputElement = this.shadowRoot?.querySelector('.search-input');
|
|
338
|
+
inputElement?.focus({ preventScroll: true });
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
// ------------------------------------------------------------ interaction
|
|
342
|
+
handleInput(eventArg) {
|
|
343
|
+
this.query = eventArg.target.value;
|
|
344
|
+
this.activeIndex = 0;
|
|
345
|
+
}
|
|
346
|
+
handleKeydown(eventArg) {
|
|
347
|
+
const flatItems = this.getFlatItems();
|
|
348
|
+
switch (eventArg.key) {
|
|
349
|
+
case 'ArrowDown':
|
|
350
|
+
eventArg.preventDefault();
|
|
351
|
+
if (flatItems.length > 0) {
|
|
352
|
+
this.activeIndex = (this.activeIndex + 1) % flatItems.length;
|
|
353
|
+
this.scrollActiveRowIntoView();
|
|
354
|
+
}
|
|
355
|
+
break;
|
|
356
|
+
case 'ArrowUp':
|
|
357
|
+
eventArg.preventDefault();
|
|
358
|
+
if (flatItems.length > 0) {
|
|
359
|
+
this.activeIndex = (this.activeIndex - 1 + flatItems.length) % flatItems.length;
|
|
360
|
+
this.scrollActiveRowIntoView();
|
|
361
|
+
}
|
|
362
|
+
break;
|
|
363
|
+
case 'Enter':
|
|
364
|
+
eventArg.preventDefault();
|
|
365
|
+
if (flatItems[this.activeIndex]) {
|
|
366
|
+
this.runItem(flatItems[this.activeIndex]);
|
|
367
|
+
}
|
|
368
|
+
break;
|
|
369
|
+
case 'Escape':
|
|
370
|
+
eventArg.preventDefault();
|
|
371
|
+
this.close();
|
|
372
|
+
break;
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
async scrollActiveRowIntoView() {
|
|
376
|
+
await this.updateComplete;
|
|
377
|
+
this.shadowRoot?.querySelector('.row.active')?.scrollIntoView({ block: 'nearest' });
|
|
378
|
+
}
|
|
379
|
+
handleBackdropClick(eventArg) {
|
|
380
|
+
if (eventArg.target === eventArg.currentTarget) {
|
|
381
|
+
this.close();
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
runItem(itemArg) {
|
|
385
|
+
this.dispatchEvent(new CustomEvent('cmdk-run', {
|
|
386
|
+
detail: { id: itemArg.id },
|
|
387
|
+
bubbles: true,
|
|
388
|
+
composed: true,
|
|
389
|
+
}));
|
|
390
|
+
}
|
|
391
|
+
close() {
|
|
392
|
+
this.dispatchEvent(new CustomEvent('cmdk-close', {
|
|
393
|
+
bubbles: true,
|
|
394
|
+
composed: true,
|
|
395
|
+
}));
|
|
396
|
+
}
|
|
397
|
+
// ----------------------------------------------------------------- render
|
|
398
|
+
render() {
|
|
399
|
+
if (!this.open) {
|
|
400
|
+
return html ``;
|
|
401
|
+
}
|
|
402
|
+
const filteredSections = this.getFilteredSections();
|
|
403
|
+
let runningIndex = -1;
|
|
404
|
+
return html `
|
|
405
|
+
<div class="backdrop" @click=${this.handleBackdropClick} @keydown=${this.handleKeydown}>
|
|
406
|
+
<div class="panel" role="dialog" aria-modal="true" aria-label="Command palette">
|
|
407
|
+
<div class="search-row">
|
|
408
|
+
<sio-icon class="search-icon" icon="search" size="16"></sio-icon>
|
|
409
|
+
<input
|
|
410
|
+
class="search-input"
|
|
411
|
+
type="text"
|
|
412
|
+
.value=${this.query}
|
|
413
|
+
placeholder=${this.placeholder}
|
|
414
|
+
spellcheck="false"
|
|
415
|
+
autocomplete="off"
|
|
416
|
+
aria-label="Search commands"
|
|
417
|
+
@input=${this.handleInput}
|
|
418
|
+
/>
|
|
419
|
+
<sio-kbd class="esc-hint" @click=${this.close}>esc</sio-kbd>
|
|
420
|
+
</div>
|
|
421
|
+
<div class="results" role="listbox" aria-label="Commands">
|
|
422
|
+
${filteredSections.length === 0
|
|
423
|
+
? html `<div class="empty">No matching commands</div>`
|
|
424
|
+
: filteredSections.map((sectionArg) => html `
|
|
425
|
+
<div class="section">
|
|
426
|
+
<div class="section-header">${sectionArg.name}</div>
|
|
427
|
+
${sectionArg.items.map((itemArg) => {
|
|
428
|
+
runningIndex += 1;
|
|
429
|
+
const itemIndex = runningIndex;
|
|
430
|
+
const isActive = itemIndex === this.activeIndex;
|
|
431
|
+
return html `
|
|
432
|
+
<div
|
|
433
|
+
class="row ${isActive ? 'active' : ''}"
|
|
434
|
+
role="option"
|
|
435
|
+
aria-selected=${isActive ? 'true' : 'false'}
|
|
436
|
+
@pointerenter=${() => {
|
|
437
|
+
this.activeIndex = itemIndex;
|
|
438
|
+
}}
|
|
439
|
+
@click=${() => this.runItem(itemArg)}
|
|
440
|
+
>
|
|
441
|
+
<span class="glyph">
|
|
442
|
+
${itemArg.icon
|
|
443
|
+
? html `<sio-icon icon=${itemArg.icon} size="16"></sio-icon>`
|
|
444
|
+
: html ``}
|
|
445
|
+
</span>
|
|
446
|
+
<span class="label">${itemArg.label}</span>
|
|
447
|
+
${itemArg.shortcut
|
|
448
|
+
? html `<sio-kbd>${itemArg.shortcut}</sio-kbd>`
|
|
449
|
+
: html ``}
|
|
450
|
+
</div>
|
|
451
|
+
`;
|
|
452
|
+
})}
|
|
453
|
+
</div>
|
|
454
|
+
`)}
|
|
455
|
+
</div>
|
|
456
|
+
</div>
|
|
457
|
+
</div>
|
|
458
|
+
`;
|
|
459
|
+
}
|
|
460
|
+
constructor() {
|
|
461
|
+
super(...arguments);
|
|
462
|
+
__runInitializers(this, _activeIndex_extraInitializers);
|
|
463
|
+
}
|
|
464
|
+
static {
|
|
465
|
+
__runInitializers(_classThis, _classExtraInitializers);
|
|
466
|
+
}
|
|
467
|
+
};
|
|
468
|
+
return SioCmdk = _classThis;
|
|
469
|
+
})();
|
|
470
|
+
export { SioCmdk };
|
|
471
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lvLWNtZGsuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90c193ZWIvZWxlbWVudHMvc2lvLWNtZGsudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLE9BQU8sRUFDTCxXQUFXLEVBQ1gsSUFBSSxFQUNKLEdBQUcsRUFDSCxhQUFhLEVBQ2IsUUFBUSxFQUNSLEtBQUssR0FFTixNQUFNLDZCQUE2QixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMvQyxPQUFPLGVBQWUsQ0FBQztBQUN2QixPQUFPLGNBQWMsQ0FBQztJQXdDVCxPQUFPOzRCQURuQixhQUFhLENBQUMsVUFBVSxDQUFDOzs7O3NCQUNHLFdBQVc7Ozs7Ozs7Ozs7Ozs7Ozs7dUJBQW5CLFNBQVEsV0FBVzs7OztvQ0F3RnJDLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQztnQ0FJekIsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUM7aUNBSTFDLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQzt1Q0FHMUIsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDO3VDQUcxQixLQUFLLEVBQUU7WUFiUiw2S0FBZ0IsUUFBUSw2QkFBUixRQUFRLDJGQUF5QjtZQUlqRCxpS0FBZ0IsSUFBSSw2QkFBSixJQUFJLG1GQUFTO1lBSTdCLG9LQUFnQixLQUFLLDZCQUFMLEtBQUsscUZBQU07WUFHM0Isc0xBQWdCLFdBQVcsNkJBQVgsV0FBVyxpR0FBcUI7WUFHaEQsc0xBQWlCLFdBQVcsNkJBQVgsV0FBVyxpR0FBSztZQXZHbkMsNktBeVpDOzs7O1FBeFpRLE1BQU0sQ0FBQyxJQUFJLEdBQUcsR0FBRyxFQUFFO1lBQ3hCLE1BQU0sWUFBWSxHQUFzQjtnQkFD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
|
|
@@ -1,20 +1,74 @@
|
|
|
1
1
|
import { DeesElement, type TemplateResult } from '@design.estate/dees-element';
|
|
2
|
+
import { type IMessage } from './sio-conversation-view.js';
|
|
2
3
|
declare global {
|
|
3
4
|
interface HTMLElementTagNameMap {
|
|
4
5
|
'sio-combox': SioCombox;
|
|
5
6
|
}
|
|
6
7
|
}
|
|
8
|
+
/**
|
|
9
|
+
* sio-combox — the widget panel (v7 SocialIOWidget.jsx SIOWidgetShell).
|
|
10
|
+
*
|
|
11
|
+
* 380×620 panel, radius 20 on --sio-surface, floating shadow with a
|
|
12
|
+
* 0.5px ring, anchored above the sio-fab launcher. Slides between the
|
|
13
|
+
* home/welcome state (sio-conversation-selector) and the conversation
|
|
14
|
+
* state (sio-conversation-view); the away/email-fallback state is the
|
|
15
|
+
* conversation state with `away` set. Every state carries the centered
|
|
16
|
+
* "Powered by social.io" footer with the mini brand glyph.
|
|
17
|
+
*
|
|
18
|
+
* Singleton API: SioCombox.createOnBody() / getInstance(), plus
|
|
19
|
+
* open() / close() / toggle() / getIsOpen(). Full-screen on phablet.
|
|
20
|
+
*/
|
|
7
21
|
export declare class SioCombox extends DeesElement {
|
|
8
22
|
static demo: () => TemplateResult<1>;
|
|
9
|
-
|
|
23
|
+
private static instance;
|
|
24
|
+
/**
|
|
25
|
+
* Creates and appends a singleton combox to document.body
|
|
26
|
+
*/
|
|
27
|
+
static createOnBody(): SioCombox;
|
|
28
|
+
/**
|
|
29
|
+
* Gets the singleton instance if it exists
|
|
30
|
+
*/
|
|
31
|
+
static getInstance(): SioCombox | null;
|
|
32
|
+
/** team is away — the conversation state falls back to email capture */
|
|
33
|
+
accessor away: boolean;
|
|
10
34
|
private accessor selectedConversationId;
|
|
35
|
+
private accessor isKeyboardVisible;
|
|
36
|
+
private accessor isOpen;
|
|
37
|
+
private keyboardBlurTimeout?;
|
|
11
38
|
private accessor conversations;
|
|
12
39
|
private accessor messages;
|
|
13
40
|
constructor();
|
|
41
|
+
connectedCallback(): Promise<void>;
|
|
42
|
+
disconnectedCallback(): Promise<void>;
|
|
43
|
+
private handleInputFocus;
|
|
44
|
+
private handleInputBlur;
|
|
45
|
+
updated(changedProperties: Map<string, any>): void;
|
|
46
|
+
/**
|
|
47
|
+
* Opens the combox
|
|
48
|
+
*/
|
|
49
|
+
open(): void;
|
|
50
|
+
/**
|
|
51
|
+
* Closes the combox
|
|
52
|
+
*/
|
|
53
|
+
close(): void;
|
|
54
|
+
/**
|
|
55
|
+
* Toggles the combox open/closed state
|
|
56
|
+
*/
|
|
57
|
+
toggle(): void;
|
|
58
|
+
/**
|
|
59
|
+
* Returns whether the combox is currently open
|
|
60
|
+
*/
|
|
61
|
+
getIsOpen(): boolean;
|
|
14
62
|
static styles: import("@design.estate/dees-element").CSSResult[];
|
|
15
63
|
render(): TemplateResult;
|
|
16
64
|
private handleConversationSelected;
|
|
65
|
+
private handleNewConversation;
|
|
17
66
|
private handleBack;
|
|
18
67
|
private handleSendMessage;
|
|
68
|
+
/**
|
|
69
|
+
* Append an inbound (support-side) message to a conversation.
|
|
70
|
+
* The host application calls this when a reply arrives.
|
|
71
|
+
*/
|
|
72
|
+
receiveMessage(conversationId: string, message: IMessage): void;
|
|
19
73
|
private handleOpenImage;
|
|
20
74
|
}
|