@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
@@ -3,17 +3,14 @@ import {
3
3
  property,
4
4
  html,
5
5
  customElement,
6
- type TemplateResult,
7
- cssManager,
8
6
  css,
9
- unsafeCSS,
10
7
  state,
8
+ type TemplateResult,
11
9
  } from '@design.estate/dees-element';
12
10
 
13
- // Import design tokens
14
- import { colors, bdTheme } from './00colors.js';
15
- import { spacing, radius, shadows, transitions } from './00tokens.js';
16
- import { fontFamilies } from './00fonts.js';
11
+ import { sioElementStyles } from './tokens.js';
12
+ import './sio-icon.js';
13
+ import './sio-button.js';
17
14
 
18
15
  export interface IDropdownMenuItem {
19
16
  id: string;
@@ -33,16 +30,26 @@ declare global {
33
30
  @customElement('sio-dropdown-menu')
34
31
  export class SioDropdownMenu extends DeesElement {
35
32
  public static demo = () => html`
36
- <div style="position: relative; height: 200px; display: flex; justify-content: center; padding-top: 50px;">
37
- <sio-dropdown-menu .items=${[
38
- { id: 'mute', label: 'Mute notifications', icon: 'bell-off' },
39
- { id: 'pin', label: 'Pin conversation', icon: 'pin' },
40
- { id: 'divider1', label: '', divider: true },
41
- { id: 'export', label: 'Export chat', icon: 'download' },
42
- { id: 'clear', label: 'Clear history', icon: 'trash-2', destructive: true }
43
- ]}>
44
- <sio-button type="ghost" size="sm">
45
- <sio-icon icon="more-vertical" size="16"></sio-icon>
33
+ <div
34
+ style="position: relative; height: 320px; display: flex; justify-content: center; padding-top: 40px; background: var(--sio-bg); border-radius: 14px;"
35
+ >
36
+ <sio-dropdown-menu
37
+ .items=${[
38
+ { id: 'reply', label: 'Reply', icon: 'reply' },
39
+ { id: 'forward', label: 'Forward', icon: 'forward' },
40
+ { id: 'divider1', label: '', divider: true },
41
+ { id: 'later', label: 'Move to Later', icon: 'clock' },
42
+ { id: 'done', label: 'Mark as Done', icon: 'check' },
43
+ { id: 'pin', label: 'Pin conversation', icon: 'pin' },
44
+ { id: 'mute', label: 'Mute notifications', icon: 'bell-off', disabled: true },
45
+ { id: 'divider2', label: '', divider: true },
46
+ { id: 'block', label: 'Block sender', icon: 'user-x', destructive: true },
47
+ { id: 'delete', label: 'Delete thread', icon: 'trash-2', destructive: true },
48
+ ] satisfies IDropdownMenuItem[]}
49
+ >
50
+ <sio-button type="outline" size="sm">
51
+ <sio-icon icon="ellipsis" size="15"></sio-icon>
52
+ Thread actions
46
53
  </sio-button>
47
54
  </sio-dropdown-menu>
48
55
  </div>
@@ -57,17 +64,16 @@ export class SioDropdownMenu extends DeesElement {
57
64
  @state()
58
65
  private accessor isOpen: boolean = false;
59
66
 
60
- private documentClickHandler: (e: MouseEvent) => void;
61
- private scrollHandler: () => void;
62
- private resizeHandler: () => void;
67
+ private documentClickHandler?: (e: MouseEvent) => void;
68
+ private resizeHandler?: () => void;
63
69
 
64
70
  public static styles = [
65
- cssManager.defaultStyles,
71
+ ...sioElementStyles,
66
72
  css`
67
73
  :host {
68
74
  position: relative;
69
75
  display: inline-block;
70
- font-family: ${unsafeCSS(fontFamilies.sans)};
76
+ font-family: var(--sio-font-sf);
71
77
  }
72
78
 
73
79
  .trigger {
@@ -76,19 +82,23 @@ export class SioDropdownMenu extends DeesElement {
76
82
 
77
83
  .dropdown {
78
84
  position: absolute;
79
- top: calc(100% + 10px);
85
+ top: calc(100% + 8px);
80
86
  right: 0;
81
- min-width: 200px;
82
- background: ${bdTheme('background')};
83
- border: 1px solid ${bdTheme('border')};
84
- border-radius: ${unsafeCSS(radius.lg)};
85
- box-shadow: ${unsafeCSS(shadows.lg)};
86
- overflow: hidden;
87
+ min-width: 210px;
88
+ padding: 5px;
89
+ background: var(--sio-surface);
90
+ border-radius: var(--sio-radius-md);
91
+ /* hairline ring + soft depth, per the v7 floating-surface recipe */
92
+ box-shadow:
93
+ 0 18px 50px rgba(0, 0, 0, 0.22),
94
+ 0 0 0 var(--sio-hairline) var(--sio-separator);
87
95
  z-index: 100000;
88
96
  opacity: 0;
89
- transform: translateY(-10px) scale(0.95);
97
+ transform: translateY(-8px) scale(0.96);
90
98
  pointer-events: none;
91
- transition: all 200ms cubic-bezier(0.34, 1.56, 0.64, 1);
99
+ transition:
100
+ opacity 160ms ease,
101
+ transform 200ms cubic-bezier(0.34, 1.56, 0.64, 1);
92
102
  transform-origin: top right;
93
103
  }
94
104
 
@@ -107,48 +117,52 @@ export class SioDropdownMenu extends DeesElement {
107
117
  .menu-item {
108
118
  display: flex;
109
119
  align-items: center;
110
- gap: ${unsafeCSS(spacing["3"])};
111
- padding: ${unsafeCSS(spacing["2.5"])} ${unsafeCSS(spacing["3"])};
112
- font-size: 0.875rem;
113
- line-height: 1.5;
114
- color: ${bdTheme('foreground')};
115
- cursor: pointer;
116
- transition: ${unsafeCSS(transitions.all)};
117
- user-select: none;
120
+ gap: 10px;
121
+ width: 100%;
122
+ padding: 8px 10px;
118
123
  border: none;
124
+ border-radius: var(--sio-radius-sm);
119
125
  background: none;
120
- width: 100%;
126
+ font-family: var(--sio-font-sf);
127
+ font-size: 13px;
128
+ font-weight: 500;
129
+ letter-spacing: -0.08px;
130
+ line-height: 18px;
121
131
  text-align: left;
132
+ color: var(--sio-label);
133
+ cursor: pointer;
134
+ transition: background 80ms ease;
135
+ user-select: none;
122
136
  }
123
137
 
124
138
  .menu-item:hover:not(.disabled) {
125
- background: ${bdTheme('accent')};
139
+ background: var(--sio-surface-2);
126
140
  }
127
141
 
128
142
  .menu-item:active:not(.disabled) {
129
- transform: scale(0.98);
143
+ background: color-mix(in oklab, var(--sio-label) 10%, transparent);
130
144
  }
131
145
 
132
146
  .menu-item.disabled {
133
- opacity: 0.5;
134
- cursor: not-allowed;
147
+ opacity: 0.4;
148
+ cursor: default;
135
149
  }
136
150
 
137
151
  .menu-item.destructive {
138
- color: ${bdTheme('destructive')};
152
+ color: var(--sio-red);
139
153
  }
140
154
 
141
155
  .menu-item.destructive:hover:not(.disabled) {
142
- background: ${bdTheme('destructive')}10;
156
+ background: color-mix(in oklab, var(--sio-red) 10%, transparent);
143
157
  }
144
158
 
145
159
  .menu-icon {
146
160
  flex-shrink: 0;
147
- color: ${bdTheme('mutedForeground')};
161
+ color: var(--sio-label-3);
148
162
  }
149
163
 
150
164
  .menu-item.destructive .menu-icon {
151
- color: ${bdTheme('destructive')};
165
+ color: var(--sio-red);
152
166
  }
153
167
 
154
168
  .menu-label {
@@ -156,30 +170,9 @@ export class SioDropdownMenu extends DeesElement {
156
170
  }
157
171
 
158
172
  .divider {
159
- height: 1px;
160
- background: ${bdTheme('border')};
161
- margin: ${unsafeCSS(spacing["1"])} 0;
162
- }
163
-
164
- /* Mobile adjustments */
165
- @media (max-width: 600px) {
166
- .dropdown {
167
- position: fixed;
168
- top: auto !important;
169
- left: ${unsafeCSS(spacing["4"])} !important;
170
- right: ${unsafeCSS(spacing["4"])};
171
- bottom: ${unsafeCSS(spacing["4"])};
172
- width: auto;
173
- transform-origin: bottom center;
174
- }
175
-
176
- .dropdown.open {
177
- transform: translateY(0) scale(1);
178
- }
179
-
180
- .dropdown:not(.open) {
181
- transform: translateY(10px) scale(0.95);
182
- }
173
+ height: var(--sio-hairline);
174
+ background: var(--sio-separator);
175
+ margin: 4px 6px;
183
176
  }
184
177
  `,
185
178
  ];
@@ -190,109 +183,98 @@ export class SioDropdownMenu extends DeesElement {
190
183
  <slot></slot>
191
184
  </div>
192
185
  <div class="dropdown ${this.isOpen ? 'open' : ''} align-${this.align}">
193
- ${this.items.map(item =>
194
- item.divider ? html`
195
- <div class="divider"></div>
196
- ` : html`
197
- <button
198
- class="menu-item ${item.destructive ? 'destructive' : ''} ${item.disabled ? 'disabled' : ''}"
199
- @click=${() => this.handleItemClick(item)}
200
- ?disabled=${item.disabled}
201
- >
202
- ${item.icon ? html`
203
- <sio-icon class="menu-icon" icon="${item.icon}" size="16"></sio-icon>
204
- ` : ''}
205
- <span class="menu-label">${item.label}</span>
206
- </button>
207
- `
186
+ ${this.items.map((item) =>
187
+ item.divider
188
+ ? html`<div class="divider"></div>`
189
+ : html`
190
+ <button
191
+ class="menu-item ${item.destructive ? 'destructive' : ''} ${item.disabled
192
+ ? 'disabled'
193
+ : ''}"
194
+ @click=${() => this.handleItemClick(item)}
195
+ ?disabled=${item.disabled}
196
+ >
197
+ ${item.icon
198
+ ? html`<sio-icon class="menu-icon" icon="${item.icon}" size="15"></sio-icon>`
199
+ : ''}
200
+ <span class="menu-label">${item.label}</span>
201
+ </button>
202
+ `,
208
203
  )}
209
204
  </div>
210
205
  `;
211
206
  }
212
207
 
213
208
  private toggleDropdown = (e: Event) => {
214
- console.log('[Dropdown] Toggle called, current state:', this.isOpen);
215
209
  e.preventDefault();
216
210
  e.stopPropagation();
217
-
211
+
218
212
  this.isOpen = !this.isOpen;
219
- console.log('[Dropdown] New state:', this.isOpen);
220
-
213
+
221
214
  if (this.isOpen) {
222
- this.addDocumentListener();
215
+ this.addDocumentListeners();
223
216
  } else {
224
- this.removeDocumentListener();
217
+ this.removeDocumentListeners();
225
218
  }
226
- }
227
-
228
- private updateDropdownPosition() {
229
- // For absolute positioning, we don't need to calculate position dynamically
230
- // The CSS handles it with top: calc(100% + 10px) and right: 0
231
- console.log('[Dropdown] Position is handled by CSS (absolute positioning)');
232
- }
219
+ };
233
220
 
234
221
  private handleItemClick(item: IDropdownMenuItem) {
235
222
  if (item.disabled || item.divider) return;
236
-
223
+
237
224
  this.isOpen = false;
238
- this.removeDocumentListener();
239
-
240
- // Dispatch custom event with the selected item
241
- this.dispatchEvent(new CustomEvent('item-selected', {
242
- detail: { item },
243
- bubbles: true,
244
- composed: true
245
- }));
225
+ this.removeDocumentListeners();
226
+
227
+ this.dispatchEvent(
228
+ new CustomEvent('item-selected', {
229
+ detail: { item },
230
+ bubbles: true,
231
+ composed: true,
232
+ }),
233
+ );
246
234
  }
247
235
 
248
- private addDocumentListener() {
249
- // Close dropdown when clicking outside
236
+ private addDocumentListeners() {
237
+ // Close when clicking outside the component.
250
238
  this.documentClickHandler = (e: MouseEvent) => {
251
239
  const path = e.composedPath();
252
240
  if (!path.includes(this)) {
253
- this.isOpen = false;
254
- this.removeDocumentListener();
241
+ this.close();
255
242
  }
256
243
  };
257
-
258
- // Update position on scroll/resize
259
- this.scrollHandler = () => this.updateDropdownPosition();
244
+
245
+ // Close on small viewports to avoid stale absolute positioning.
260
246
  this.resizeHandler = () => {
261
- this.updateDropdownPosition();
262
247
  if (window.innerWidth <= 600) {
263
- // Close on mobile resize to prevent positioning issues
264
- this.isOpen = false;
265
- this.removeDocumentListener();
248
+ this.close();
266
249
  }
267
250
  };
268
-
269
- // Delay to avoid immediate closing
251
+
252
+ // Delay to avoid the opening click closing the menu again.
270
253
  setTimeout(() => {
254
+ if (!this.documentClickHandler || !this.resizeHandler) return;
271
255
  document.addEventListener('click', this.documentClickHandler);
272
- window.addEventListener('scroll', this.scrollHandler, true);
273
256
  window.addEventListener('resize', this.resizeHandler);
274
257
  }, 0);
275
258
  }
276
259
 
277
- private removeDocumentListener() {
260
+ private removeDocumentListeners() {
278
261
  if (this.documentClickHandler) {
279
262
  document.removeEventListener('click', this.documentClickHandler);
280
- }
281
- if (this.scrollHandler) {
282
- window.removeEventListener('scroll', this.scrollHandler, true);
263
+ this.documentClickHandler = undefined;
283
264
  }
284
265
  if (this.resizeHandler) {
285
266
  window.removeEventListener('resize', this.resizeHandler);
267
+ this.resizeHandler = undefined;
286
268
  }
287
269
  }
288
270
 
289
271
  public async disconnectedCallback() {
290
272
  await super.disconnectedCallback();
291
- this.removeDocumentListener();
273
+ this.removeDocumentListeners();
292
274
  }
293
275
 
294
276
  public close() {
295
277
  this.isOpen = false;
296
- this.removeDocumentListener();
278
+ this.removeDocumentListeners();
297
279
  }
298
- }
280
+ }