@social.io/catalog 1.3.0 → 2.0.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 (124) hide show
  1. package/.smartconfig.json +51 -0
  2. package/dist_bundle/bundle.js +5450 -3267
  3. package/dist_ts_web/00_commitinfo_data.js +3 -3
  4. package/dist_ts_web/elements/index.d.ts +20 -3
  5. package/dist_ts_web/elements/index.js +27 -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 +37 -0
  15. package/dist_ts_web/elements/sio-channel-rail.js +275 -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-message-input.d.ts +25 -4
  45. package/dist_ts_web/elements/sio-message-input.js +231 -226
  46. package/dist_ts_web/elements/sio-paper-thumb.d.ts +24 -0
  47. package/dist_ts_web/elements/sio-paper-thumb.js +293 -0
  48. package/dist_ts_web/elements/sio-pdf-viewer.d.ts +2 -0
  49. package/dist_ts_web/elements/sio-pdf-viewer.js +344 -244
  50. package/dist_ts_web/elements/sio-segmented.d.ts +32 -0
  51. package/dist_ts_web/elements/sio-segmented.js +217 -0
  52. package/dist_ts_web/elements/sio-step-timeline.d.ts +28 -0
  53. package/dist_ts_web/elements/sio-step-timeline.js +222 -0
  54. package/dist_ts_web/elements/sio-tab-bar.d.ts +36 -0
  55. package/dist_ts_web/elements/sio-tab-bar.js +232 -0
  56. package/dist_ts_web/elements/sio-unread-badge.d.ts +25 -0
  57. package/dist_ts_web/elements/sio-unread-badge.js +203 -0
  58. package/dist_ts_web/elements/sio-waveform.d.ts +34 -0
  59. package/dist_ts_web/elements/sio-waveform.js +304 -0
  60. package/dist_ts_web/elements/tokens.d.ts +70 -0
  61. package/dist_ts_web/elements/tokens.js +277 -0
  62. package/dist_ts_web/pages/firstpage.d.ts +5 -0
  63. package/dist_ts_web/pages/firstpage.js +21 -2
  64. package/dist_ts_web/pages/mainpage.d.ts +6 -0
  65. package/dist_ts_web/pages/mainpage.js +111 -39
  66. package/{license → license.md} +3 -1
  67. package/package.json +23 -29
  68. package/readme.hints.md +81 -0
  69. package/readme.md +85 -151
  70. package/ts_web/00_commitinfo_data.ts +2 -2
  71. package/ts_web/elements/index.ts +30 -7
  72. package/ts_web/elements/sio-ai-card.ts +175 -0
  73. package/ts_web/elements/sio-avatar.ts +295 -0
  74. package/ts_web/elements/sio-bucket-header.ts +157 -0
  75. package/ts_web/elements/sio-button.ts +149 -127
  76. package/ts_web/elements/sio-channel-rail.ts +243 -0
  77. package/ts_web/elements/sio-chip.ts +134 -0
  78. package/ts_web/elements/sio-cmdk.ts +461 -0
  79. package/ts_web/elements/sio-combox.ts +327 -204
  80. package/ts_web/elements/sio-composer.ts +306 -0
  81. package/ts_web/elements/sio-conversation-selector.ts +350 -228
  82. package/ts_web/elements/sio-conversation-view.ts +573 -457
  83. package/ts_web/elements/sio-dropdown-menu.ts +112 -130
  84. package/ts_web/elements/sio-fab.ts +192 -227
  85. package/ts_web/elements/sio-glass-toolbar.ts +140 -0
  86. package/ts_web/elements/sio-icon.ts +147 -25
  87. package/ts_web/elements/sio-image-lightbox.ts +62 -64
  88. package/ts_web/elements/sio-inset-list.ts +140 -0
  89. package/ts_web/elements/sio-kbd.ts +80 -0
  90. package/ts_web/elements/sio-list-row.ts +393 -0
  91. package/ts_web/elements/sio-message-input.ts +142 -221
  92. package/ts_web/elements/sio-paper-thumb.ts +244 -0
  93. package/ts_web/elements/sio-pdf-viewer.ts +58 -60
  94. package/ts_web/elements/sio-segmented.ts +183 -0
  95. package/ts_web/elements/sio-step-timeline.ts +179 -0
  96. package/ts_web/elements/sio-tab-bar.ts +195 -0
  97. package/ts_web/elements/sio-unread-badge.ts +147 -0
  98. package/ts_web/elements/sio-waveform.ts +239 -0
  99. package/ts_web/elements/tokens.ts +297 -0
  100. package/ts_web/pages/firstpage.ts +20 -1
  101. package/ts_web/pages/mainpage.ts +111 -39
  102. package/dist_bundle/bundle.js.map +0 -7
  103. package/dist_ts_web/elements/00colors.d.ts +0 -108
  104. package/dist_ts_web/elements/00colors.js +0 -137
  105. package/dist_ts_web/elements/00fonts.d.ts +0 -60
  106. package/dist_ts_web/elements/00fonts.js +0 -129
  107. package/dist_ts_web/elements/00tokens.d.ts +0 -123
  108. package/dist_ts_web/elements/00tokens.js +0 -176
  109. package/dist_ts_web/elements/sio-conversation-list.d.ts +0 -20
  110. package/dist_ts_web/elements/sio-conversation-list.js +0 -495
  111. package/dist_ts_web/elements/sio-recorder.d.ts +0 -60
  112. package/dist_ts_web/elements/sio-recorder.js +0 -173
  113. package/dist_ts_web/elements/sio-subwidget-conversations.d.ts +0 -16
  114. package/dist_ts_web/elements/sio-subwidget-conversations.js +0 -350
  115. package/dist_ts_web/elements/sio-subwidget-onboardme.d.ts +0 -7
  116. package/dist_ts_web/elements/sio-subwidget-onboardme.js +0 -243
  117. package/dist_watch/bundle.js +0 -81694
  118. package/dist_watch/bundle.js.map +0 -7
  119. package/dist_watch/index.html +0 -25
  120. package/npmextra.json +0 -19
  121. package/ts_web/elements/00colors.ts +0 -164
  122. package/ts_web/elements/00fonts.ts +0 -145
  123. package/ts_web/elements/00tokens.ts +0 -197
  124. package/ts_web/elements/sio-recorder.ts +0 -213
