@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.
Files changed (130) hide show
  1. package/.smartconfig.json +51 -0
  2. package/dist_bundle/bundle.js +5455 -3248
  3. package/dist_ts_web/00_commitinfo_data.js +3 -3
  4. package/dist_ts_web/elements/index.d.ts +21 -3
  5. package/dist_ts_web/elements/index.js +28 -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 +38 -0
  15. package/dist_ts_web/elements/sio-channel-rail.js +288 -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-logo-render.d.ts +42 -0
  45. package/dist_ts_web/elements/sio-logo-render.js +306 -0
  46. package/dist_ts_web/elements/sio-logo.d.ts +64 -0
  47. package/dist_ts_web/elements/sio-logo.js +393 -0
  48. package/dist_ts_web/elements/sio-message-input.d.ts +25 -4
  49. package/dist_ts_web/elements/sio-message-input.js +231 -226
  50. package/dist_ts_web/elements/sio-paper-thumb.d.ts +24 -0
  51. package/dist_ts_web/elements/sio-paper-thumb.js +293 -0
  52. package/dist_ts_web/elements/sio-pdf-viewer.d.ts +2 -0
  53. package/dist_ts_web/elements/sio-pdf-viewer.js +344 -244
  54. package/dist_ts_web/elements/sio-segmented.d.ts +32 -0
  55. package/dist_ts_web/elements/sio-segmented.js +217 -0
  56. package/dist_ts_web/elements/sio-step-timeline.d.ts +28 -0
  57. package/dist_ts_web/elements/sio-step-timeline.js +222 -0
  58. package/dist_ts_web/elements/sio-tab-bar.d.ts +36 -0
  59. package/dist_ts_web/elements/sio-tab-bar.js +232 -0
  60. package/dist_ts_web/elements/sio-unread-badge.d.ts +25 -0
  61. package/dist_ts_web/elements/sio-unread-badge.js +203 -0
  62. package/dist_ts_web/elements/sio-waveform.d.ts +34 -0
  63. package/dist_ts_web/elements/sio-waveform.js +304 -0
  64. package/dist_ts_web/elements/tokens.d.ts +70 -0
  65. package/dist_ts_web/elements/tokens.js +277 -0
  66. package/dist_ts_web/pages/firstpage.d.ts +5 -0
  67. package/dist_ts_web/pages/firstpage.js +21 -2
  68. package/dist_ts_web/pages/mainpage.d.ts +6 -0
  69. package/dist_ts_web/pages/mainpage.js +111 -39
  70. package/{license → license.md} +3 -1
  71. package/package.json +23 -29
  72. package/readme.hints.md +82 -0
  73. package/readme.md +113 -146
  74. package/ts_web/00_commitinfo_data.ts +2 -2
  75. package/ts_web/elements/index.ts +31 -7
  76. package/ts_web/elements/sio-ai-card.ts +175 -0
  77. package/ts_web/elements/sio-avatar.ts +295 -0
  78. package/ts_web/elements/sio-bucket-header.ts +157 -0
  79. package/ts_web/elements/sio-button.ts +149 -127
  80. package/ts_web/elements/sio-channel-rail.ts +256 -0
  81. package/ts_web/elements/sio-chip.ts +134 -0
  82. package/ts_web/elements/sio-cmdk.ts +461 -0
  83. package/ts_web/elements/sio-combox.ts +327 -204
  84. package/ts_web/elements/sio-composer.ts +306 -0
  85. package/ts_web/elements/sio-conversation-selector.ts +350 -228
  86. package/ts_web/elements/sio-conversation-view.ts +573 -457
  87. package/ts_web/elements/sio-dropdown-menu.ts +112 -130
  88. package/ts_web/elements/sio-fab.ts +192 -227
  89. package/ts_web/elements/sio-glass-toolbar.ts +140 -0
  90. package/ts_web/elements/sio-icon.ts +147 -25
  91. package/ts_web/elements/sio-image-lightbox.ts +62 -64
  92. package/ts_web/elements/sio-inset-list.ts +140 -0
  93. package/ts_web/elements/sio-kbd.ts +80 -0
  94. package/ts_web/elements/sio-list-row.ts +393 -0
  95. package/ts_web/elements/sio-logo-render.ts +367 -0
  96. package/ts_web/elements/sio-logo.ts +311 -0
  97. package/ts_web/elements/sio-message-input.ts +142 -221
  98. package/ts_web/elements/sio-paper-thumb.ts +244 -0
  99. package/ts_web/elements/sio-pdf-viewer.ts +58 -60
  100. package/ts_web/elements/sio-segmented.ts +183 -0
  101. package/ts_web/elements/sio-step-timeline.ts +179 -0
  102. package/ts_web/elements/sio-tab-bar.ts +195 -0
  103. package/ts_web/elements/sio-unread-badge.ts +147 -0
  104. package/ts_web/elements/sio-waveform.ts +239 -0
  105. package/ts_web/elements/tokens.ts +297 -0
  106. package/ts_web/pages/firstpage.ts +20 -1
  107. package/ts_web/pages/mainpage.ts +111 -39
  108. package/dist_bundle/bundle.js.map +0 -7
  109. package/dist_ts_web/elements/00colors.d.ts +0 -108
  110. package/dist_ts_web/elements/00colors.js +0 -137
  111. package/dist_ts_web/elements/00fonts.d.ts +0 -60
  112. package/dist_ts_web/elements/00fonts.js +0 -129
  113. package/dist_ts_web/elements/00tokens.d.ts +0 -123
  114. package/dist_ts_web/elements/00tokens.js +0 -176
  115. package/dist_ts_web/elements/sio-conversation-list.d.ts +0 -20
  116. package/dist_ts_web/elements/sio-conversation-list.js +0 -495
  117. package/dist_ts_web/elements/sio-recorder.d.ts +0 -60
  118. package/dist_ts_web/elements/sio-recorder.js +0 -173
  119. package/dist_ts_web/elements/sio-subwidget-conversations.d.ts +0 -16
  120. package/dist_ts_web/elements/sio-subwidget-conversations.js +0 -350
  121. package/dist_ts_web/elements/sio-subwidget-onboardme.d.ts +0 -7
  122. package/dist_ts_web/elements/sio-subwidget-onboardme.js +0 -243
  123. package/dist_watch/bundle.js +0 -81694
  124. package/dist_watch/bundle.js.map +0 -7
  125. package/dist_watch/index.html +0 -25
  126. package/npmextra.json +0 -19
  127. package/ts_web/elements/00colors.ts +0 -164
  128. package/ts_web/elements/00fonts.ts +0 -145
  129. package/ts_web/elements/00tokens.ts +0 -197
  130. package/ts_web/elements/sio-recorder.ts +0 -213
