@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,379 @@
|
|
|
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 } from './tokens.js';
|
|
37
|
+
import './sio-icon.js';
|
|
38
|
+
/**
|
|
39
|
+
* channel badge recipes — 18px glyph circle bottom-right of the avatar,
|
|
40
|
+
* solid channel color with a 2px surface ring (v7 SIOUniRow).
|
|
41
|
+
*/
|
|
42
|
+
const channelBadgeRecipes = {
|
|
43
|
+
mail: { icon: 'envelope', color: 'var(--sio-ch-mail)' },
|
|
44
|
+
chats: { icon: 'message-circle', color: 'var(--sio-ch-chats)' },
|
|
45
|
+
calls: { icon: 'phone', color: 'var(--sio-ch-calls)' },
|
|
46
|
+
letters: { icon: 'file-text', color: 'var(--sio-ch-letters)' },
|
|
47
|
+
};
|
|
48
|
+
/**
|
|
49
|
+
* sio-avatar — initials on a tinted circle (v7 `.sio-avatar`).
|
|
50
|
+
*
|
|
51
|
+
* The tint is data-driven (each person carries their own accent color),
|
|
52
|
+
* so it is passed in as a prop; it defaults to the system tint token.
|
|
53
|
+
* Optional presence dot (online) and channel badge, both ringed with
|
|
54
|
+
* 2px of surface color so they read on top of list rows.
|
|
55
|
+
*/
|
|
56
|
+
let SioAvatar = (() => {
|
|
57
|
+
let _classDecorators = [customElement('sio-avatar')];
|
|
58
|
+
let _classDescriptor;
|
|
59
|
+
let _classExtraInitializers = [];
|
|
60
|
+
let _classThis;
|
|
61
|
+
let _classSuper = DeesElement;
|
|
62
|
+
let _initials_decorators;
|
|
63
|
+
let _initials_initializers = [];
|
|
64
|
+
let _initials_extraInitializers = [];
|
|
65
|
+
let _tint_decorators;
|
|
66
|
+
let _tint_initializers = [];
|
|
67
|
+
let _tint_extraInitializers = [];
|
|
68
|
+
let _size_decorators;
|
|
69
|
+
let _size_initializers = [];
|
|
70
|
+
let _size_extraInitializers = [];
|
|
71
|
+
let _presence_decorators;
|
|
72
|
+
let _presence_initializers = [];
|
|
73
|
+
let _presence_extraInitializers = [];
|
|
74
|
+
let _channelBadge_decorators;
|
|
75
|
+
let _channelBadge_initializers = [];
|
|
76
|
+
let _channelBadge_extraInitializers = [];
|
|
77
|
+
var SioAvatar = 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
|
+
_initials_decorators = [property({ type: String })];
|
|
82
|
+
_tint_decorators = [property({ type: String })];
|
|
83
|
+
_size_decorators = [property({ type: Number })];
|
|
84
|
+
_presence_decorators = [property({ type: String })];
|
|
85
|
+
_channelBadge_decorators = [property({ type: String })];
|
|
86
|
+
__esDecorate(this, null, _initials_decorators, { kind: "accessor", name: "initials", static: false, private: false, access: { has: obj => "initials" in obj, get: obj => obj.initials, set: (obj, value) => { obj.initials = value; } }, metadata: _metadata }, _initials_initializers, _initials_extraInitializers);
|
|
87
|
+
__esDecorate(this, null, _tint_decorators, { kind: "accessor", name: "tint", static: false, private: false, access: { has: obj => "tint" in obj, get: obj => obj.tint, set: (obj, value) => { obj.tint = value; } }, metadata: _metadata }, _tint_initializers, _tint_extraInitializers);
|
|
88
|
+
__esDecorate(this, null, _size_decorators, { kind: "accessor", name: "size", static: false, private: false, access: { has: obj => "size" in obj, get: obj => obj.size, set: (obj, value) => { obj.size = value; } }, metadata: _metadata }, _size_initializers, _size_extraInitializers);
|
|
89
|
+
__esDecorate(this, null, _presence_decorators, { kind: "accessor", name: "presence", static: false, private: false, access: { has: obj => "presence" in obj, get: obj => obj.presence, set: (obj, value) => { obj.presence = value; } }, metadata: _metadata }, _presence_initializers, _presence_extraInitializers);
|
|
90
|
+
__esDecorate(this, null, _channelBadge_decorators, { kind: "accessor", name: "channelBadge", static: false, private: false, access: { has: obj => "channelBadge" in obj, get: obj => obj.channelBadge, set: (obj, value) => { obj.channelBadge = value; } }, metadata: _metadata }, _channelBadge_initializers, _channelBadge_extraInitializers);
|
|
91
|
+
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
|
|
92
|
+
SioAvatar = _classThis = _classDescriptor.value;
|
|
93
|
+
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
94
|
+
}
|
|
95
|
+
static demo = () => html `
|
|
96
|
+
<div style="display: flex; flex-direction: column; gap: 20px;">
|
|
97
|
+
<div style="display: flex; gap: 14px; align-items: center;">
|
|
98
|
+
<sio-avatar initials="LP" tint="#FF6B8A" size="56"></sio-avatar>
|
|
99
|
+
<sio-avatar initials="MV" tint="#0A84FF" size="44"></sio-avatar>
|
|
100
|
+
<sio-avatar initials="PS" tint="#30D158"></sio-avatar>
|
|
101
|
+
<sio-avatar initials="L" tint="#5E6AD2" size="34"></sio-avatar>
|
|
102
|
+
<sio-avatar initials="FA" tint="#A2845E" size="28"></sio-avatar>
|
|
103
|
+
<sio-avatar initials="JW" tint="#FF9F0A" size="20"></sio-avatar>
|
|
104
|
+
</div>
|
|
105
|
+
<div style="display: flex; gap: 14px; align-items: center;">
|
|
106
|
+
<sio-avatar initials="LP" tint="#FF6B8A" size="44" presence="online"></sio-avatar>
|
|
107
|
+
<sio-avatar initials="MV" tint="#0A84FF" size="40" channelBadge="mail"></sio-avatar>
|
|
108
|
+
<sio-avatar initials="LP" tint="#FF6B8A" size="40" channelBadge="chats"></sio-avatar>
|
|
109
|
+
<sio-avatar initials="PS" tint="#30D158" size="40" channelBadge="calls"></sio-avatar>
|
|
110
|
+
<sio-avatar initials="FA" tint="#A2845E" size="40" channelBadge="letters"></sio-avatar>
|
|
111
|
+
</div>
|
|
112
|
+
<div style="display: flex; gap: 24px; align-items: center;">
|
|
113
|
+
<sio-avatar-stack size="32">
|
|
114
|
+
<sio-avatar initials="LP" tint="#FF6B8A" size="32"></sio-avatar>
|
|
115
|
+
<sio-avatar initials="MV" tint="#0A84FF" size="32"></sio-avatar>
|
|
116
|
+
<sio-avatar initials="PS" tint="#30D158" size="32"></sio-avatar>
|
|
117
|
+
</sio-avatar-stack>
|
|
118
|
+
<sio-avatar-stack max="3" size="24">
|
|
119
|
+
<sio-avatar initials="LP" tint="#FF6B8A" size="24"></sio-avatar>
|
|
120
|
+
<sio-avatar initials="MV" tint="#0A84FF" size="24"></sio-avatar>
|
|
121
|
+
<sio-avatar initials="PS" tint="#30D158" size="24"></sio-avatar>
|
|
122
|
+
<sio-avatar initials="JW" tint="#FF9F0A" size="24"></sio-avatar>
|
|
123
|
+
<sio-avatar initials="AK" tint="#5E6AD2" size="24"></sio-avatar>
|
|
124
|
+
</sio-avatar-stack>
|
|
125
|
+
</div>
|
|
126
|
+
</div>
|
|
127
|
+
`;
|
|
128
|
+
#initials_accessor_storage = __runInitializers(this, _initials_initializers, '');
|
|
129
|
+
get initials() { return this.#initials_accessor_storage; }
|
|
130
|
+
set initials(value) { this.#initials_accessor_storage = value; }
|
|
131
|
+
#tint_accessor_storage = (__runInitializers(this, _initials_extraInitializers), __runInitializers(this, _tint_initializers, 'var(--sio-tint)'));
|
|
132
|
+
/** person accent color (data-driven); any CSS color, tokens welcome */
|
|
133
|
+
get tint() { return this.#tint_accessor_storage; }
|
|
134
|
+
set tint(value) { this.#tint_accessor_storage = value; }
|
|
135
|
+
#size_accessor_storage = (__runInitializers(this, _tint_extraInitializers), __runInitializers(this, _size_initializers, 40));
|
|
136
|
+
get size() { return this.#size_accessor_storage; }
|
|
137
|
+
set size(value) { this.#size_accessor_storage = value; }
|
|
138
|
+
#presence_accessor_storage = (__runInitializers(this, _size_extraInitializers), __runInitializers(this, _presence_initializers, 'none'));
|
|
139
|
+
get presence() { return this.#presence_accessor_storage; }
|
|
140
|
+
set presence(value) { this.#presence_accessor_storage = value; }
|
|
141
|
+
#channelBadge_accessor_storage = (__runInitializers(this, _presence_extraInitializers), __runInitializers(this, _channelBadge_initializers, 'none'));
|
|
142
|
+
get channelBadge() { return this.#channelBadge_accessor_storage; }
|
|
143
|
+
set channelBadge(value) { this.#channelBadge_accessor_storage = value; }
|
|
144
|
+
static styles = [
|
|
145
|
+
...sioElementStyles,
|
|
146
|
+
css `
|
|
147
|
+
:host {
|
|
148
|
+
display: inline-flex;
|
|
149
|
+
flex-shrink: 0;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
.wrapper {
|
|
153
|
+
position: relative;
|
|
154
|
+
flex-shrink: 0;
|
|
155
|
+
display: inline-flex;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
/* v7 .sio-avatar — initials on tinted circle, white per design */
|
|
159
|
+
.avatar {
|
|
160
|
+
border-radius: 50%;
|
|
161
|
+
display: inline-flex;
|
|
162
|
+
align-items: center;
|
|
163
|
+
justify-content: center;
|
|
164
|
+
flex-shrink: 0;
|
|
165
|
+
font-family: var(--sio-font-sf);
|
|
166
|
+
font-weight: 600;
|
|
167
|
+
letter-spacing: -0.2px;
|
|
168
|
+
color: #fff; /* on-tint constant across themes (v7 .sio-avatar) */
|
|
169
|
+
user-select: none;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
.presence {
|
|
173
|
+
position: absolute;
|
|
174
|
+
right: -1px;
|
|
175
|
+
bottom: -1px;
|
|
176
|
+
border-radius: 50%;
|
|
177
|
+
background: var(--sio-green);
|
|
178
|
+
border: 2px solid var(--sio-surface);
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
.channelBadge {
|
|
182
|
+
position: absolute;
|
|
183
|
+
right: -3px;
|
|
184
|
+
bottom: -3px;
|
|
185
|
+
width: 18px;
|
|
186
|
+
height: 18px;
|
|
187
|
+
border-radius: 9px;
|
|
188
|
+
color: #fff; /* glyph on solid channel color */
|
|
189
|
+
display: flex;
|
|
190
|
+
align-items: center;
|
|
191
|
+
justify-content: center;
|
|
192
|
+
border: 2px solid var(--sio-surface);
|
|
193
|
+
}
|
|
194
|
+
`,
|
|
195
|
+
];
|
|
196
|
+
render() {
|
|
197
|
+
const fontSize = Math.round(this.size * 0.4);
|
|
198
|
+
const presenceSize = Math.max(8, Math.round(this.size * 0.27));
|
|
199
|
+
const badge = this.channelBadge !== 'none' ? channelBadgeRecipes[this.channelBadge] : null;
|
|
200
|
+
return html `
|
|
201
|
+
<div class="wrapper">
|
|
202
|
+
<div
|
|
203
|
+
class="avatar"
|
|
204
|
+
style="width: ${this.size}px; height: ${this.size}px; font-size: ${fontSize}px; background: ${this.tint};"
|
|
205
|
+
>
|
|
206
|
+
${this.initials}
|
|
207
|
+
</div>
|
|
208
|
+
${this.presence === 'online'
|
|
209
|
+
? html `<div class="presence" style="width: ${presenceSize}px; height: ${presenceSize}px;"></div>`
|
|
210
|
+
: ''}
|
|
211
|
+
${badge
|
|
212
|
+
? html `
|
|
213
|
+
<div class="channelBadge" style="background: ${badge.color};">
|
|
214
|
+
<sio-icon icon=${badge.icon} size="10"></sio-icon>
|
|
215
|
+
</div>
|
|
216
|
+
`
|
|
217
|
+
: ''}
|
|
218
|
+
</div>
|
|
219
|
+
`;
|
|
220
|
+
}
|
|
221
|
+
constructor() {
|
|
222
|
+
super(...arguments);
|
|
223
|
+
__runInitializers(this, _channelBadge_extraInitializers);
|
|
224
|
+
}
|
|
225
|
+
static {
|
|
226
|
+
__runInitializers(_classThis, _classExtraInitializers);
|
|
227
|
+
}
|
|
228
|
+
};
|
|
229
|
+
return SioAvatar = _classThis;
|
|
230
|
+
})();
|
|
231
|
+
export { SioAvatar };
|
|
232
|
+
/**
|
|
233
|
+
* sio-avatar-stack — overlapping avatar row (thread participants).
|
|
234
|
+
* Slotted sio-avatar elements overlap by -8px, each ringed with 2px of
|
|
235
|
+
* surface color; avatars beyond `max` collapse into a "+N" bubble.
|
|
236
|
+
*/
|
|
237
|
+
let SioAvatarStack = (() => {
|
|
238
|
+
let _classDecorators = [customElement('sio-avatar-stack')];
|
|
239
|
+
let _classDescriptor;
|
|
240
|
+
let _classExtraInitializers = [];
|
|
241
|
+
let _classThis;
|
|
242
|
+
let _classSuper = DeesElement;
|
|
243
|
+
let _max_decorators;
|
|
244
|
+
let _max_initializers = [];
|
|
245
|
+
let _max_extraInitializers = [];
|
|
246
|
+
let _size_decorators;
|
|
247
|
+
let _size_initializers = [];
|
|
248
|
+
let _size_extraInitializers = [];
|
|
249
|
+
let _overflowCount_decorators;
|
|
250
|
+
let _overflowCount_initializers = [];
|
|
251
|
+
let _overflowCount_extraInitializers = [];
|
|
252
|
+
var SioAvatarStack = class extends _classSuper {
|
|
253
|
+
static { _classThis = this; }
|
|
254
|
+
static {
|
|
255
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
256
|
+
_max_decorators = [property({ type: Number })];
|
|
257
|
+
_size_decorators = [property({ type: Number })];
|
|
258
|
+
_overflowCount_decorators = [state()];
|
|
259
|
+
__esDecorate(this, null, _max_decorators, { kind: "accessor", name: "max", static: false, private: false, access: { has: obj => "max" in obj, get: obj => obj.max, set: (obj, value) => { obj.max = value; } }, metadata: _metadata }, _max_initializers, _max_extraInitializers);
|
|
260
|
+
__esDecorate(this, null, _size_decorators, { kind: "accessor", name: "size", static: false, private: false, access: { has: obj => "size" in obj, get: obj => obj.size, set: (obj, value) => { obj.size = value; } }, metadata: _metadata }, _size_initializers, _size_extraInitializers);
|
|
261
|
+
__esDecorate(this, null, _overflowCount_decorators, { kind: "accessor", name: "overflowCount", static: false, private: false, access: { has: obj => "overflowCount" in obj, get: obj => obj.overflowCount, set: (obj, value) => { obj.overflowCount = value; } }, metadata: _metadata }, _overflowCount_initializers, _overflowCount_extraInitializers);
|
|
262
|
+
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
|
|
263
|
+
SioAvatarStack = _classThis = _classDescriptor.value;
|
|
264
|
+
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
265
|
+
}
|
|
266
|
+
static demo = () => html `
|
|
267
|
+
<div style="display: flex; gap: 24px; align-items: center;">
|
|
268
|
+
<sio-avatar-stack size="32">
|
|
269
|
+
<sio-avatar initials="LP" tint="#FF6B8A" size="32"></sio-avatar>
|
|
270
|
+
<sio-avatar initials="MV" tint="#0A84FF" size="32"></sio-avatar>
|
|
271
|
+
<sio-avatar initials="PS" tint="#30D158" size="32"></sio-avatar>
|
|
272
|
+
</sio-avatar-stack>
|
|
273
|
+
<sio-avatar-stack max="3" size="28">
|
|
274
|
+
<sio-avatar initials="LP" tint="#FF6B8A" size="28"></sio-avatar>
|
|
275
|
+
<sio-avatar initials="MV" tint="#0A84FF" size="28"></sio-avatar>
|
|
276
|
+
<sio-avatar initials="PS" tint="#30D158" size="28"></sio-avatar>
|
|
277
|
+
<sio-avatar initials="JW" tint="#FF9F0A" size="28"></sio-avatar>
|
|
278
|
+
<sio-avatar initials="AK" tint="#5E6AD2" size="28"></sio-avatar>
|
|
279
|
+
<sio-avatar initials="RB" tint="#A2845E" size="28"></sio-avatar>
|
|
280
|
+
</sio-avatar-stack>
|
|
281
|
+
<sio-avatar-stack max="2" size="24">
|
|
282
|
+
<sio-avatar initials="LP" tint="#FF6B8A" size="24"></sio-avatar>
|
|
283
|
+
<sio-avatar initials="MV" tint="#0A84FF" size="24"></sio-avatar>
|
|
284
|
+
<sio-avatar initials="PS" tint="#30D158" size="24"></sio-avatar>
|
|
285
|
+
<sio-avatar initials="JW" tint="#FF9F0A" size="24"></sio-avatar>
|
|
286
|
+
</sio-avatar-stack>
|
|
287
|
+
</div>
|
|
288
|
+
`;
|
|
289
|
+
#max_accessor_storage = __runInitializers(this, _max_initializers, 4);
|
|
290
|
+
/** visible avatars before collapsing into "+N" */
|
|
291
|
+
get max() { return this.#max_accessor_storage; }
|
|
292
|
+
set max(value) { this.#max_accessor_storage = value; }
|
|
293
|
+
#size_accessor_storage = (__runInitializers(this, _max_extraInitializers), __runInitializers(this, _size_initializers, 28));
|
|
294
|
+
/** diameter of the "+N" overflow bubble — match the slotted avatar size */
|
|
295
|
+
get size() { return this.#size_accessor_storage; }
|
|
296
|
+
set size(value) { this.#size_accessor_storage = value; }
|
|
297
|
+
#overflowCount_accessor_storage = (__runInitializers(this, _size_extraInitializers), __runInitializers(this, _overflowCount_initializers, 0));
|
|
298
|
+
get overflowCount() { return this.#overflowCount_accessor_storage; }
|
|
299
|
+
set overflowCount(value) { this.#overflowCount_accessor_storage = value; }
|
|
300
|
+
static styles = [
|
|
301
|
+
...sioElementStyles,
|
|
302
|
+
css `
|
|
303
|
+
:host {
|
|
304
|
+
display: inline-flex;
|
|
305
|
+
align-items: center;
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
::slotted(sio-avatar) {
|
|
309
|
+
border-radius: 50%;
|
|
310
|
+
box-shadow: 0 0 0 2px var(--sio-surface);
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
::slotted(sio-avatar:not(:first-child)) {
|
|
314
|
+
margin-left: -8px;
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
::slotted(sio-avatar[data-sio-stack-overflow]) {
|
|
318
|
+
display: none;
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
.overflow {
|
|
322
|
+
display: inline-flex;
|
|
323
|
+
align-items: center;
|
|
324
|
+
justify-content: center;
|
|
325
|
+
flex-shrink: 0;
|
|
326
|
+
margin-left: -8px;
|
|
327
|
+
border-radius: 50%;
|
|
328
|
+
background: var(--sio-surface-2);
|
|
329
|
+
color: var(--sio-label-2);
|
|
330
|
+
font-family: var(--sio-font-sf);
|
|
331
|
+
font-weight: 600;
|
|
332
|
+
font-variant-numeric: tabular-nums;
|
|
333
|
+
box-shadow: 0 0 0 2px var(--sio-surface);
|
|
334
|
+
user-select: none;
|
|
335
|
+
}
|
|
336
|
+
`,
|
|
337
|
+
];
|
|
338
|
+
render() {
|
|
339
|
+
const overflowFontSize = Math.max(9, Math.round(this.size * 0.36));
|
|
340
|
+
return html `
|
|
341
|
+
<slot @slotchange=${this.recomputeStack}></slot>
|
|
342
|
+
${this.overflowCount > 0
|
|
343
|
+
? html `
|
|
344
|
+
<span
|
|
345
|
+
class="overflow"
|
|
346
|
+
style="width: ${this.size}px; height: ${this.size}px; font-size: ${overflowFontSize}px;"
|
|
347
|
+
>
|
|
348
|
+
+${this.overflowCount}
|
|
349
|
+
</span>
|
|
350
|
+
`
|
|
351
|
+
: ''}
|
|
352
|
+
`;
|
|
353
|
+
}
|
|
354
|
+
updated(changedProperties) {
|
|
355
|
+
if (changedProperties.has('max')) {
|
|
356
|
+
this.recomputeStack();
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
recomputeStack = (__runInitializers(this, _overflowCount_extraInitializers), () => {
|
|
360
|
+
const slot = this.shadowRoot?.querySelector('slot');
|
|
361
|
+
if (!slot) {
|
|
362
|
+
return;
|
|
363
|
+
}
|
|
364
|
+
const avatars = slot
|
|
365
|
+
.assignedElements()
|
|
366
|
+
.filter((element) => element.tagName.toLowerCase() === 'sio-avatar');
|
|
367
|
+
avatars.forEach((element, index) => {
|
|
368
|
+
element.toggleAttribute('data-sio-stack-overflow', index >= this.max);
|
|
369
|
+
});
|
|
370
|
+
this.overflowCount = Math.max(0, avatars.length - this.max);
|
|
371
|
+
});
|
|
372
|
+
static {
|
|
373
|
+
__runInitializers(_classThis, _classExtraInitializers);
|
|
374
|
+
}
|
|
375
|
+
};
|
|
376
|
+
return SioAvatarStack = _classThis;
|
|
377
|
+
})();
|
|
378
|
+
export { SioAvatarStack };
|
|
379
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lvLWF2YXRhci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzX3dlYi9lbGVtZW50cy9zaW8tYXZhdGFyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQ0wsV0FBVyxFQUNYLElBQUksRUFDSixRQUFRLEVBQ1IsS0FBSyxFQUNMLGFBQWEsRUFDYixHQUFHLEdBRUosTUFBTSw2QkFBNkIsQ0FBQztBQUVyQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDL0MsT0FBTyxlQUFlLENBQUM7QUFZdkI7OztHQUdHO0FBQ0gsTUFBTSxtQkFBbUIsR0FHckI7SUFDRixJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxvQkFBb0IsRUFBRTtJQUN2RCxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsS0FBSyxFQUFFLHFCQUFxQixFQUFFO0lBQy9ELEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLHFCQUFxQixFQUFFO0lBQ3RELE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLHVCQUF1QixFQUFFO0NBQy9ELENBQUM7QUFFRjs7Ozs7OztHQU9HO0lBRVUsU0FBUzs0QkFEckIsYUFBYSxDQUFDLFlBQVksQ0FBQzs7OztzQkFDRyxXQUFXOzs7Ozs7Ozs7Ozs7Ozs7O3lCQUFuQixTQUFRLFdBQVc7Ozs7b0NBbUN2QyxRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7Z0NBSTFCLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQztnQ0FHMUIsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDO29DQUcxQixRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFF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
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { DeesElement, type TemplateResult } from '@design.estate/dees-element';
|
|
2
|
+
/**
|
|
3
|
+
* Known tint keys resolve to v7 palette tokens; anything else is passed
|
|
4
|
+
* through verbatim so callers can hand in `var(--sio-…)` references.
|
|
5
|
+
*/
|
|
6
|
+
export type TSioBucketTint = 'now' | 'today' | 'later' | 'done' | 'feed' | 'paper' | 'people' | 'mail' | 'chats' | 'calls' | 'letters' | 'tint' | string;
|
|
7
|
+
declare global {
|
|
8
|
+
interface HTMLElementTagNameMap {
|
|
9
|
+
'sio-bucket-header': SioBucketHeader;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* sio-bucket-header — triage bucket band of the unified feed
|
|
14
|
+
* (design source: SIOBucketHeader in SocialIOUnified.jsx).
|
|
15
|
+
*
|
|
16
|
+
* 6px color dot + uppercase 13/700 tinted label + tabular count,
|
|
17
|
+
* optional right-aligned subtitle, on a faint 2% label-tint band.
|
|
18
|
+
* A default slot after the subtitle takes custom trailing content.
|
|
19
|
+
*/
|
|
20
|
+
export declare class SioBucketHeader extends DeesElement {
|
|
21
|
+
static demo: () => TemplateResult<1>;
|
|
22
|
+
/** Bucket label — rendered uppercase, 13px / 700, tinted. */
|
|
23
|
+
accessor label: string;
|
|
24
|
+
/** Item count — rendered as "· n" with tabular-nums. Omit to hide. */
|
|
25
|
+
accessor count: number | undefined;
|
|
26
|
+
/** Optional right-aligned subtitle on the band (e.g. "needs reply today"). */
|
|
27
|
+
accessor subtitle: string;
|
|
28
|
+
/**
|
|
29
|
+
* Bucket tint: now | today | later | done, lane keys (feed/paper/people),
|
|
30
|
+
* channel keys (mail/chats/calls/letters), 'tint', or any CSS color value.
|
|
31
|
+
*/
|
|
32
|
+
accessor tint: TSioBucketTint;
|
|
33
|
+
static styles: import("@design.estate/dees-element").CSSResult[];
|
|
34
|
+
private get resolvedTint();
|
|
35
|
+
render(): TemplateResult;
|
|
36
|
+
}
|
|
@@ -0,0 +1,197 @@
|
|
|
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, sioTabularNums } from './tokens.js';
|
|
37
|
+
const bucketTintVars = {
|
|
38
|
+
now: 'var(--sio-bucket-now)',
|
|
39
|
+
today: 'var(--sio-bucket-today)',
|
|
40
|
+
later: 'var(--sio-bucket-later)',
|
|
41
|
+
done: 'var(--sio-bucket-done)',
|
|
42
|
+
feed: 'var(--sio-lane-feed)',
|
|
43
|
+
paper: 'var(--sio-lane-paper)',
|
|
44
|
+
people: 'var(--sio-lane-people)',
|
|
45
|
+
mail: 'var(--sio-ch-mail)',
|
|
46
|
+
chats: 'var(--sio-ch-chats)',
|
|
47
|
+
calls: 'var(--sio-ch-calls)',
|
|
48
|
+
letters: 'var(--sio-ch-letters)',
|
|
49
|
+
tint: 'var(--sio-tint)',
|
|
50
|
+
};
|
|
51
|
+
/**
|
|
52
|
+
* sio-bucket-header — triage bucket band of the unified feed
|
|
53
|
+
* (design source: SIOBucketHeader in SocialIOUnified.jsx).
|
|
54
|
+
*
|
|
55
|
+
* 6px color dot + uppercase 13/700 tinted label + tabular count,
|
|
56
|
+
* optional right-aligned subtitle, on a faint 2% label-tint band.
|
|
57
|
+
* A default slot after the subtitle takes custom trailing content.
|
|
58
|
+
*/
|
|
59
|
+
let SioBucketHeader = (() => {
|
|
60
|
+
let _classDecorators = [customElement('sio-bucket-header')];
|
|
61
|
+
let _classDescriptor;
|
|
62
|
+
let _classExtraInitializers = [];
|
|
63
|
+
let _classThis;
|
|
64
|
+
let _classSuper = DeesElement;
|
|
65
|
+
let _label_decorators;
|
|
66
|
+
let _label_initializers = [];
|
|
67
|
+
let _label_extraInitializers = [];
|
|
68
|
+
let _count_decorators;
|
|
69
|
+
let _count_initializers = [];
|
|
70
|
+
let _count_extraInitializers = [];
|
|
71
|
+
let _subtitle_decorators;
|
|
72
|
+
let _subtitle_initializers = [];
|
|
73
|
+
let _subtitle_extraInitializers = [];
|
|
74
|
+
let _tint_decorators;
|
|
75
|
+
let _tint_initializers = [];
|
|
76
|
+
let _tint_extraInitializers = [];
|
|
77
|
+
var SioBucketHeader = 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
|
+
_label_decorators = [property({ type: String })];
|
|
82
|
+
_count_decorators = [property({ type: Number })];
|
|
83
|
+
_subtitle_decorators = [property({ type: String })];
|
|
84
|
+
_tint_decorators = [property({ type: String })];
|
|
85
|
+
__esDecorate(this, null, _label_decorators, { kind: "accessor", name: "label", static: false, private: false, access: { has: obj => "label" in obj, get: obj => obj.label, set: (obj, value) => { obj.label = value; } }, metadata: _metadata }, _label_initializers, _label_extraInitializers);
|
|
86
|
+
__esDecorate(this, null, _count_decorators, { kind: "accessor", name: "count", static: false, private: false, access: { has: obj => "count" in obj, get: obj => obj.count, set: (obj, value) => { obj.count = value; } }, metadata: _metadata }, _count_initializers, _count_extraInitializers);
|
|
87
|
+
__esDecorate(this, null, _subtitle_decorators, { kind: "accessor", name: "subtitle", static: false, private: false, access: { has: obj => "subtitle" in obj, get: obj => obj.subtitle, set: (obj, value) => { obj.subtitle = value; } }, metadata: _metadata }, _subtitle_initializers, _subtitle_extraInitializers);
|
|
88
|
+
__esDecorate(this, null, _tint_decorators, { kind: "accessor", name: "tint", static: false, private: false, access: { has: obj => "tint" in obj, get: obj => obj.tint, set: (obj, value) => { obj.tint = value; } }, metadata: _metadata }, _tint_initializers, _tint_extraInitializers);
|
|
89
|
+
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
|
|
90
|
+
SioBucketHeader = _classThis = _classDescriptor.value;
|
|
91
|
+
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
92
|
+
}
|
|
93
|
+
static demo = () => html `
|
|
94
|
+
<div style="max-width: 420px; font-family: var(--sio-font-sf); background: var(--sio-bg); border-radius: 12px; overflow: hidden;">
|
|
95
|
+
<sio-bucket-header label="Now" count="2" tint="now" subtitle="needs reply today"></sio-bucket-header>
|
|
96
|
+
<div style="background: var(--sio-surface); height: 44px;"></div>
|
|
97
|
+
<sio-bucket-header label="Today" count="4" tint="today"></sio-bucket-header>
|
|
98
|
+
<div style="background: var(--sio-surface); height: 44px;"></div>
|
|
99
|
+
<sio-bucket-header label="Later" count="7" tint="later"></sio-bucket-header>
|
|
100
|
+
<div style="background: var(--sio-surface); height: 44px;"></div>
|
|
101
|
+
<sio-bucket-header label="Done" count="12" tint="done" subtitle="cleared this week"></sio-bucket-header>
|
|
102
|
+
<div style="background: var(--sio-surface); height: 44px;"></div>
|
|
103
|
+
<sio-bucket-header label="Yesterday" count="3" tint="tint"></sio-bucket-header>
|
|
104
|
+
<div style="background: var(--sio-surface); height: 44px;"></div>
|
|
105
|
+
</div>
|
|
106
|
+
`;
|
|
107
|
+
#label_accessor_storage = __runInitializers(this, _label_initializers, '');
|
|
108
|
+
/** Bucket label — rendered uppercase, 13px / 700, tinted. */
|
|
109
|
+
get label() { return this.#label_accessor_storage; }
|
|
110
|
+
set label(value) { this.#label_accessor_storage = value; }
|
|
111
|
+
#count_accessor_storage = (__runInitializers(this, _label_extraInitializers), __runInitializers(this, _count_initializers, undefined));
|
|
112
|
+
/** Item count — rendered as "· n" with tabular-nums. Omit to hide. */
|
|
113
|
+
get count() { return this.#count_accessor_storage; }
|
|
114
|
+
set count(value) { this.#count_accessor_storage = value; }
|
|
115
|
+
#subtitle_accessor_storage = (__runInitializers(this, _count_extraInitializers), __runInitializers(this, _subtitle_initializers, ''));
|
|
116
|
+
/** Optional right-aligned subtitle on the band (e.g. "needs reply today"). */
|
|
117
|
+
get subtitle() { return this.#subtitle_accessor_storage; }
|
|
118
|
+
set subtitle(value) { this.#subtitle_accessor_storage = value; }
|
|
119
|
+
#tint_accessor_storage = (__runInitializers(this, _subtitle_extraInitializers), __runInitializers(this, _tint_initializers, 'later'));
|
|
120
|
+
/**
|
|
121
|
+
* Bucket tint: now | today | later | done, lane keys (feed/paper/people),
|
|
122
|
+
* channel keys (mail/chats/calls/letters), 'tint', or any CSS color value.
|
|
123
|
+
*/
|
|
124
|
+
get tint() { return this.#tint_accessor_storage; }
|
|
125
|
+
set tint(value) { this.#tint_accessor_storage = value; }
|
|
126
|
+
static styles = [
|
|
127
|
+
...sioElementStyles,
|
|
128
|
+
css `
|
|
129
|
+
:host {
|
|
130
|
+
display: block;
|
|
131
|
+
font-family: var(--sio-font-sf);
|
|
132
|
+
}
|
|
133
|
+
.header {
|
|
134
|
+
padding: 16px 16px 8px;
|
|
135
|
+
display: flex;
|
|
136
|
+
align-items: baseline;
|
|
137
|
+
gap: 8px;
|
|
138
|
+
/* faint band — ~2% label ink over the grouped background */
|
|
139
|
+
background: color-mix(in oklab, var(--sio-label) 2%, transparent);
|
|
140
|
+
}
|
|
141
|
+
.dot {
|
|
142
|
+
width: 6px;
|
|
143
|
+
height: 6px;
|
|
144
|
+
border-radius: 3px;
|
|
145
|
+
background: var(--_bucket-tint);
|
|
146
|
+
flex-shrink: 0;
|
|
147
|
+
}
|
|
148
|
+
.label {
|
|
149
|
+
font-size: 13px;
|
|
150
|
+
font-weight: 700;
|
|
151
|
+
color: var(--_bucket-tint);
|
|
152
|
+
letter-spacing: 0.02em;
|
|
153
|
+
text-transform: uppercase;
|
|
154
|
+
}
|
|
155
|
+
.count {
|
|
156
|
+
font-size: 11px;
|
|
157
|
+
color: var(--sio-label-3);
|
|
158
|
+
${sioTabularNums}
|
|
159
|
+
}
|
|
160
|
+
.spacer {
|
|
161
|
+
flex: 1;
|
|
162
|
+
}
|
|
163
|
+
.subtitle {
|
|
164
|
+
font-size: 11px;
|
|
165
|
+
color: var(--sio-label-3);
|
|
166
|
+
}
|
|
167
|
+
`,
|
|
168
|
+
];
|
|
169
|
+
get resolvedTint() {
|
|
170
|
+
return bucketTintVars[this.tint] ?? this.tint;
|
|
171
|
+
}
|
|
172
|
+
render() {
|
|
173
|
+
return html `
|
|
174
|
+
<div class="header" style="--_bucket-tint: ${this.resolvedTint}">
|
|
175
|
+
<div class="dot"></div>
|
|
176
|
+
<span class="label">${this.label}</span>
|
|
177
|
+
${typeof this.count === 'number' && !Number.isNaN(this.count)
|
|
178
|
+
? html `<span class="count">· ${this.count}</span>`
|
|
179
|
+
: html ``}
|
|
180
|
+
<span class="spacer"></span>
|
|
181
|
+
${this.subtitle ? html `<span class="subtitle">${this.subtitle}</span>` : html ``}
|
|
182
|
+
<slot></slot>
|
|
183
|
+
</div>
|
|
184
|
+
`;
|
|
185
|
+
}
|
|
186
|
+
constructor() {
|
|
187
|
+
super(...arguments);
|
|
188
|
+
__runInitializers(this, _tint_extraInitializers);
|
|
189
|
+
}
|
|
190
|
+
static {
|
|
191
|
+
__runInitializers(_classThis, _classExtraInitializers);
|
|
192
|
+
}
|
|
193
|
+
};
|
|
194
|
+
return SioBucketHeader = _classThis;
|
|
195
|
+
})();
|
|
196
|
+
export { SioBucketHeader };
|
|
197
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lvLWJ1Y2tldC1oZWFkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90c193ZWIvZWxlbWVudHMvc2lvLWJ1Y2tldC1oZWFkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLE9BQU8sRUFDTCxXQUFXLEVBQ1gsSUFBSSxFQUNKLFFBQVEsRUFDUixhQUFhLEVBQ2IsR0FBRyxHQUVKLE1BQU0sNkJBQTZCLENBQUM7QUFDckMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGNBQWMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQXFCL0QsTUFBTSxjQUFjLEdBQTJCO0lBQzdDLEdBQUcsRUFBRSx1QkFBdUI7SUFDNUIsS0FBSyxFQUFFLHlCQUF5QjtJQUNoQyxLQUFLLEVBQUUseUJBQXlCO0lBQ2hDLElBQUksRUFBRSx3QkFBd0I7SUFDOUIsSUFBSSxFQUFFLHNCQUFzQjtJQUM1QixLQUFLLEVBQUUsdUJBQXVCO0lBQzlCLE1BQU0sRUFBRSx3QkFBd0I7SUFDaEMsSUFBSSxFQUFFLG9CQUFvQjtJQUMxQixLQUFLLEVBQUUscUJBQXFCO0lBQzVCLEtBQUssRUFBRSxxQkFBcUI7SUFDNUIsT0FBTyxFQUFFLHVCQUF1QjtJQUNoQyxJQUFJLEVBQUUsaUJBQWlCO0NBQ3hCLENBQUM7QUFRRjs7Ozs7OztHQU9HO0lBRVUsZUFBZTs0QkFEM0IsYUFBYSxDQUFDLG1CQUFtQixDQUFDOzs7O3NCQUNFLFdBQVc7Ozs7Ozs7Ozs7Ozs7K0JBQW5CLFNBQVEsV0FBVzs7OztpQ0FpQjdDLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQztpQ0FJMUIsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDO29DQUkxQixRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7Z0NBTzFCLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQztZQWQzQixvS0FBZ0IsS0FBSyw2QkFBTCxLQUFLLHFGQUFNO1lBSTNCLG9LQUFnQixLQUFLLDZCQUFMLEtBQUsscUZBQWlDO1lBSXRELDZLQUFnQixRQUFRLDZCQUFSLFFBQVEsMkZBQU07WUFPOUIsaUtBQWdCLElBQUksNkJBQUosSUFBSSxtRkFBMkI7WUFqQ2pELDZLQWlHQzs7OztRQWhHUSxNQUFNLENBQUMsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQTs7Ozs7Ozs7Ozs7OztHQWE5QixDQUFDO1FBSUYsdUVBQXdCLEVBQUUsRUFBQztRQUYzQiw2REFBNkQ7UUFFN0QsSUFBZ0IsS0FBSywyQ0FBTTtRQUEzQixJQUFnQixLQUFLLGlEQUFNO1FBSTNCLDJIQUE0QyxTQUFTLEdBQUM7UUFGdEQsc0VBQXNFO1FBRXRFLElBQWdCLEtBQUssMkNBQWlDO1FBQXRELElBQWdCLEtBQUssaURBQWlDO1FBSXRELGlJQUEyQixFQUFFLEdBQUM7UUFGOUIsOEVBQThFO1FBRTlFLElBQWdCLFFBQVEsOENBQU07UUFBOUIsSUFBZ0IsUUFBUSxvREFBTTtRQU85Qiw0SEFBdUMsT0FBTyxHQUFDO1FBTC9DOzs7V0FHRztRQUVILElBQWdCLElBQUksMENBQTJCO1FBQS9DLElBQWdCLElBQUksZ0RBQTJCO1FBRXhDLE1BQU0sQ0FBQyxNQUFNLEdBQUc7WUFDckIsR0FBRyxnQkFBZ0I7WUFDbkIsR0FBRyxDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7VUE4QkcsY0FBYzs7Ozs7Ozs7O0tBU25CO1NBQ0YsQ0FBQztRQUVGLElBQVksWUFBWTtZQUN0QixPQUFPLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQztRQUNoRCxDQUFDO1FBRU0sTUFBTTtZQUNYLE9BQU8sSUFBSSxDQUFBO21EQUNvQyxJQUFJLENBQUMsWUFBWTs7OEJBRXRDLElBQUksQ0FBQyxLQUFLO1VBQzlCLE9BQU8sSUFBSSxDQUFDLEtBQUssS0FBSyxRQUFRLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7Z0JBQzNELENBQUMsQ0FBQyxJQUFJLENBQUEseUJBQXlCLElBQUksQ0FBQyxLQUFLLFNBQVM7Z0JBQ2xELENBQUMsQ0FBQyxJQUFJLENBQUEsRUFBRTs7VUFFUixJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUEsMEJBQTBCLElBQUksQ0FBQyxRQUFRLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFBLEVBQUU7OztLQUdsRixDQUFDO1FBQ0osQ0FBQzs7Ozs7O1lBaEdVLHVEQUFlOzs7OztTQUFmLGVBQWUifQ==
|
|
@@ -1,4 +1,8 @@
|
|
|
1
1
|
import { DeesElement, type TemplateResult } from '@design.estate/dees-element';
|
|
2
|
+
import './sio-icon.js';
|
|
3
|
+
export type TSioButtonType = 'default' | 'primary' | 'secondary' | 'destructive' | 'outline' | 'ghost';
|
|
4
|
+
export type TSioButtonSize = 'sm' | 'default' | 'lg';
|
|
5
|
+
export type TSioButtonStatus = 'normal' | 'pending' | 'success' | 'error';
|
|
2
6
|
declare global {
|
|
3
7
|
interface HTMLElementTagNameMap {
|
|
4
8
|
'sio-button': SioButton;
|
|
@@ -7,10 +11,10 @@ declare global {
|
|
|
7
11
|
export declare class SioButton extends DeesElement {
|
|
8
12
|
static demo: () => TemplateResult<1>;
|
|
9
13
|
accessor text: string;
|
|
10
|
-
accessor type:
|
|
11
|
-
accessor size:
|
|
14
|
+
accessor type: TSioButtonType;
|
|
15
|
+
accessor size: TSioButtonSize;
|
|
12
16
|
accessor disabled: boolean;
|
|
13
|
-
accessor status:
|
|
17
|
+
accessor status: TSioButtonStatus;
|
|
14
18
|
static styles: import("@design.estate/dees-element").CSSResult[];
|
|
15
19
|
render(): TemplateResult;
|
|
16
20
|
private handleClick;
|