@@ -1,242 +1,247 @@
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, typography } from './00fonts.js';
6
- @customElement('sio-message-input')
7
- export class SioMessageInput extends DeesElement {
8
- static demo = () => html `
9
- <sio-message-input style="width: 600px;"></sio-message-input>
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 { SioComposer } from './sio-composer.js';
38
+ SioComposer;
39
+ /**
40
+ * sio-message-input — the widget's composer row, a thin shell around
41
+ * sio-composer (v7 SocialIOWidget.jsx composer).
42
+ *
43
+ * Adds the widget-level concerns on top of the composer primitive:
44
+ * a hidden file input behind the composer's attach button, the
45
+ * email-capture variant for the away state, and the keyboard-visibility
46
+ * focus events the combox uses on phablet.
47
+ *
48
+ * Events (bubbles, composed):
49
+ * send-message { text, attachments: File[] }
50
+ * files-selected { files: File[] }
51
+ * input-focus / input-blur — phablet keyboard handling
52
+ */
53
+ let SioMessageInput = (() => {
54
+ let _classDecorators = [customElement('sio-message-input')];
55
+ let _classDescriptor;
56
+ let _classExtraInitializers = [];
57
+ let _classThis;
58
+ let _classSuper = DeesElement;
59
+ let _placeholder_decorators;
60
+ let _placeholder_initializers = [];
61
+ let _placeholder_extraInitializers = [];
62
+ let _disabled_decorators;
63
+ let _disabled_initializers = [];
64
+ let _disabled_extraInitializers = [];
65
+ let _variant_decorators;
66
+ let _variant_initializers = [];
67
+ let _variant_extraInitializers = [];
68
+ let _accent_decorators;
69
+ let _accent_initializers = [];
70
+ let _accent_extraInitializers = [];
71
+ let _attach_decorators;
72
+ let _attach_initializers = [];
73
+ let _attach_extraInitializers = [];
74
+ let _pendingAttachments_decorators;
75
+ let _pendingAttachments_initializers = [];
76
+ let _pendingAttachments_extraInitializers = [];
77
+ var SioMessageInput = 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
+ _placeholder_decorators = [property({ type: String })];
82
+ _disabled_decorators = [property({ type: Boolean, reflect: true })];
83
+ _variant_decorators = [property({ type: String })];
84
+ _accent_decorators = [property({ type: String })];
85
+ _attach_decorators = [property({ type: Boolean })];
86
+ _pendingAttachments_decorators = [state()];
87
+ __esDecorate(this, null, _placeholder_decorators, { kind: "accessor", name: "placeholder", static: false, private: false, access: { has: obj => "placeholder" in obj, get: obj => obj.placeholder, set: (obj, value) => { obj.placeholder = value; } }, metadata: _metadata }, _placeholder_initializers, _placeholder_extraInitializers);
88
+ __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);
89
+ __esDecorate(this, null, _variant_decorators, { kind: "accessor", name: "variant", static: false, private: false, access: { has: obj => "variant" in obj, get: obj => obj.variant, set: (obj, value) => { obj.variant = value; } }, metadata: _metadata }, _variant_initializers, _variant_extraInitializers);
90
+ __esDecorate(this, null, _accent_decorators, { kind: "accessor", name: "accent", static: false, private: false, access: { has: obj => "accent" in obj, get: obj => obj.accent, set: (obj, value) => { obj.accent = value; } }, metadata: _metadata }, _accent_initializers, _accent_extraInitializers);
91
+ __esDecorate(this, null, _attach_decorators, { kind: "accessor", name: "attach", static: false, private: false, access: { has: obj => "attach" in obj, get: obj => obj.attach, set: (obj, value) => { obj.attach = value; } }, metadata: _metadata }, _attach_initializers, _attach_extraInitializers);
92
+ __esDecorate(this, null, _pendingAttachments_decorators, { kind: "accessor", name: "pendingAttachments", static: false, private: false, access: { has: obj => "pendingAttachments" in obj, get: obj => obj.pendingAttachments, set: (obj, value) => { obj.pendingAttachments = value; } }, metadata: _metadata }, _pendingAttachments_initializers, _pendingAttachments_extraInitializers);
93
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
94
+ SioMessageInput = _classThis = _classDescriptor.value;
95
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
96
+ }
97
+ static demo = () => html `
98
+ <div
99
+ style="display: grid; gap: 18px; max-width: 380px; padding: 24px; background: var(--sio-bg); font-family: var(--sio-font-sf);"
100
+ >
101
+ <div
102
+ style="font-size: 11px; font-weight: 700; letter-spacing: 0.06px; text-transform: uppercase; color: var(--sio-label-3);"
103
+ >
104
+ Widget composer
105
+ </div>
106
+ <div style="background: var(--sio-surface); border-radius: 16px; padding-top: 12px;">
107
+ <sio-message-input placeholder="Write a message…"></sio-message-input>
108
+ </div>
109
+
110
+ <div
111
+ style="font-size: 11px; font-weight: 700; letter-spacing: 0.06px; text-transform: uppercase; color: var(--sio-label-3);"
112
+ >
113
+ Email capture — team is away
114
+ </div>
115
+ <div style="background: var(--sio-surface); border-radius: 16px; padding-top: 12px;">
116
+ <sio-message-input variant="email"></sio-message-input>
117
+ </div>
118
+ </div>
10
119
  `;
11
- @property({ type: String })
12
- accessor placeholder = 'Type a message...';
13
- @property({ type: Boolean })
14
- accessor disabled = false;
15
- @state()
16
- accessor messageText = '';
17
- @state()
18
- accessor pendingAttachments = [];
19
- static styles = [
20
- cssManager.defaultStyles,
21
- css `
120
+ #placeholder_accessor_storage = __runInitializers(this, _placeholder_initializers, '');
121
+ /** field placeholder; message variant defaults to "Write a message…", email to "you@email.com" */
122
+ get placeholder() { return this.#placeholder_accessor_storage; }
123
+ set placeholder(value) { this.#placeholder_accessor_storage = value; }
124
+ #disabled_accessor_storage = (__runInitializers(this, _placeholder_extraInitializers), __runInitializers(this, _disabled_initializers, false));
125
+ get disabled() { return this.#disabled_accessor_storage; }
126
+ set disabled(value) { this.#disabled_accessor_storage = value; }
127
+ #variant_accessor_storage = (__runInitializers(this, _disabled_extraInitializers), __runInitializers(this, _variant_initializers, 'message'));
128
+ /** 'message' (default) or 'email' — the away-state email capture */
129
+ get variant() { return this.#variant_accessor_storage; }
130
+ set variant(value) { this.#variant_accessor_storage = value; }
131
+ #accent_accessor_storage = (__runInitializers(this, _variant_extraInitializers), __runInitializers(this, _accent_initializers, 'tint'));
132
+ /** send-button accent, forwarded to sio-composer */
133
+ get accent() { return this.#accent_accessor_storage; }
134
+ set accent(value) { this.#accent_accessor_storage = value; }
135
+ #attach_accessor_storage = (__runInitializers(this, _accent_extraInitializers), __runInitializers(this, _attach_initializers, false));
136
+ /** show the composer's attach "+" button (opens the file picker) */
137
+ get attach() { return this.#attach_accessor_storage; }
138
+ set attach(value) { this.#attach_accessor_storage = value; }
139
+ #pendingAttachments_accessor_storage = (__runInitializers(this, _attach_extraInitializers), __runInitializers(this, _pendingAttachments_initializers, []));
140
+ get pendingAttachments() { return this.#pendingAttachments_accessor_storage; }
141
+ set pendingAttachments(value) { this.#pendingAttachments_accessor_storage = value; }
142
+ static styles = [
143
+ ...sioElementStyles,
144
+ css `
22
145
  :host {
23
146
  display: block;
24
- font-family: ${unsafeCSS(fontFamilies.sans)};
25
- }
26
-
27
- .input-container {
28
- display: flex;
29
- align-items: flex-end;
30
- background: ${bdTheme('secondary')};
31
- border: 1px solid ${bdTheme('border')};
32
- border-radius: 24px;
33
- padding: 2px;
34
- transition: all 200ms ease;
35
- overflow: hidden;
36
- }
37
-
38
- .input-container:focus-within {
39
- border-color: ${bdTheme('ring')};
40
- background: ${bdTheme('background')};
41
- }
42
-
43
- .message-input {
44
- flex: 1;
45
- min-height: 44px;
46
- max-height: 120px;
47
- padding: 12px 16px;
48
- background: transparent;
49
- border: none;
50
- font-size: 15px;
51
- color: ${bdTheme('foreground')};
52
- outline: none;
53
- resize: none;
54
- font-family: ${unsafeCSS(fontFamilies.sans)};
55
- line-height: 1.5;
56
- }
57
-
58
- .message-input::placeholder {
59
- color: ${bdTheme('mutedForeground')};
60
- }
61
-
62
- .action-buttons {
63
- display: flex;
64
- gap: 4px;
65
- align-items: center;
66
- padding-right: 2px;
67
- }
68
-
69
- .action-button {
70
- width: 40px;
71
- height: 40px;
72
- border-radius: 50%;
73
- border: none;
74
- background: transparent;
75
- color: ${bdTheme('mutedForeground')};
76
- cursor: pointer;
77
- display: flex;
78
- align-items: center;
79
- justify-content: center;
80
- transition: all 120ms ease;
81
- position: relative;
82
- outline: none;
83
- }
84
-
85
- .action-button:hover {
86
- color: ${bdTheme('foreground')};
87
- background: ${bdTheme('hsl(0 0% 0% / 0.05)', 'hsl(0 0% 100% / 0.05)')};
88
- }
89
-
90
- .action-button:active {
91
- transform: scale(0.95);
92
- }
93
-
94
- .action-button.attachment {
95
- opacity: 0.7;
96
- }
97
-
98
- .action-button.attachment:hover {
99
- opacity: 1;
100
- }
101
-
102
- .action-button.send {
103
- background: ${bdTheme('primary')};
104
- color: white;
105
- margin-left: 2px;
147
+ font-family: var(--sio-font-sf);
106
148
  }
107
149
 
108
- .action-button.send:hover {
109
- background: ${bdTheme('hsl(221 83% 49%)', 'hsl(217 91% 65%)')};
110
- }
111
-
112
- .action-button.send:disabled {
113
- opacity: 0.3;
114
- cursor: not-allowed;
115
- }
116
-
117
- .action-button.send:disabled:hover {
118
- background: ${bdTheme('primary')};
119
- transform: none;
150
+ :host([disabled]) {
151
+ pointer-events: none;
152
+ opacity: 0.5;
120
153
  }
121
154
 
122
155
  .file-input {
123
156
  display: none;
124
157
  }
125
-
126
- /* Icon styles */
127
- sio-icon {
128
- width: 20px;
129
- height: 20px;
130
- }
131
-
132
- .action-button.send sio-icon {
133
- width: 18px;
134
- height: 18px;
135
- }
136
158
  `,
137
- ];
138
- render() {
139
- return html `
140
- <div class="input-container">
141
- <textarea
142
- class="message-input"
143
- placeholder="${this.placeholder}"
144
- .value=${this.messageText}
145
- @input=${this.handleInput}
146
- @keydown=${this.handleKeyDown}
147
- ?disabled=${this.disabled}
148
- rows="1"
149
- ></textarea>
150
-
151
- <div class="action-buttons">
152
- <input
153
- type="file"
154
- class="file-input"
155
- id="fileInput"
156
- multiple
157
- accept="image/*,.pdf,.doc,.docx,.txt"
158
- @change=${this.handleFileSelect}
159
- />
160
- <button
161
- class="action-button attachment"
162
- @click=${this.openFileSelector}
163
- ?disabled=${this.disabled}
164
- >
165
- <sio-icon icon="paperclip"></sio-icon>
166
- </button>
167
- <button
168
- class="action-button send"
169
- ?disabled=${!this.messageText.trim() || this.disabled}
170
- @click=${this.sendMessage}
171
- >
172
- <sio-icon icon="send"></sio-icon>
173
- </button>
174
- </div>
175
- </div>
159
+ ];
160
+ render() {
161
+ return html `
162
+ <sio-composer
163
+ variant=${this.variant}
164
+ accent=${this.accent}
165
+ ?attach=${this.attach}
166
+ ?auto-expand=${this.variant === 'message'}
167
+ placeholder=${this.variant === 'message' ? this.placeholder || 'Write a message…' : this.placeholder}
168
+ @composer-send=${this.handleComposerSend}
169
+ @composer-attach=${this.openFileSelector}
170
+ @focusin=${this.handleFocus}
171
+ @focusout=${this.handleBlur}
172
+ ></sio-composer>
173
+ <input
174
+ type="file"
175
+ class="file-input"
176
+ id="fileInput"
177
+ multiple
178
+ accept="image/*,.pdf,.doc,.docx,.txt"
179
+ @change=${this.handleFileSelect}
180
+ />
176
181
  `;
177
- }
178
- handleInput(event) {
179
- const textarea = event.target;
180
- this.messageText = textarea.value;
181
- // Auto-resize textarea
182
- textarea.style.height = 'auto';
183
- textarea.style.height = `${textarea.scrollHeight}px`;
184
- }
185
- handleKeyDown(event) {
186
- if (event.key === 'Enter' && !event.shiftKey) {
187
- event.preventDefault();
188
- this.sendMessage();
189
- }
190
- }
191
- sendMessage() {
192
- if (!this.messageText.trim() && this.pendingAttachments.length === 0) {
193
- return;
194
182
  }
195
- this.dispatchEvent(new CustomEvent('send-message', {
196
- detail: {
197
- text: this.messageText,
198
- attachments: this.pendingAttachments
199
- },
200
- bubbles: true,
201
- composed: true
202
- }));
203
- // Clear input
204
- this.messageText = '';
205
- this.pendingAttachments = [];
206
- // Reset textarea height
207
- const textarea = this.shadowRoot?.querySelector('.message-input');
208
- if (textarea) {
209
- textarea.style.height = 'auto';
183
+ handleComposerSend = (__runInitializers(this, _pendingAttachments_extraInitializers), (event) => {
184
+ // re-dispatch under the widget's send-message contract
185
+ event.stopPropagation();
186
+ this.dispatchEvent(new CustomEvent('send-message', {
187
+ detail: {
188
+ text: event.detail.text,
189
+ attachments: this.pendingAttachments,
190
+ },
191
+ bubbles: true,
192
+ composed: true,
193
+ }));
194
+ this.pendingAttachments = [];
195
+ });
196
+ handleFocus = () => {
197
+ this.dispatchEvent(new CustomEvent('input-focus', {
198
+ bubbles: true,
199
+ composed: true,
200
+ }));
201
+ };
202
+ handleBlur = () => {
203
+ this.dispatchEvent(new CustomEvent('input-blur', {
204
+ bubbles: true,
205
+ composed: true,
206
+ }));
207
+ };
208
+ openFileSelector = (event) => {
209
+ event.stopPropagation();
210
+ const fileInput = this.shadowRoot?.querySelector('#fileInput');
211
+ fileInput?.click();
212
+ };
213
+ handleFileSelect = (event) => {
214
+ const input = event.target;
215
+ const files = Array.from(input.files || []);
216
+ if (files.length === 0) {
217
+ return;
218
+ }
219
+ this.pendingAttachments = [...this.pendingAttachments, ...files];
220
+ this.dispatchEvent(new CustomEvent('files-selected', {
221
+ detail: { files },
222
+ bubbles: true,
223
+ composed: true,
224
+ }));
225
+ input.value = ''; // allow re-selection of the same file
226
+ };
227
+ focus() {
228
+ const field = this.shadowRoot
229
+ ?.querySelector('sio-composer')
230
+ ?.shadowRoot?.querySelector('.field');
231
+ field?.focus();
210
232
  }
211
- }
212
- openFileSelector() {
213
- const fileInput = this.shadowRoot?.querySelector('#fileInput');
214
- if (fileInput) {
215
- fileInput.click();
233
+ clear() {
234
+ const composer = this.shadowRoot?.querySelector('sio-composer');
235
+ if (composer) {
236
+ composer.value = '';
237
+ }
238
+ this.pendingAttachments = [];
216
239
  }
217
- }
218
- handleFileSelect(event) {
219
- const input = event.target;
220
- const files = Array.from(input.files || []);
221
- this.pendingAttachments = [...this.pendingAttachments, ...files];
222
- this.dispatchEvent(new CustomEvent('files-selected', {
223
- detail: { files },
224
- bubbles: true,
225
- composed: true
226
- }));
227
- input.value = ''; // Clear input for re-selection
228
- }
229
- focus() {
230
- const textarea = this.shadowRoot?.querySelector('.message-input');
231
- textarea?.focus();
232
- }
233
- clear() {
234
- this.messageText = '';
235
- this.pendingAttachments = [];
236
- const textarea = this.shadowRoot?.querySelector('.message-input');
237
- if (textarea) {
238
- textarea.style.height = 'auto';
240
+ static {
241
+ __runInitializers(_classThis, _classExtraInitializers);
239
242
  }
240
- }
241
- }
242
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lvLW1lc3NhZ2UtaW5wdXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90c193ZWIvZWxlbWVudHMvc2lvLW1lc3NhZ2UtaW5wdXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFdBQVcsRUFDWCxRQUFRLEVBQ1IsSUFBSSxFQUNKLGFBQWEsRUFFYixVQUFVLEVBQ1YsR0FBRyxFQUNILFNBQVMsRUFDVCxLQUFLLEdBQ04sTUFBTSw2QkFBNkIsQ0FBQztBQUVyQyx1QkFBdUI7QUFDdkIsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0RSxPQUFPLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQVF4RCxDQUFDLGFBQWEsQ0FBQyxtQkFBbUIsQ0FBQztBQUNuQyxNQUFNLE9BQU8sZUFBZ0IsU0FBUSxXQUFXO0lBQ3ZDLE1BQU0sQ0FBQyxJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFBOztHQUU5QixDQUFDO0lBRUYsQ0FBQyxRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7SUFDcEIsUUFBUSxDQUFDLFdBQVcsR0FBVyxtQkFBbUIsQ0FBQztJQUUxRCxDQUFDLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQztJQUNyQixRQUFRLENBQUMsUUFBUSxHQUFZLEtBQUssQ0FBQztJQUUxQyxDQUFDLEtBQUssRUFBRTtJQUNBLFFBQVEsQ0FBQyxXQUFXLEdBQVcsRUFBRSxDQUFDO0lBRTFDLENBQUMsS0FBSyxFQUFFO0lBQ0EsUUFBUSxDQUFDLGtCQUFrQixHQUFXLEVBQUUsQ0FBQztJQUUxQyxNQUFNLENBQUMsTUFBTSxHQUFHO1FBQ3JCLFVBQVUsQ0FBQyxhQUFh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
243
+ };
244
+ return SioMessageInput = _classThis;
245
+ })();
246
+ export { SioMessageInput };
247
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lvLW1lc3NhZ2UtaW5wdXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90c193ZWIvZWxlbWVudHMvc2lvLW1lc3NhZ2UtaW5wdXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLE9BQU8sRUFDTCxXQUFXLEVBQ1gsSUFBSSxFQUNKLFFBQVEsRUFDUixLQUFLLEVBQ0wsYUFBYSxFQUNiLEdBQUcsR0FFSixNQUFNLDZCQUE2QixDQUFDO0FBRXJDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFxRCxNQUFNLG1CQUFtQixDQUFDO0FBQ25HLFdBQVcsQ0FBQztBQVFaOzs7Ozs7Ozs7Ozs7O0dBYUc7SUFFVSxlQUFlOzRCQUQzQixhQUFhLENBQUMsbUJBQW1CLENBQUM7Ozs7c0JBQ0UsV0FBVzs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsrQkFBbkIsU0FBUSxXQUFXOzs7O3VDQTBCN0MsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDO29DQUcxQixRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQzttQ0FJMUMsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDO2tDQUkxQixRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7a0NBSTFCLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQzs4Q0FHM0IsS0FBSyxFQUFFO1lBakJSLHNMQUFnQixXQUFXLDZCQUFYLFdBQVcsaUdBQU07WUFHakMsNktBQWdCLFFBQVEsNkJBQVIsUUFBUSwyRkFBUztZQUlqQywwS0FBZ0IsT0FBTyw2QkFBUCxPQUFPLHlGQUFrQztZQUl6RCx1S0FBZ0IsTUFBTSw2QkFBTixNQUFNLHVGQUE4QjtZQUlw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
@@ -0,0 +1,24 @@
1
+ import { DeesElement, type TemplateResult } from '@design.estate/dees-element';
2
+ export type TSioPaperDirection = 'in' | 'out';
3
+ declare global {
4
+ interface HTMLElementTagNameMap {
5
+ 'sio-paper-thumb': SioPaperThumb;
6
+ }
7
+ }
8
+ /**
9
+ * sio-paper-thumb — v7 physical-letter thumbnail (48×62, compact 38×50).
10
+ *
11
+ * Incoming letters render as cream scanned paper with a torn top edge;
12
+ * outgoing letters as lilac composed paper with a red-striped stamp square.
13
+ * An 18px direction badge (green ↓ in / letters-brown ↑ out) overhangs the
14
+ * bottom-right corner with a 2px surface ring.
15
+ */
16
+ export declare class SioPaperThumb extends DeesElement {
17
+ static demo: () => TemplateResult<1>;
18
+ /** 'in' = physically arrived + scanned (cream, torn edge); 'out' = composed + mailed (lilac, stamp). */
19
+ accessor direction: TSioPaperDirection;
20
+ /** 38×50 instead of 48×62, for cozy/compact list densities. */
21
+ accessor compact: boolean;
22
+ static styles: import("@design.estate/dees-element").CSSResult[];
23
+ render(): TemplateResult;
24
+ }