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