@@ -1,38 +1,141 @@
1
- import { DeesElement, html, property, customElement, cssManager, css, unsafeCSS, } from '@design.estate/dees-element';
2
- // Import design tokens
3
- import { colors, bdTheme } from './00colors.js';
4
- import { spacing, radius, shadows, transitions } from './00tokens.js';
5
- import { fontFamilies, typography } from './00fonts.js';
6
- @customElement('sio-button')
7
- export class SioButton extends DeesElement {
8
- static demo = () => html `
9
- <div style="display: flex; gap: 16px; flex-wrap: wrap; align-items: center;">
10
- <sio-button>Default</sio-button>
11
- <sio-button type="primary">Primary</sio-button>
12
- <sio-button type="destructive">Delete</sio-button>
13
- <sio-button type="outline">Outline</sio-button>
14
- <sio-button type="ghost">Ghost</sio-button>
15
- <sio-button size="sm">Small</sio-button>
16
- <sio-button size="lg">Large</sio-button>
17
- <sio-button disabled>Disabled</sio-button>
1
+ var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
2
+ function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
3
+ var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
4
+ var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
5
+ var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
6
+ var _, done = false;
7
+ for (var i = decorators.length - 1; i >= 0; i--) {
8
+ var context = {};
9
+ for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
10
+ for (var p in contextIn.access) context.access[p] = contextIn.access[p];
11
+ context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
12
+ var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
13
+ if (kind === "accessor") {
14
+ if (result === void 0) continue;
15
+ if (result === null || typeof result !== "object") throw new TypeError("Object expected");
16
+ if (_ = accept(result.get)) descriptor.get = _;
17
+ if (_ = accept(result.set)) descriptor.set = _;
18
+ if (_ = accept(result.init)) initializers.unshift(_);
19
+ }
20
+ else if (_ = accept(result)) {
21
+ if (kind === "field") initializers.unshift(_);
22
+ else descriptor[key] = _;
23
+ }
24
+ }
25
+ if (target) Object.defineProperty(target, contextIn.name, descriptor);
26
+ done = true;
27
+ };
28
+ var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
29
+ var useValue = arguments.length > 2;
30
+ for (var i = 0; i < initializers.length; i++) {
31
+ value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
32
+ }
33
+ return useValue ? value : void 0;
34
+ };
35
+ import { DeesElement, html, property, customElement, css, } from '@design.estate/dees-element';
36
+ import { sioElementStyles } from './tokens.js';
37
+ import './sio-icon.js';
38
+ let SioButton = (() => {
39
+ let _classDecorators = [customElement('sio-button')];
40
+ let _classDescriptor;
41
+ let _classExtraInitializers = [];
42
+ let _classThis;
43
+ let _classSuper = DeesElement;
44
+ let _text_decorators;
45
+ let _text_initializers = [];
46
+ let _text_extraInitializers = [];
47
+ let _type_decorators;
48
+ let _type_initializers = [];
49
+ let _type_extraInitializers = [];
50
+ let _size_decorators;
51
+ let _size_initializers = [];
52
+ let _size_extraInitializers = [];
53
+ let _disabled_decorators;
54
+ let _disabled_initializers = [];
55
+ let _disabled_extraInitializers = [];
56
+ let _status_decorators;
57
+ let _status_initializers = [];
58
+ let _status_extraInitializers = [];
59
+ var SioButton = class extends _classSuper {
60
+ static { _classThis = this; }
61
+ static {
62
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
63
+ _text_decorators = [property({ type: String })];
64
+ _type_decorators = [property({ type: String })];
65
+ _size_decorators = [property({ type: String })];
66
+ _disabled_decorators = [property({ type: Boolean, reflect: true })];
67
+ _status_decorators = [property({ type: String })];
68
+ __esDecorate(this, null, _text_decorators, { kind: "accessor", name: "text", static: false, private: false, access: { has: obj => "text" in obj, get: obj => obj.text, set: (obj, value) => { obj.text = value; } }, metadata: _metadata }, _text_initializers, _text_extraInitializers);
69
+ __esDecorate(this, null, _type_decorators, { kind: "accessor", name: "type", static: false, private: false, access: { has: obj => "type" in obj, get: obj => obj.type, set: (obj, value) => { obj.type = value; } }, metadata: _metadata }, _type_initializers, _type_extraInitializers);
70
+ __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);
71
+ __esDecorate(this, null, _disabled_decorators, { kind: "accessor", name: "disabled", static: false, private: false, access: { has: obj => "disabled" in obj, get: obj => obj.disabled, set: (obj, value) => { obj.disabled = value; } }, metadata: _metadata }, _disabled_initializers, _disabled_extraInitializers);
72
+ __esDecorate(this, null, _status_decorators, { kind: "accessor", name: "status", static: false, private: false, access: { has: obj => "status" in obj, get: obj => obj.status, set: (obj, value) => { obj.status = value; } }, metadata: _metadata }, _status_initializers, _status_extraInitializers);
73
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
74
+ SioButton = _classThis = _classDescriptor.value;
75
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
76
+ }
77
+ static demo = () => html `
78
+ <div
79
+ style="display: flex; flex-direction: column; gap: 20px; padding: 24px; background: var(--sio-bg); border-radius: 14px;"
80
+ >
81
+ <div style="display: flex; gap: 10px; flex-wrap: wrap; align-items: center;">
82
+ <sio-button type="primary">
83
+ <sio-icon icon="pencil" size="15"></sio-icon>
84
+ Compose
85
+ </sio-button>
86
+ <sio-button type="secondary">
87
+ <sio-icon icon="archive" size="15"></sio-icon>
88
+ Archive
89
+ </sio-button>
90
+ <sio-button type="outline">
91
+ <sio-icon icon="clock" size="15"></sio-icon>
92
+ Move to Later
93
+ </sio-button>
94
+ <sio-button type="ghost">Dismiss</sio-button>
95
+ <sio-button type="destructive">
96
+ <sio-icon icon="trash" size="15"></sio-icon>
97
+ Delete thread
98
+ </sio-button>
99
+ </div>
100
+ <div style="display: flex; gap: 10px; flex-wrap: wrap; align-items: center;">
101
+ <sio-button type="primary" size="sm">Reply</sio-button>
102
+ <sio-button type="secondary" size="sm">Forward</sio-button>
103
+ <sio-button type="primary">Mark as Done</sio-button>
104
+ <sio-button type="primary" size="lg">
105
+ <sio-icon icon="send" size="17"></sio-icon>
106
+ Send
107
+ </sio-button>
108
+ <sio-button type="outline" size="lg">Save draft</sio-button>
109
+ </div>
110
+ <div style="display: flex; gap: 10px; flex-wrap: wrap; align-items: center;">
111
+ <sio-button type="primary" status="pending">Sending…</sio-button>
112
+ <sio-button type="primary" status="success">Sent</sio-button>
113
+ <sio-button type="destructive" status="error">Failed</sio-button>
114
+ <sio-button type="primary" disabled>Compose</sio-button>
115
+ <sio-button type="secondary" disabled>Archive</sio-button>
116
+ </div>
18
117
  </div>
19
118
  `;
20
- @property({ type: String })
21
- accessor text = '';
22
- @property({ type: String })
23
- accessor type = 'default';
24
- @property({ type: String })
25
- accessor size = 'default';
26
- @property({ type: Boolean, reflect: true })
27
- accessor disabled = false;
28
- @property({ type: String })
29
- accessor status = 'normal';
30
- static styles = [
31
- cssManager.defaultStyles,
32
- css `
119
+ #text_accessor_storage = __runInitializers(this, _text_initializers, '');
120
+ get text() { return this.#text_accessor_storage; }
121
+ set text(value) { this.#text_accessor_storage = value; }
122
+ #type_accessor_storage = (__runInitializers(this, _text_extraInitializers), __runInitializers(this, _type_initializers, 'default'));
123
+ get type() { return this.#type_accessor_storage; }
124
+ set type(value) { this.#type_accessor_storage = value; }
125
+ #size_accessor_storage = (__runInitializers(this, _type_extraInitializers), __runInitializers(this, _size_initializers, 'default'));
126
+ get size() { return this.#size_accessor_storage; }
127
+ set size(value) { this.#size_accessor_storage = value; }
128
+ #disabled_accessor_storage = (__runInitializers(this, _size_extraInitializers), __runInitializers(this, _disabled_initializers, false));
129
+ get disabled() { return this.#disabled_accessor_storage; }
130
+ set disabled(value) { this.#disabled_accessor_storage = value; }
131
+ #status_accessor_storage = (__runInitializers(this, _disabled_extraInitializers), __runInitializers(this, _status_initializers, 'normal'));
132
+ get status() { return this.#status_accessor_storage; }
133
+ set status(value) { this.#status_accessor_storage = value; }
134
+ static styles = [
135
+ ...sioElementStyles,
136
+ css `
33
137
  :host {
34
138
  display: inline-block;
35
- font-family: ${unsafeCSS(fontFamilies.sans)};
36
139
  }
37
140
 
38
141
  :host([disabled]) {
@@ -45,220 +148,218 @@ export class SioButton extends DeesElement {
45
148
  align-items: center;
46
149
  justify-content: center;
47
150
  white-space: nowrap;
48
- border-radius: 6px;
49
- font-weight: 500;
50
- font-size: 14px;
151
+ border: var(--sio-hairline) solid transparent;
152
+ border-radius: var(--sio-radius);
153
+ font-family: var(--sio-font-sf);
154
+ font-weight: 600;
51
155
  line-height: 1;
52
- letter-spacing: -0.01em;
53
- transition: all 120ms ease;
156
+ transition:
157
+ background 120ms ease,
158
+ color 120ms ease,
159
+ border-color 120ms ease,
160
+ transform 80ms ease;
54
161
  cursor: pointer;
55
162
  user-select: none;
56
163
  outline: none;
57
- border: none;
58
164
  gap: 6px;
59
165
  }
60
166
 
61
- /* Size variants */
167
+ .button:active:not(.disabled) {
168
+ transform: scale(0.98);
169
+ }
170
+
171
+ .button:focus-visible {
172
+ outline: 2px solid color-mix(in oklab, var(--sio-tint) 40%, transparent);
173
+ outline-offset: 2px;
174
+ }
175
+
176
+ /* Size ramp — SF footnote/subheadline tracking */
62
177
  .button.size-sm {
63
- height: 32px;
64
- padding: 0 12px;
65
- font-size: 13px;
178
+ height: 28px;
179
+ padding: 0 10px;
180
+ font-size: 12px;
181
+ letter-spacing: 0;
182
+ gap: 5px;
66
183
  }
67
184
 
68
185
  .button.size-default {
69
186
  height: 36px;
70
- padding: 0 16px;
71
- font-size: 14px;
187
+ padding: 0 14px;
188
+ font-size: 13px;
189
+ letter-spacing: -0.08px;
72
190
  }
73
191
 
74
192
  .button.size-lg {
75
- height: 42px;
76
- padding: 0 24px;
193
+ height: 44px;
194
+ padding: 0 20px;
77
195
  font-size: 15px;
196
+ letter-spacing: -0.24px;
78
197
  }
79
198
 
80
- /* Type variants */
81
- .button.default {
82
- background: ${bdTheme('hsl(0 0% 95%)', 'hsl(0 0% 15%)')};
83
- color: ${bdTheme('hsl(0 0% 15%)', 'hsl(0 0% 95%)')};
199
+ /* default falls back to the secondary look (iOS gray fill) */
200
+ .button.default,
201
+ .button.secondary {
202
+ background: var(--sio-surface-2);
203
+ color: var(--sio-label);
84
204
  }
85
205
 
86
- .button.default:hover:not(.disabled) {
87
- background: ${bdTheme('hsl(0 0% 91%)', 'hsl(0 0% 20%)')};
206
+ .button.default:hover:not(.disabled),
207
+ .button.secondary:hover:not(.disabled) {
208
+ background: color-mix(in oklab, var(--sio-label) 10%, transparent);
88
209
  }
89
210
 
90
- .button.default:active:not(.disabled) {
91
- background: ${bdTheme('hsl(0 0% 87%)', 'hsl(0 0% 18%)')};
211
+ .button.default:active:not(.disabled),
212
+ .button.secondary:active:not(.disabled) {
213
+ background: color-mix(in oklab, var(--sio-label) 14%, transparent);
92
214
  }
93
215
 
216
+ /* primary — solid system tint. The on-tint label is white in both
217
+ themes per the v7 spec (solid tint/red fills always carry white). */
94
218
  .button.primary {
95
- background: ${bdTheme('hsl(0 0% 15%)', 'hsl(0 0% 95%)')};
96
- color: ${bdTheme('hsl(0 0% 100%)', 'hsl(0 0% 0%)')};
219
+ background: var(--sio-tint);
220
+ color: #ffffff;
97
221
  }
98
222
 
99
223
  .button.primary:hover:not(.disabled) {
100
- background: ${bdTheme('hsl(0 0% 25%)', 'hsl(0 0% 100%)')};
224
+ background: var(--sio-tint-hover);
101
225
  }
102
226
 
103
227
  .button.primary:active:not(.disabled) {
104
- background: ${bdTheme('hsl(0 0% 20%)', 'hsl(0 0% 90%)')};
228
+ background: color-mix(in oklab, var(--sio-tint) 88%, var(--sio-label));
105
229
  }
106
230
 
107
- /* Secondary variant */
108
- .button.secondary {
109
- background: transparent;
110
- color: ${bdTheme('hsl(0 0% 15%)', 'hsl(0 0% 95%)')};
111
- box-shadow: inset 0 0 0 1px ${bdTheme('hsl(0 0% 85%)', 'hsl(0 0% 25%)')};
112
- }
113
-
114
- .button.secondary:hover:not(.disabled) {
115
- background: ${bdTheme('hsl(0 0% 96%)', 'hsl(0 0% 15%)')};
116
- }
117
-
118
- .button.secondary:active:not(.disabled) {
119
- background: ${bdTheme('hsl(0 0% 92%)', 'hsl(0 0% 12%)')};
120
- }
121
-
122
- /* Destructive variant */
231
+ /* destructive — solid system red */
123
232
  .button.destructive {
124
- background: ${bdTheme('hsl(0 100% 95%)', 'hsl(0 50% 20%)')};
125
- color: ${bdTheme('hsl(0 100% 45%)', 'hsl(0 100% 75%)')};
233
+ background: var(--sio-red);
234
+ color: #ffffff;
126
235
  }
127
236
 
128
237
  .button.destructive:hover:not(.disabled) {
129
- background: ${bdTheme('hsl(0 100% 45%)', 'hsl(0 100% 50%)')};
130
- color: white;
238
+ background: color-mix(in oklab, var(--sio-red) 88%, var(--sio-label));
131
239
  }
132
240
 
133
241
  .button.destructive:active:not(.disabled) {
134
- background: ${bdTheme('hsl(0 100% 40%)', 'hsl(0 100% 45%)')};
135
- color: white;
242
+ background: color-mix(in oklab, var(--sio-red) 80%, var(--sio-label));
136
243
  }
137
244
 
245
+ /* outline — hairline ring, quiet label */
138
246
  .button.outline {
139
247
  background: transparent;
140
- color: ${bdTheme('hsl(0 0% 40%)', 'hsl(0 0% 70%)')};
141
- box-shadow: inset 0 0 0 1.5px ${bdTheme('hsl(0 0% 90%)', 'hsl(0 0% 30%)')};
248
+ color: var(--sio-label);
249
+ border-color: var(--sio-separator-opaque);
142
250
  }
143
251
 
144
252
  .button.outline:hover:not(.disabled) {
145
- color: ${bdTheme('hsl(0 0% 15%)', 'hsl(0 0% 95%)')};
146
- box-shadow: inset 0 0 0 1.5px ${bdTheme('hsl(0 0% 70%)', 'hsl(0 0% 50%)')};
253
+ background: var(--sio-surface-2);
147
254
  }
148
255
 
149
256
  .button.outline:active:not(.disabled) {
150
- background: ${bdTheme('hsl(0 0% 95%)', 'hsl(0 0% 15%)')};
257
+ background: color-mix(in oklab, var(--sio-label) 10%, transparent);
151
258
  }
152
259
 
260
+ /* ghost — bare label, fill on hover */
153
261
  .button.ghost {
154
262
  background: transparent;
155
- color: ${bdTheme('hsl(0 0% 40%)', 'hsl(0 0% 70%)')};
263
+ color: var(--sio-label-2);
156
264
  }
157
265
 
158
266
  .button.ghost:hover:not(.disabled) {
159
- color: ${bdTheme('hsl(0 0% 15%)', 'hsl(0 0% 95%)')};
160
- background: ${bdTheme('hsl(0 0% 0% / 0.05)', 'hsl(0 0% 100% / 0.05)')};
267
+ color: var(--sio-label);
268
+ background: var(--sio-surface-2);
161
269
  }
162
270
 
163
271
  .button.ghost:active:not(.disabled) {
164
- background: ${bdTheme('hsl(0 0% 0% / 0.1)', 'hsl(0 0% 100% / 0.1)')};
272
+ background: color-mix(in oklab, var(--sio-label) 10%, transparent);
165
273
  }
166
274
 
167
275
  /* Status states */
168
276
  .button.pending {
169
277
  pointer-events: none;
170
- opacity: 0.7;
278
+ opacity: 0.75;
171
279
  }
172
280
 
173
281
  .spinner {
174
- position: absolute;
175
- left: ${unsafeCSS(spacing["3"])};
176
- animation: spin 1s linear infinite;
282
+ animation: spin 900ms linear infinite;
177
283
  }
178
284
 
179
285
  @keyframes spin {
180
- from { transform: rotate(0deg); }
181
- to { transform: rotate(360deg); }
286
+ from {
287
+ transform: rotate(0deg);
288
+ }
289
+ to {
290
+ transform: rotate(360deg);
291
+ }
182
292
  }
183
293
 
184
294
  .button.success {
185
- background: ${bdTheme('success')};
186
- color: ${bdTheme('successForeground')};
295
+ background: var(--sio-green);
296
+ color: #ffffff;
187
297
  pointer-events: none;
188
298
  }
189
299
 
190
300
  .button.error {
191
- background: ${bdTheme('destructive')};
192
- color: ${bdTheme('destructiveForeground')};
301
+ background: var(--sio-red);
302
+ color: #ffffff;
193
303
  pointer-events: none;
194
304
  }
195
305
 
196
306
  /* Disabled state */
197
307
  .button.disabled {
198
- opacity: 0.5;
308
+ opacity: 0.45;
199
309
  cursor: not-allowed;
200
310
  transform: none !important;
201
311
  }
202
312
 
203
- /* Focus state */
204
- .button:focus-visible {
205
- outline: 2px solid ${bdTheme('hsl(0 0% 15% / 0.2)', 'hsl(0 0% 95% / 0.2)')};
206
- outline-offset: 2px;
207
- }
208
-
209
313
  /* Icon sizing within buttons */
210
314
  .button sio-icon {
211
- width: 16px;
212
- height: 16px;
213
315
  flex-shrink: 0;
214
316
  }
215
-
216
- .button.size-sm sio-icon {
217
- width: 14px;
218
- height: 14px;
219
- }
220
-
221
- .button.size-lg sio-icon {
222
- width: 18px;
223
- height: 18px;
224
- }
225
317
  `,
226
- ];
227
- render() {
228
- const buttonClasses = [
229
- 'button',
230
- this.type === 'primary' ? 'primary' : this.type,
231
- `size-${this.size}`,
232
- this.disabled ? 'disabled' : '',
233
- this.status,
234
- ].filter(Boolean).join(' ');
235
- return html `
236
- <button
237
- class="${buttonClasses}"
238
- ?disabled=${this.disabled}
239
- @click=${this.handleClick}
240
- >
241
- ${this.status === 'pending' ? html `
242
- <sio-icon class="spinner" icon="loader" size="16"></sio-icon>
243
- ` : ''}
244
- ${this.status === 'success' ? html `
245
- <sio-icon icon="check" size="16"></sio-icon>
246
- ` : ''}
247
- ${this.status === 'error' ? html `
248
- <sio-icon icon="x" size="16"></sio-icon>
249
- ` : ''}
318
+ ];
319
+ render() {
320
+ const buttonClasses = [
321
+ 'button',
322
+ this.type,
323
+ `size-${this.size}`,
324
+ this.disabled ? 'disabled' : '',
325
+ this.status,
326
+ ]
327
+ .filter(Boolean)
328
+ .join(' ');
329
+ const statusIconSize = this.size === 'sm' ? 13 : this.size === 'lg' ? 17 : 15;
330
+ return html `
331
+ <button class="${buttonClasses}" ?disabled=${this.disabled} @click=${this.handleClick}>
332
+ ${this.status === 'pending'
333
+ ? html `<sio-icon class="spinner" icon="loader" size=${statusIconSize}></sio-icon>`
334
+ : ''}
335
+ ${this.status === 'success'
336
+ ? html `<sio-icon icon="check" size=${statusIconSize}></sio-icon>`
337
+ : ''}
338
+ ${this.status === 'error'
339
+ ? html `<sio-icon icon="x" size=${statusIconSize}></sio-icon>`
340
+ : ''}
250
341
  <slot>${this.text}</slot>
251
342
  </button>
252
343
  `;
253
- }
254
- handleClick(event) {
255
- if (this.disabled || this.status !== 'normal') {
256
- event.preventDefault();
257
- event.stopPropagation();
258
- return;
259
344
  }
260
- // Let the native click bubble normally
261
- // Don't dispatch a custom event to avoid double-triggering
262
- }
263
- }
264
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lvLWJ1dHRvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzX3dlYi9lbGVtZW50cy9zaW8tYnV0dG9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxXQUFXLEVBQ1gsSUFBSSxFQUNKLFFBQVEsRUFDUixhQUFhLEVBQ2IsVUFBVSxFQUNWLEdBQUcsRUFDSCxTQUFTLEdBRVYsTUFBTSw2QkFBNkIsQ0FBQztBQUVyQyx1QkFBdUI7QUFDdkIsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0RSxPQUFPLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQVF4RCxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUM7QUFDNUIsTUFBTSxPQUFPLFNBQVUsU0FBUSxXQUFXO0lBQ2pDLE1BQU0sQ0FBQyxJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFBOzs7Ozs7Ozs7OztHQVc5QixDQUFDO0lBRUYsQ0FBQyxRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7SUFDcEIsUUFBUSxDQUFDLElBQUksR0FBVyxFQUFFLENBQUM7SUFFbEMsQ0FBQyxRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7SUFDcEIsUUFBUSxDQUFDLElBQUksR0FBOEUsU0FBUyxDQUFDO0lBRTVHLENBQUMsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDO0lBQ3BCLFFBQVEsQ0FBQyxJQUFJLEdBQTRCLFNBQVMsQ0FBQztJQUUxRCxDQUFDLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDO0lBQ3BDLFFBQVEsQ0FBQyxRQUFR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
345
+ handleClick(event) {
346
+ if (this.disabled || this.status !== 'normal') {
347
+ event.preventDefault();
348
+ event.stopPropagation();
349
+ return;
350
+ }
351
+ // Let the native click bubble normally — no synthetic event, so
352
+ // consumers never see a double trigger.
353
+ }
354
+ constructor() {
355
+ super(...arguments);
356
+ __runInitializers(this, _status_extraInitializers);
357
+ }
358
+ static {
359
+ __runInitializers(_classThis, _classExtraInitializers);
360
+ }
361
+ };
362
+ return SioButton = _classThis;
363
+ })();
364
+ export { SioButton };
365
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lvLWJ1dHRvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzX3dlYi9lbGVtZW50cy9zaW8tYnV0dG9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQ0wsV0FBVyxFQUNYLElBQUksRUFDSixRQUFRLEVBQ1IsYUFBYSxFQUNiLEdBQUcsR0FFSixNQUFNLDZCQUE2QixDQUFDO0FBRXJDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMvQyxPQUFPLGVBQWUsQ0FBQztJQW1CVixTQUFTOzRCQURyQixhQUFhLENBQUMsWUFBWSxDQUFDOzs7O3NCQUNHLFdBQVc7Ozs7Ozs7Ozs7Ozs7Ozs7eUJBQW5CLFNBQVEsV0FBVzs7OztnQ0E0Q3ZDLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQztnQ0FHMUIsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDO2dDQUcxQixRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7b0NBRzFCLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDO2tDQUcxQyxRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7WUFYM0IsaUtBQWdCLElBQUksNkJBQUosSUFBSSxtRkFBYztZQUdsQyxpS0FBZ0IsSUFBSSw2QkFBSixJQUFJLG1GQUE2QjtZQUdqRCxpS0FBZ0IsSUFBSSw2QkFBSixJQUFJLG1GQUE2QjtZQUdqRCw2S0FBZ0IsUUFBUSw2QkFBUixRQUFRLDJGQUFrQjtZQUcxQyx1S0FBZ0IsTUFBTSw2QkFBTixNQUFNLHVGQUE4QjtZQXpEdEQsNktBMlJDOzs7O1FBMVJRLE1BQU0sQ0FBQyxJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFBOzs7Ozs7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
@@ -0,0 +1,38 @@
1
+ import { DeesElement, type TemplateResult } from '@design.estate/dees-element';
2
+ import './sio-icon.js';
3
+ import './sio-logo.js';
4
+ declare global {
5
+ interface HTMLElementTagNameMap {
6
+ 'sio-channel-rail': SioChannelRail;
7
+ }
8
+ }
9
+ export interface ISioChannelRailItem {
10
+ id: string;
11
+ label: string;
12
+ color: string;
13
+ icon: string;
14
+ unread?: number;
15
+ }
16
+ export interface ISioChannelSelectDetail {
17
+ id: string;
18
+ channel: ISioChannelRailItem;
19
+ }
20
+ /**
21
+ * sio-channel-rail — the 64px channel column at the very left of the
22
+ * desktop window (v7 prototype: SIOChannelRail in
23
+ * SocialIODesktopChannels.jsx).
24
+ *
25
+ * Each item stacks an 18px icon over a 10px label; the active item gets a
26
+ * rounded-10 chip and its channel color, and every item can carry an unread
27
+ * badge (channel-colored pill at top -5 / right -9 with a 2px ring cut out
28
+ * of the rail). Selecting a channel dispatches `channel-select` with
29
+ * `{ id, channel }` (bubbles, composed).
30
+ */
31
+ export declare class SioChannelRail extends DeesElement {
32
+ static demo: () => TemplateResult<1>;
33
+ accessor channels: ISioChannelRailItem[];
34
+ accessor active: string;
35
+ static styles: import("@design.estate/dees-element").CSSResult[];
36
+ render(): TemplateResult;
37
+ private handleSelect;
38
+ }