aimeat 1.30.2 → 1.32.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/locales/en.json +246 -1
- package/dist/locales/fi.json +246 -1
- package/dist/public/components/InboxLink.js +29 -0
- package/dist/public/components/offer-card-view.js +87 -0
- package/dist/public/css/views/companies.css +65 -0
- package/dist/public/css/views/inbox.css +153 -1
- package/dist/public/css/views/members.css +33 -0
- package/dist/public/css/views/my-company.css +315 -0
- package/dist/public/css/views/profile.css +22 -0
- package/dist/public/js/services/messages.js +21 -3
- package/dist/public/js/services/notebook.js +16 -6
- package/dist/public/llms-template.txt +7 -0
- package/dist/public/spa.html +14 -0
- package/dist/public/views/companies.js +190 -0
- package/dist/public/views/members.js +42 -0
- package/dist/public/views/my-company.js +664 -0
- package/dist/public/views/portfolio-themes.js +77 -0
- package/dist/public/views/profile/agents-tab.js +4 -1
- package/dist/public/views/profile/discover-tab.js +118 -0
- package/dist/public/views/profile/inbox-tab.js +663 -16
- package/dist/public/views/profile/landing-page.js +2 -1
- package/dist/public/views/profile/notebook-card.js +11 -3
- package/dist/public/views/profile/offers-tab.js +5 -24
- package/dist/public/views/profile/organisms/home.js +5 -3
- package/dist/public/views/profile/organisms/mindmap.js +14 -3
- package/dist/public/views/profile/organisms/workspace.js +5 -2
- package/dist/public/views/profile/organisms-tab.js +12 -4
- package/dist/public/views/profile.js +2 -0
- package/dist/src/cli/connect/mcp/tools/core.d.ts.map +1 -1
- package/dist/src/cli/connect/mcp/tools/core.js +34 -0
- package/dist/src/cli/connect/mcp/tools/core.js.map +1 -1
- package/dist/src/cli/connect/mcp/tools/dm-messages.d.ts +1 -0
- package/dist/src/cli/connect/mcp/tools/dm-messages.d.ts.map +1 -1
- package/dist/src/cli/connect/mcp/tools/dm-messages.js +23 -0
- package/dist/src/cli/connect/mcp/tools/dm-messages.js.map +1 -1
- package/dist/src/cli/connect/mcp/tools/organisms.d.ts.map +1 -1
- package/dist/src/cli/connect/mcp/tools/organisms.js +31 -0
- package/dist/src/cli/connect/mcp/tools/organisms.js.map +1 -1
- package/dist/src/cli/connect/mcp/tools/workspaces.d.ts.map +1 -1
- package/dist/src/cli/connect/mcp/tools/workspaces.js +4 -0
- package/dist/src/cli/connect/mcp/tools/workspaces.js.map +1 -1
- package/dist/src/generated/api-types.d.ts +249 -0
- package/dist/src/generated/api-types.d.ts.map +1 -1
- package/dist/src/generated/prisma-postgres/edge.js +6 -3
- package/dist/src/generated/prisma-postgres/index-browser.js +3 -0
- package/dist/src/generated/prisma-postgres/index.d.ts +112 -1
- package/dist/src/generated/prisma-postgres/index.js +6 -3
- package/dist/src/generated/prisma-postgres/package.json +1 -1
- package/dist/src/generated/prisma-postgres/schema.prisma +4 -0
- package/dist/src/generated/prisma-postgres/wasm.js +6 -3
- package/dist/src/mcp/annotations.d.ts.map +1 -1
- package/dist/src/mcp/annotations.js +2 -0
- package/dist/src/mcp/annotations.js.map +1 -1
- package/dist/src/mcp/catalog/definitions.d.ts.map +1 -1
- package/dist/src/mcp/catalog/definitions.js +33 -1
- package/dist/src/mcp/catalog/definitions.js.map +1 -1
- package/dist/src/mcp/catalog/scopes.d.ts.map +1 -1
- package/dist/src/mcp/catalog/scopes.js +1 -0
- package/dist/src/mcp/catalog/scopes.js.map +1 -1
- package/dist/src/mcp/catalog/surfaces.d.ts.map +1 -1
- package/dist/src/mcp/catalog/surfaces.js +7 -4
- package/dist/src/mcp/catalog/surfaces.js.map +1 -1
- package/dist/src/mcp/core.d.ts.map +1 -1
- package/dist/src/mcp/core.js +49 -0
- package/dist/src/mcp/core.js.map +1 -1
- package/dist/src/mcp/dm-messages.d.ts +2 -0
- package/dist/src/mcp/dm-messages.d.ts.map +1 -1
- package/dist/src/mcp/dm-messages.js +45 -1
- package/dist/src/mcp/dm-messages.js.map +1 -1
- package/dist/src/models/message-schemas.d.ts +140 -2
- package/dist/src/models/message-schemas.d.ts.map +1 -1
- package/dist/src/models/message-schemas.js +60 -3
- package/dist/src/models/message-schemas.js.map +1 -1
- package/dist/src/routes/bootstrap.d.ts.map +1 -1
- package/dist/src/routes/bootstrap.js +3 -0
- package/dist/src/routes/bootstrap.js.map +1 -1
- package/dist/src/routes/discover.d.ts +22 -0
- package/dist/src/routes/discover.d.ts.map +1 -0
- package/dist/src/routes/discover.js +123 -0
- package/dist/src/routes/discover.js.map +1 -0
- package/dist/src/routes/federation-sync.d.ts.map +1 -1
- package/dist/src/routes/federation-sync.js +69 -2
- package/dist/src/routes/federation-sync.js.map +1 -1
- package/dist/src/routes/messages.d.ts.map +1 -1
- package/dist/src/routes/messages.js +102 -3
- package/dist/src/routes/messages.js.map +1 -1
- package/dist/src/routes/organisms.d.ts +3 -0
- package/dist/src/routes/organisms.d.ts.map +1 -1
- package/dist/src/routes/organisms.js +11 -32
- package/dist/src/routes/organisms.js.map +1 -1
- package/dist/src/routes/portal.d.ts.map +1 -1
- package/dist/src/routes/portal.js +3 -0
- package/dist/src/routes/portal.js.map +1 -1
- package/dist/src/routes/portfolio.d.ts.map +1 -1
- package/dist/src/routes/portfolio.js +30 -0
- package/dist/src/routes/portfolio.js.map +1 -1
- package/dist/src/server-bootstrap/routes-loader.d.ts.map +1 -1
- package/dist/src/server-bootstrap/routes-loader.js +2 -0
- package/dist/src/server-bootstrap/routes-loader.js.map +1 -1
- package/dist/src/services/connect-tunnel.d.ts +3 -0
- package/dist/src/services/connect-tunnel.d.ts.map +1 -1
- package/dist/src/services/connect-tunnel.js +6 -0
- package/dist/src/services/connect-tunnel.js.map +1 -1
- package/dist/src/services/discovery/__tests__/discovery.test.d.ts +2 -0
- package/dist/src/services/discovery/__tests__/discovery.test.d.ts.map +1 -0
- package/dist/src/services/discovery/__tests__/discovery.test.js +178 -0
- package/dist/src/services/discovery/__tests__/discovery.test.js.map +1 -0
- package/dist/src/services/discovery/classify.d.ts +36 -0
- package/dist/src/services/discovery/classify.d.ts.map +1 -0
- package/dist/src/services/discovery/classify.js +61 -0
- package/dist/src/services/discovery/classify.js.map +1 -0
- package/dist/src/services/discovery/facets.d.ts +21 -0
- package/dist/src/services/discovery/facets.d.ts.map +1 -0
- package/dist/src/services/discovery/facets.js +0 -0
- package/dist/src/services/discovery/facets.js.map +1 -0
- package/dist/src/services/discovery/index.d.ts +22 -0
- package/dist/src/services/discovery/index.d.ts.map +1 -0
- package/dist/src/services/discovery/index.js +22 -0
- package/dist/src/services/discovery/index.js.map +1 -0
- package/dist/src/services/discovery/normalize.d.ts +25 -0
- package/dist/src/services/discovery/normalize.d.ts.map +1 -0
- package/dist/src/services/discovery/normalize.js +108 -0
- package/dist/src/services/discovery/normalize.js.map +1 -0
- package/dist/src/services/discovery/registry.d.ts +30 -0
- package/dist/src/services/discovery/registry.d.ts.map +1 -0
- package/dist/src/services/discovery/registry.js +31 -0
- package/dist/src/services/discovery/registry.js.map +1 -0
- package/dist/src/services/discovery/run.d.ts +23 -0
- package/dist/src/services/discovery/run.d.ts.map +1 -0
- package/dist/src/services/discovery/run.js +20 -0
- package/dist/src/services/discovery/run.js.map +1 -0
- package/dist/src/services/discovery/setup.d.ts +16 -0
- package/dist/src/services/discovery/setup.d.ts.map +1 -0
- package/dist/src/services/discovery/setup.js +12 -0
- package/dist/src/services/discovery/setup.js.map +1 -0
- package/dist/src/services/discovery/sources/memory-source.d.ts +24 -0
- package/dist/src/services/discovery/sources/memory-source.d.ts.map +1 -0
- package/dist/src/services/discovery/sources/memory-source.js +183 -0
- package/dist/src/services/discovery/sources/memory-source.js.map +1 -0
- package/dist/src/services/discovery/sources/table-sources.d.ts +27 -0
- package/dist/src/services/discovery/sources/table-sources.d.ts.map +1 -0
- package/dist/src/services/discovery/sources/table-sources.js +128 -0
- package/dist/src/services/discovery/sources/table-sources.js.map +1 -0
- package/dist/src/services/discovery/types.d.ts +117 -0
- package/dist/src/services/discovery/types.d.ts.map +1 -0
- package/dist/src/services/discovery/types.js +19 -0
- package/dist/src/services/discovery/types.js.map +1 -0
- package/dist/src/services/handbooks/agent.d.ts +1 -1
- package/dist/src/services/handbooks/agent.d.ts.map +1 -1
- package/dist/src/services/handbooks/agent.js +9 -3
- package/dist/src/services/handbooks/agent.js.map +1 -1
- package/dist/src/services/message-broadcast.d.ts +49 -0
- package/dist/src/services/message-broadcast.d.ts.map +1 -0
- package/dist/src/services/message-broadcast.js +116 -0
- package/dist/src/services/message-broadcast.js.map +1 -0
- package/dist/src/services/message-delivery.d.ts.map +1 -1
- package/dist/src/services/message-delivery.js +3 -0
- package/dist/src/services/message-delivery.js.map +1 -1
- package/dist/src/services/message-send.d.ts +9 -1
- package/dist/src/services/message-send.d.ts.map +1 -1
- package/dist/src/services/message-send.js +11 -5
- package/dist/src/services/message-send.js.map +1 -1
- package/dist/src/services/presence.d.ts +8 -0
- package/dist/src/services/presence.d.ts.map +1 -1
- package/dist/src/services/presence.js +38 -0
- package/dist/src/services/presence.js.map +1 -1
- package/dist/src/services/workspace-enrichment.d.ts +15 -5
- package/dist/src/services/workspace-enrichment.d.ts.map +1 -1
- package/dist/src/services/workspace-enrichment.js +52 -14
- package/dist/src/services/workspace-enrichment.js.map +1 -1
- package/dist/src/storage/interface.d.ts +49 -0
- package/dist/src/storage/interface.d.ts.map +1 -1
- package/dist/src/storage/providers/mongodb/index.d.ts +1 -0
- package/dist/src/storage/providers/mongodb/index.d.ts.map +1 -1
- package/dist/src/storage/providers/mongodb/index.js +16 -0
- package/dist/src/storage/providers/mongodb/index.js.map +1 -1
- package/dist/src/storage/providers/sqlite/index.d.ts +1 -0
- package/dist/src/storage/providers/sqlite/index.d.ts.map +1 -1
- package/dist/src/storage/providers/sqlite/index.js +3 -0
- package/dist/src/storage/providers/sqlite/index.js.map +1 -1
- package/dist/src/storage/providers/sqlite/repos/direct-message.d.ts +3 -0
- package/dist/src/storage/providers/sqlite/repos/direct-message.d.ts.map +1 -1
- package/dist/src/storage/providers/sqlite/repos/direct-message.js +15 -2
- package/dist/src/storage/providers/sqlite/repos/direct-message.js.map +1 -1
- package/dist/src/storage/providers/sqlite/schema.d.ts.map +1 -1
- package/dist/src/storage/providers/sqlite/schema.js +10 -0
- package/dist/src/storage/providers/sqlite/schema.js.map +1 -1
- package/dist/src/storage/repositories/direct-message.repository.d.ts +3 -0
- package/dist/src/storage/repositories/direct-message.repository.d.ts.map +1 -1
- package/package.json +1 -1
- package/prisma/schema.postgres.prisma +4 -0
- package/prisma/schema.prisma +4 -0
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file companies.css
|
|
3
|
+
* @description Styles for the public company directory + company page view (cm- prefix). Two-column:
|
|
4
|
+
* directory list (left) + selected company's public profile + catalogue (right). Offer cards reuse
|
|
5
|
+
* the of-* classes from offers.css (preloaded). Theme.css variables only (dark-theme safe).
|
|
6
|
+
* @version-history v0.1.0 — 2026-06-23 — initial
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
.cm-container { max-width: 1100px; margin: 0 auto; padding: 2rem 1.25rem 4rem; }
|
|
10
|
+
.cm-center { display: flex; justify-content: center; padding: 4rem 0; }
|
|
11
|
+
.cm-header { margin-bottom: 1.5rem; }
|
|
12
|
+
.cm-title { font-size: 1.8rem; font-weight: 700; color: var(--text-bright); margin: 0 0 0.4rem; }
|
|
13
|
+
.cm-desc { color: var(--text-dim); margin: 0; line-height: 1.5; }
|
|
14
|
+
|
|
15
|
+
.cm-card { background: var(--bg-card); border: 1px solid var(--border); border-radius: var(--radius); padding: 1.5rem; max-width: 640px; margin: 1.5rem auto; }
|
|
16
|
+
|
|
17
|
+
.cm-grid { display: grid; grid-template-columns: 320px 1fr; gap: 1.5rem; align-items: start; }
|
|
18
|
+
@media (max-width: 760px) { .cm-grid { grid-template-columns: 1fr; } }
|
|
19
|
+
|
|
20
|
+
.cm-col { background: var(--bg-card); border: 1px solid var(--border); border-radius: var(--radius); padding: 1.25rem; }
|
|
21
|
+
.cm-col-title { font-size: 1.1rem; font-weight: 600; color: var(--text); margin: 0 0 0.75rem; }
|
|
22
|
+
.cm-empty { color: var(--text-muted); font-style: italic; margin: 0.5rem 0 1rem; }
|
|
23
|
+
.cm-mini { color: var(--text-muted); font-size: 0.78rem; }
|
|
24
|
+
.cm-form-title { font-size: 0.95rem; font-weight: 600; color: var(--text); margin: 0.5rem 0 0.5rem; }
|
|
25
|
+
|
|
26
|
+
.cm-dir-list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 0.4rem; }
|
|
27
|
+
.cm-dir-item {
|
|
28
|
+
width: 100%; text-align: left; background: var(--bg-elevated); border: 1px solid var(--border);
|
|
29
|
+
border-radius: var(--radius-sm); padding: 0.6rem 0.75rem; cursor: pointer;
|
|
30
|
+
display: flex; flex-direction: column; gap: 0.2rem; transition: border-color 0.15s, background 0.15s;
|
|
31
|
+
}
|
|
32
|
+
.cm-dir-item:hover { background: var(--bg-hover); }
|
|
33
|
+
.cm-dir-item.active { border-color: var(--accent); background: var(--accent-faint); }
|
|
34
|
+
.cm-dir-item { flex-direction: row; align-items: center; }
|
|
35
|
+
.cm-dir-logo { width: 36px; height: 36px; border-radius: var(--radius-sm); object-fit: cover; border: 1px solid var(--border); background: var(--bg-card); flex-shrink: 0; }
|
|
36
|
+
.cm-dir-text { display: flex; flex-direction: column; gap: 0.2rem; min-width: 0; }
|
|
37
|
+
.cm-dir-name { color: var(--text); font-weight: 600; }
|
|
38
|
+
.cm-dir-meta { color: var(--text-muted); font-size: 0.78rem; display: flex; align-items: center; gap: 0.4rem; flex-wrap: wrap; }
|
|
39
|
+
.cm-tag { background: var(--bg-card); border: 1px solid var(--border); border-radius: var(--radius-full); padding: 0.05rem 0.45rem; font-size: 0.7rem; color: var(--text-dim); }
|
|
40
|
+
|
|
41
|
+
.cm-profile-head { display: flex; flex-direction: column; gap: 0.25rem; margin-bottom: 1rem; padding-bottom: 0.75rem; border-bottom: 1px solid var(--border); }
|
|
42
|
+
.cm-profile-id { display: flex; align-items: center; gap: 0.85rem; }
|
|
43
|
+
.cm-profile-logo { width: 56px; height: 56px; border-radius: var(--radius-sm); object-fit: cover; border: 1px solid var(--border); background: var(--bg-elevated); }
|
|
44
|
+
.cm-profile-desc { color: var(--text-dim); margin: 0.3rem 0 0; line-height: 1.5; }
|
|
45
|
+
.cm-pf-link { align-self: flex-start; margin-top: 0.5rem; }
|
|
46
|
+
|
|
47
|
+
.cm-cat-list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 0.6rem; }
|
|
48
|
+
.cm-cat-item { list-style: none; }
|
|
49
|
+
.cm-not-callable { color: var(--text-muted); font-size: 0.75rem; margin: 0.2rem 0; }
|
|
50
|
+
|
|
51
|
+
.cm-result { margin-top: 0.5rem; padding: 0.6rem 0.7rem; background: var(--bg-card); border: 1px solid var(--border); border-radius: var(--radius-sm); }
|
|
52
|
+
.cm-result-msg { color: var(--text); font-size: 0.9rem; margin-bottom: 0.3rem; }
|
|
53
|
+
.cm-receipt { color: var(--accent-bright); font-size: 0.8rem; margin-top: 0.4rem; }
|
|
54
|
+
|
|
55
|
+
.cm-error { color: var(--danger); background: var(--danger-bg); border: 1px solid var(--danger-border); border-radius: var(--radius-sm); padding: 0.5rem 0.75rem; margin: 0.5rem 0; }
|
|
56
|
+
|
|
57
|
+
.cm-header-row { display: flex; justify-content: space-between; align-items: center; gap: 0.75rem; }
|
|
58
|
+
.cm-orders-panel { margin-bottom: 1.5rem; }
|
|
59
|
+
.cm-receipt-list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 0.4rem; }
|
|
60
|
+
.cm-receipt-row { background: var(--bg-elevated); border: 1px solid var(--border); border-radius: var(--radius-sm); padding: 0.6rem 0.75rem; }
|
|
61
|
+
.cm-receipt-top { display: flex; justify-content: space-between; align-items: baseline; gap: 0.5rem; }
|
|
62
|
+
.cm-receipt-title { color: var(--text); font-weight: 600; }
|
|
63
|
+
.cm-receipt-amt { color: var(--accent-bright); font-weight: 600; white-space: nowrap; }
|
|
64
|
+
.cm-receipt-meta { display: flex; flex-wrap: wrap; gap: 0.6rem; color: var(--text-muted); font-size: 0.78rem; margin-top: 0.2rem; }
|
|
65
|
+
.cm-receipt-code { margin-top: 0.25rem; }
|
|
@@ -163,7 +163,9 @@
|
|
|
163
163
|
}
|
|
164
164
|
|
|
165
165
|
/* ── Right pane ── */
|
|
166
|
-
|
|
166
|
+
/* min-height:0 lets this grid item respect the fixed .inbox-body height instead of growing to fit a tall
|
|
167
|
+
thread (grid/flex items default to min-height:auto = content size). */
|
|
168
|
+
.inbox-panel { display: flex; flex-direction: column; min-width: 0; min-height: 0; height: 100%; }
|
|
167
169
|
.inbox-panel--empty { align-items: center; justify-content: center; }
|
|
168
170
|
|
|
169
171
|
.inbox-empty { text-align: center; color: var(--text-dim); display: flex; flex-direction: column; align-items: center; gap: 8px; }
|
|
@@ -182,6 +184,7 @@
|
|
|
182
184
|
/* Message scroll area. */
|
|
183
185
|
.inbox-msgs {
|
|
184
186
|
flex: 1;
|
|
187
|
+
min-height: 0; /* required so the flex child scrolls instead of growing past the composer */
|
|
185
188
|
overflow-y: auto;
|
|
186
189
|
padding: 16px;
|
|
187
190
|
display: flex;
|
|
@@ -423,3 +426,152 @@
|
|
|
423
426
|
.inbox-tracked-err { color: var(--danger); }
|
|
424
427
|
.inbox-tracked-actions { display: flex; gap: 6px; flex-shrink: 0; }
|
|
425
428
|
.inbox-tracked-done { color: var(--text-dim); font-size: 12px; padding: 8px 6px 2px; border-top: 1px solid var(--border); margin-top: 4px; }
|
|
429
|
+
|
|
430
|
+
/* ── Interactive messages (federated AskUserQuestion): the inline question form ── */
|
|
431
|
+
.inbox-iform {
|
|
432
|
+
margin-top: 10px;
|
|
433
|
+
display: flex;
|
|
434
|
+
flex-direction: column;
|
|
435
|
+
gap: 14px;
|
|
436
|
+
}
|
|
437
|
+
.inbox-iform-q { display: flex; flex-direction: column; gap: 6px; }
|
|
438
|
+
.inbox-iform-chip {
|
|
439
|
+
align-self: flex-start;
|
|
440
|
+
font-size: 11px;
|
|
441
|
+
font-weight: 600;
|
|
442
|
+
color: var(--accent);
|
|
443
|
+
background: var(--accent-subtle);
|
|
444
|
+
border: 1px solid var(--accent-border);
|
|
445
|
+
border-radius: var(--radius-full);
|
|
446
|
+
padding: 1px 8px;
|
|
447
|
+
}
|
|
448
|
+
.inbox-iform-prompt { font-weight: 600; font-size: 13px; }
|
|
449
|
+
.inbox-iform-req { color: var(--accent); }
|
|
450
|
+
.inbox-iform-opts { display: flex; flex-direction: column; gap: 6px; }
|
|
451
|
+
.inbox-iform-opt {
|
|
452
|
+
display: flex;
|
|
453
|
+
align-items: center;
|
|
454
|
+
gap: 9px;
|
|
455
|
+
padding: 8px 10px;
|
|
456
|
+
border: 1px solid var(--border);
|
|
457
|
+
border-radius: var(--radius-sm);
|
|
458
|
+
background: var(--card-bg);
|
|
459
|
+
cursor: pointer;
|
|
460
|
+
font-size: 13px;
|
|
461
|
+
transition: border-color 0.12s, background 0.12s;
|
|
462
|
+
}
|
|
463
|
+
.inbox-iform-opt:hover { border-color: var(--accent-border); }
|
|
464
|
+
.inbox-iform-opt--on { border-color: var(--accent); background: var(--accent-subtle); }
|
|
465
|
+
.inbox-iform-opt input { accent-color: var(--accent); flex-shrink: 0; }
|
|
466
|
+
.inbox-iform-opt-label { min-width: 0; }
|
|
467
|
+
.inbox-iform-other {
|
|
468
|
+
margin-top: 2px;
|
|
469
|
+
padding: 8px 10px;
|
|
470
|
+
border: 1px solid var(--border);
|
|
471
|
+
border-radius: var(--radius-sm);
|
|
472
|
+
background: var(--card-bg);
|
|
473
|
+
color: var(--text);
|
|
474
|
+
font-size: 13px;
|
|
475
|
+
}
|
|
476
|
+
.inbox-iform-other:focus { outline: none; border-color: var(--accent); }
|
|
477
|
+
.inbox-iform-submit { align-self: flex-start; margin-top: 2px; }
|
|
478
|
+
|
|
479
|
+
/* Read-only summary once the question has been answered. */
|
|
480
|
+
.inbox-iform--done { gap: 8px; }
|
|
481
|
+
.inbox-iform-answered { font-size: 13px; color: var(--text-dim); }
|
|
482
|
+
|
|
483
|
+
/* ── Broadcast / send-to-many compose ── */
|
|
484
|
+
.inbox-bc-mode { display: flex; gap: 8px; flex-wrap: wrap; }
|
|
485
|
+
.inbox-bc-modeopt {
|
|
486
|
+
display: flex; align-items: center; gap: 6px;
|
|
487
|
+
padding: 6px 10px; border: 1px solid var(--border); border-radius: var(--radius-sm);
|
|
488
|
+
background: var(--card-bg); cursor: pointer; font-size: 13px;
|
|
489
|
+
}
|
|
490
|
+
.inbox-bc-modeopt input { accent-color: var(--accent); }
|
|
491
|
+
.inbox-bc-modeopt--on { border-color: var(--accent); background: var(--accent-subtle); }
|
|
492
|
+
.inbox-bc-chips { display: flex; flex-wrap: wrap; gap: 6px; }
|
|
493
|
+
.inbox-bc-chip {
|
|
494
|
+
display: inline-flex; align-items: center; gap: 6px;
|
|
495
|
+
padding: 3px 6px 3px 10px; border: 1px solid var(--accent-border); border-radius: var(--radius-full);
|
|
496
|
+
background: var(--accent-subtle); font-size: 12px; max-width: 100%;
|
|
497
|
+
}
|
|
498
|
+
.inbox-bc-chip-x {
|
|
499
|
+
border: none; background: transparent; color: var(--text-dim); cursor: pointer;
|
|
500
|
+
font-size: 12px; line-height: 1; padding: 2px 4px; border-radius: var(--radius-full);
|
|
501
|
+
}
|
|
502
|
+
.inbox-bc-chip-x:hover { color: var(--danger); background: var(--card-bg); }
|
|
503
|
+
.inbox-bc-add { display: flex; gap: 8px; }
|
|
504
|
+
.inbox-bc-add .inbox-input { flex: 1; }
|
|
505
|
+
/* Operator audience select (all node / all federation users). */
|
|
506
|
+
.inbox-bc-audience--on { border-color: var(--accent); background: var(--accent-subtle); }
|
|
507
|
+
|
|
508
|
+
/* Announcement note shown in place of the reply composer (read-only thread). */
|
|
509
|
+
.inbox-announce-note {
|
|
510
|
+
border-top: 1px solid var(--border-subtle);
|
|
511
|
+
padding: 12px 16px; color: var(--text-dim); font-size: 13px; text-align: center;
|
|
512
|
+
}
|
|
513
|
+
|
|
514
|
+
/* ── Poll builder (compose a poll broadcast) ── */
|
|
515
|
+
.inbox-poll-builder { display: flex; flex-direction: column; gap: 12px; }
|
|
516
|
+
.inbox-poll-q {
|
|
517
|
+
display: flex; flex-direction: column; gap: 8px;
|
|
518
|
+
border: 1px solid var(--border); border-radius: var(--radius-sm); padding: 10px; background: var(--card-bg);
|
|
519
|
+
}
|
|
520
|
+
.inbox-poll-q-head { display: flex; align-items: center; gap: 8px; }
|
|
521
|
+
.inbox-poll-q-head .inbox-input { flex: 1; }
|
|
522
|
+
.inbox-poll-q-n { font-weight: 600; color: var(--text-dim); }
|
|
523
|
+
.inbox-poll-opts { display: flex; flex-direction: column; gap: 6px; padding-left: 12px; }
|
|
524
|
+
.inbox-poll-opt { display: flex; align-items: center; gap: 6px; }
|
|
525
|
+
.inbox-poll-opt .inbox-input { flex: 1; }
|
|
526
|
+
.inbox-poll-flags { display: flex; flex-wrap: wrap; gap: 12px; font-size: 12px; color: var(--text-dim); }
|
|
527
|
+
.inbox-poll-flags label { display: inline-flex; align-items: center; gap: 5px; cursor: pointer; }
|
|
528
|
+
.inbox-poll-flags input { accent-color: var(--accent); }
|
|
529
|
+
|
|
530
|
+
/* ── Broadcast / poll results ── */
|
|
531
|
+
.inbox-results-summary { font-size: 13px; color: var(--text-dim); padding-bottom: 8px; border-bottom: 1px solid var(--border-subtle); }
|
|
532
|
+
.inbox-results-q { display: flex; flex-direction: column; gap: 6px; padding: 10px 0; }
|
|
533
|
+
.inbox-results-prompt { font-weight: 600; font-size: 14px; }
|
|
534
|
+
.inbox-results-bar { display: flex; flex-direction: column; gap: 3px; }
|
|
535
|
+
.inbox-results-bar-label { display: flex; justify-content: space-between; font-size: 13px; }
|
|
536
|
+
.inbox-results-bar-track { height: 8px; border-radius: var(--radius-full); background: var(--card-bg-alt); overflow: hidden; }
|
|
537
|
+
.inbox-results-bar-fill { height: 100%; width: var(--w, 0%); background: var(--accent); border-radius: var(--radius-full); transition: width 0.3s; }
|
|
538
|
+
.inbox-results-others { font-size: 12px; color: var(--text-dim); }
|
|
539
|
+
.inbox-results-reclist { display: flex; flex-direction: column; gap: 4px; padding-top: 8px; }
|
|
540
|
+
.inbox-results-rec { display: flex; justify-content: space-between; font-size: 13px; color: var(--text-dim); }
|
|
541
|
+
|
|
542
|
+
/* ── Agent capabilities in chat: command chips + fill-in form (Phase A) ── */
|
|
543
|
+
.inbox-cmdbar {
|
|
544
|
+
display: flex; align-items: center; flex-wrap: wrap; gap: 6px;
|
|
545
|
+
padding: 8px 12px; border-top: 1px solid var(--border-subtle);
|
|
546
|
+
}
|
|
547
|
+
.inbox-cmdbar-label { font-size: 12px; color: var(--text-dim); margin-right: 2px; }
|
|
548
|
+
.inbox-cmd-chip {
|
|
549
|
+
border: 1px solid var(--accent-border); background: var(--accent-subtle); color: var(--text);
|
|
550
|
+
font-size: 12px; padding: 4px 10px; border-radius: var(--radius-full); cursor: pointer;
|
|
551
|
+
}
|
|
552
|
+
.inbox-cmd-chip:hover { border-color: var(--accent); }
|
|
553
|
+
.inbox-cmdfill {
|
|
554
|
+
display: flex; flex-direction: column; gap: 8px;
|
|
555
|
+
padding: 10px 12px; border-top: 1px solid var(--border-subtle); background: var(--card-bg-alt);
|
|
556
|
+
}
|
|
557
|
+
.inbox-cmdfill-head { display: flex; align-items: center; justify-content: space-between; font-weight: 600; font-size: 13px; }
|
|
558
|
+
.inbox-cmdfill-desc { font-size: 12px; color: var(--text-dim); }
|
|
559
|
+
.inbox-cmdfill-field { display: flex; flex-direction: column; gap: 3px; }
|
|
560
|
+
.inbox-cmdfill-pname { font-size: 12px; color: var(--text-dim); }
|
|
561
|
+
.inbox-cmdfill-go { align-self: flex-start; }
|
|
562
|
+
|
|
563
|
+
/* ── Agent schedule panel (Phase B — own agents only) ── */
|
|
564
|
+
.inbox-sched-btn { margin-left: auto; }
|
|
565
|
+
.inbox-sched-btn--on { background: var(--accent-subtle); border-color: var(--accent); }
|
|
566
|
+
.inbox-sched {
|
|
567
|
+
display: flex; flex-direction: column; gap: 10px;
|
|
568
|
+
padding: 10px 12px; border-top: 1px solid var(--border-subtle); background: var(--card-bg-alt);
|
|
569
|
+
}
|
|
570
|
+
.inbox-sched-head { display: flex; align-items: center; justify-content: space-between; font-weight: 600; font-size: 13px; }
|
|
571
|
+
.inbox-sched-list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 4px; }
|
|
572
|
+
.inbox-sched-item { display: flex; justify-content: space-between; gap: 8px; font-size: 13px; }
|
|
573
|
+
.inbox-sched-name { color: var(--text); }
|
|
574
|
+
.inbox-sched-cron { color: var(--text-dim); font-family: var(--font-mono, monospace); font-size: 12px; }
|
|
575
|
+
.inbox-sched-new { display: flex; flex-direction: column; gap: 6px; }
|
|
576
|
+
.inbox-sched-new .btn-primary { align-self: flex-start; }
|
|
577
|
+
.inbox-sched-desc { min-height: 38px; resize: vertical; }
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file members.css
|
|
3
|
+
* @description Node members showcase grid (published-portfolio owners). Card grid with avatar + name +
|
|
4
|
+
* bio, linking to each member's portfolio.
|
|
5
|
+
* @version-history
|
|
6
|
+
* v1.0.0 — 2026-06-23 — Initial.
|
|
7
|
+
*/
|
|
8
|
+
.mbr { max-width: 1100px; margin: 0 auto; padding: 24px 16px; }
|
|
9
|
+
.mbr-title { font-size: 1.6rem; margin: 0 0 6px; }
|
|
10
|
+
.mbr-desc { color: var(--text-dim); margin: 0 0 24px; }
|
|
11
|
+
.mbr-empty { color: var(--text-dim); text-align: center; padding: 40px; }
|
|
12
|
+
.mbr-grid {
|
|
13
|
+
display: grid;
|
|
14
|
+
grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));
|
|
15
|
+
gap: 16px;
|
|
16
|
+
}
|
|
17
|
+
.mbr-card {
|
|
18
|
+
display: flex; flex-direction: column; align-items: center; gap: 8px; text-align: center;
|
|
19
|
+
padding: 20px 14px; border: 1px solid var(--card-border, var(--border)); border-radius: var(--radius-md, 12px);
|
|
20
|
+
background: var(--card-bg); text-decoration: none; color: inherit;
|
|
21
|
+
transition: border-color 0.12s, transform 0.12s;
|
|
22
|
+
}
|
|
23
|
+
.mbr-card:hover { border-color: var(--accent); transform: translateY(-2px); }
|
|
24
|
+
.mbr-avatar {
|
|
25
|
+
width: 64px; height: 64px; border-radius: var(--radius-full, 50%);
|
|
26
|
+
display: flex; align-items: center; justify-content: center;
|
|
27
|
+
font-size: 32px; background: var(--accent-subtle); border: 1px solid var(--accent-border);
|
|
28
|
+
}
|
|
29
|
+
.mbr-name { font-weight: 600; }
|
|
30
|
+
.mbr-bio {
|
|
31
|
+
font-size: 13px; color: var(--text-dim);
|
|
32
|
+
display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
|
|
33
|
+
}
|
|
@@ -0,0 +1,315 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file my-company.css
|
|
3
|
+
* @description Styles for the "Yritykseni" (My Company) view (mc- prefix). Two-column layout:
|
|
4
|
+
* company list + create form (left), selected-company offerings + add form + org wallet (right).
|
|
5
|
+
* Uses theme.css variables only (dark-theme safe).
|
|
6
|
+
* @version-history v0.1.0 — 2026-06-23 — initial
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
.mc-container {
|
|
10
|
+
max-width: 1100px;
|
|
11
|
+
margin: 0 auto;
|
|
12
|
+
padding: 2rem 1.25rem 4rem;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
.mc-center {
|
|
16
|
+
display: flex;
|
|
17
|
+
justify-content: center;
|
|
18
|
+
padding: 4rem 0;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
.mc-header { margin-bottom: 1.5rem; }
|
|
22
|
+
|
|
23
|
+
.mc-title {
|
|
24
|
+
font-size: 1.8rem;
|
|
25
|
+
font-weight: 700;
|
|
26
|
+
color: var(--text-bright);
|
|
27
|
+
margin: 0 0 0.4rem;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
.mc-desc {
|
|
31
|
+
color: var(--text-dim);
|
|
32
|
+
margin: 0;
|
|
33
|
+
line-height: 1.5;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
.mc-grid {
|
|
37
|
+
display: grid;
|
|
38
|
+
grid-template-columns: 340px 1fr;
|
|
39
|
+
gap: 1.5rem;
|
|
40
|
+
align-items: start;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
@media (max-width: 760px) {
|
|
44
|
+
.mc-grid { grid-template-columns: 1fr; }
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
.mc-col {
|
|
48
|
+
background: var(--bg-card);
|
|
49
|
+
border: 1px solid var(--border);
|
|
50
|
+
border-radius: var(--radius);
|
|
51
|
+
padding: 1.25rem;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
.mc-card {
|
|
55
|
+
background: var(--bg-card);
|
|
56
|
+
border: 1px solid var(--border);
|
|
57
|
+
border-radius: var(--radius);
|
|
58
|
+
padding: 1.5rem;
|
|
59
|
+
max-width: 640px;
|
|
60
|
+
margin: 1.5rem auto;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
.mc-col-title {
|
|
64
|
+
font-size: 1.1rem;
|
|
65
|
+
font-weight: 600;
|
|
66
|
+
color: var(--text);
|
|
67
|
+
margin: 0 0 0.75rem;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
.mc-empty {
|
|
71
|
+
color: var(--text-muted);
|
|
72
|
+
font-style: italic;
|
|
73
|
+
margin: 0.5rem 0 1rem;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
.mc-org-list {
|
|
77
|
+
list-style: none;
|
|
78
|
+
margin: 0 0 1rem;
|
|
79
|
+
padding: 0;
|
|
80
|
+
display: flex;
|
|
81
|
+
flex-direction: column;
|
|
82
|
+
gap: 0.4rem;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
.mc-org-item {
|
|
86
|
+
width: 100%;
|
|
87
|
+
text-align: left;
|
|
88
|
+
background: var(--bg-elevated);
|
|
89
|
+
border: 1px solid var(--border);
|
|
90
|
+
border-radius: var(--radius-sm);
|
|
91
|
+
padding: 0.6rem 0.75rem;
|
|
92
|
+
cursor: pointer;
|
|
93
|
+
display: flex;
|
|
94
|
+
flex-direction: column;
|
|
95
|
+
gap: 0.15rem;
|
|
96
|
+
transition: border-color 0.15s, background 0.15s;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
.mc-org-item:hover { background: var(--bg-hover); }
|
|
100
|
+
.mc-org-item.active { border-color: var(--accent); background: var(--accent-faint); }
|
|
101
|
+
|
|
102
|
+
.mc-org-name { color: var(--text); font-weight: 600; }
|
|
103
|
+
.mc-org-meta { color: var(--text-muted); font-size: 0.78rem; }
|
|
104
|
+
|
|
105
|
+
.mc-form {
|
|
106
|
+
border-top: 1px solid var(--border);
|
|
107
|
+
margin-top: 1rem;
|
|
108
|
+
padding-top: 1rem;
|
|
109
|
+
display: flex;
|
|
110
|
+
flex-direction: column;
|
|
111
|
+
gap: 0.6rem;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
.mc-form-title {
|
|
115
|
+
font-size: 0.95rem;
|
|
116
|
+
font-weight: 600;
|
|
117
|
+
color: var(--text);
|
|
118
|
+
margin: 0 0 0.25rem;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
.mc-label {
|
|
122
|
+
display: flex;
|
|
123
|
+
flex-direction: column;
|
|
124
|
+
gap: 0.3rem;
|
|
125
|
+
color: var(--text-dim);
|
|
126
|
+
font-size: 0.85rem;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
.mc-input {
|
|
130
|
+
background: var(--bg-input);
|
|
131
|
+
border: 1px solid var(--border);
|
|
132
|
+
border-radius: var(--radius-sm);
|
|
133
|
+
padding: 0.5rem 0.6rem;
|
|
134
|
+
color: var(--text);
|
|
135
|
+
font-size: 0.9rem;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
.mc-input:focus {
|
|
139
|
+
outline: none;
|
|
140
|
+
border-color: var(--border-focus);
|
|
141
|
+
background: var(--bg-input-focus);
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
.mc-detail-head {
|
|
145
|
+
display: flex;
|
|
146
|
+
justify-content: space-between;
|
|
147
|
+
align-items: baseline;
|
|
148
|
+
flex-wrap: wrap;
|
|
149
|
+
gap: 0.5rem;
|
|
150
|
+
margin-bottom: 1rem;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
.mc-wallet { color: var(--text-dim); font-size: 0.9rem; }
|
|
154
|
+
.mc-wallet strong { color: var(--accent-bright); }
|
|
155
|
+
|
|
156
|
+
.mc-off-list {
|
|
157
|
+
list-style: none;
|
|
158
|
+
margin: 0 0 1rem;
|
|
159
|
+
padding: 0;
|
|
160
|
+
display: flex;
|
|
161
|
+
flex-direction: column;
|
|
162
|
+
gap: 0.4rem;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
.mc-off-item {
|
|
166
|
+
background: var(--bg-elevated);
|
|
167
|
+
border: 1px solid var(--border);
|
|
168
|
+
border-radius: var(--radius-sm);
|
|
169
|
+
padding: 0.75rem 0.85rem;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
.mc-off-main { display: flex; flex-direction: column; gap: 0.4rem; }
|
|
173
|
+
.mc-off-row { display: flex; justify-content: space-between; align-items: baseline; gap: 0.5rem; }
|
|
174
|
+
.mc-off-title { color: var(--text); font-weight: 600; }
|
|
175
|
+
.mc-off-price { color: var(--accent-bright); font-weight: 600; white-space: nowrap; }
|
|
176
|
+
.mc-off-ask { color: var(--text-dim); font-size: 0.85rem; }
|
|
177
|
+
.mc-off-meta { display: flex; flex-wrap: wrap; gap: 0.35rem; }
|
|
178
|
+
|
|
179
|
+
.mc-chip {
|
|
180
|
+
background: var(--bg-card);
|
|
181
|
+
border: 1px solid var(--border);
|
|
182
|
+
border-radius: var(--radius-full);
|
|
183
|
+
padding: 0.1rem 0.55rem;
|
|
184
|
+
font-size: 0.72rem;
|
|
185
|
+
color: var(--text-dim);
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
.mc-use { display: flex; gap: 0.5rem; align-items: flex-end; margin-top: 0.3rem; }
|
|
189
|
+
.mc-use-input { flex: 1; resize: vertical; font-family: inherit; }
|
|
190
|
+
|
|
191
|
+
.mc-result {
|
|
192
|
+
margin-top: 0.5rem;
|
|
193
|
+
padding: 0.6rem 0.7rem;
|
|
194
|
+
background: var(--bg-card);
|
|
195
|
+
border: 1px solid var(--border);
|
|
196
|
+
border-radius: var(--radius-sm);
|
|
197
|
+
}
|
|
198
|
+
.mc-result-label { color: var(--text-muted); font-size: 0.75rem; margin-bottom: 0.3rem; }
|
|
199
|
+
.mc-result-msg { color: var(--text); font-size: 0.9rem; }
|
|
200
|
+
.mc-receipt { color: var(--accent-bright); font-size: 0.8rem; margin-top: 0.4rem; }
|
|
201
|
+
.mc-mini { color: var(--text-muted); font-size: 0.75rem; }
|
|
202
|
+
|
|
203
|
+
.mc-section-head { display: flex; justify-content: space-between; align-items: center; gap: 0.5rem; }
|
|
204
|
+
|
|
205
|
+
.mc-picker {
|
|
206
|
+
border: 1px dashed var(--border);
|
|
207
|
+
border-radius: var(--radius-sm);
|
|
208
|
+
padding: 0.75rem;
|
|
209
|
+
margin: 0.5rem 0 1rem;
|
|
210
|
+
background: var(--bg-card);
|
|
211
|
+
}
|
|
212
|
+
.mc-pick-hint { color: var(--text-dim); font-size: 0.85rem; margin: 0 0 0.6rem; }
|
|
213
|
+
.mc-pick-list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 0.4rem; }
|
|
214
|
+
.mc-pick-item {
|
|
215
|
+
display: flex; justify-content: space-between; align-items: center; gap: 0.5rem;
|
|
216
|
+
background: var(--bg-elevated); border: 1px solid var(--border);
|
|
217
|
+
border-radius: var(--radius-sm); padding: 0.5rem 0.7rem;
|
|
218
|
+
}
|
|
219
|
+
.mc-listed { color: var(--success); font-size: 0.8rem; font-weight: 600; }
|
|
220
|
+
.mc-pick-agents { display: flex; flex-direction: column; gap: 0.75rem; }
|
|
221
|
+
.mc-pick-agent { border: 1px solid var(--border); border-radius: var(--radius-sm); padding: 0.5rem 0.6rem; background: var(--bg-elevated); }
|
|
222
|
+
.mc-pick-agent-name { font-weight: 600; color: var(--text); font-size: 0.85rem; margin-bottom: 0.35rem; }
|
|
223
|
+
.mc-pick-none { color: var(--text-muted); }
|
|
224
|
+
|
|
225
|
+
.mc-manage { border: 1px dashed var(--border); border-radius: var(--radius-sm); padding: 0.5rem 0.6rem; margin: 0.4rem 0 0.6rem; }
|
|
226
|
+
.mc-manage-head { display: flex; justify-content: space-between; align-items: center; gap: 0.5rem; margin-bottom: 0.4rem; }
|
|
227
|
+
.mc-config { display: flex; flex-direction: column; gap: 0.2rem; color: var(--text-dim); font-size: 0.85rem; }
|
|
228
|
+
.mc-config b { color: var(--text); }
|
|
229
|
+
.mc-manage-row { align-items: center; gap: 0.4rem; }
|
|
230
|
+
.mc-price-input { width: 5rem; }
|
|
231
|
+
.mc-saved { color: var(--success); }
|
|
232
|
+
.mc-warn { color: var(--text-muted); }
|
|
233
|
+
.mc-remove { color: var(--danger); }
|
|
234
|
+
|
|
235
|
+
.mc-cat-item { list-style: none; margin-bottom: 0.6rem; }
|
|
236
|
+
.of-card-head--static { cursor: default; }
|
|
237
|
+
.mc-not-callable { color: var(--text-muted); font-size: 0.75rem; margin: 0.2rem 0; }
|
|
238
|
+
|
|
239
|
+
.mc-subtabs { display: flex; gap: 0.25rem; border-bottom: 1px solid var(--border); margin: 0.5rem 0 1rem; flex-wrap: wrap; }
|
|
240
|
+
.mc-subtab {
|
|
241
|
+
background: transparent; border: none; border-bottom: 2px solid transparent;
|
|
242
|
+
padding: 0.4rem 0.7rem; cursor: pointer; color: var(--text-dim); font-size: 0.9rem; font-weight: 600;
|
|
243
|
+
}
|
|
244
|
+
.mc-subtab:hover { color: var(--text); }
|
|
245
|
+
.mc-subtab.active { color: var(--accent-bright); border-bottom-color: var(--accent); }
|
|
246
|
+
.mc-role-chip { margin-left: auto; align-self: center; font-size: 0.72rem; font-weight: 600; color: var(--text-dim); background: var(--bg-card); border: 1px solid var(--border); border-radius: var(--radius-full); padding: 0.1rem 0.55rem; }
|
|
247
|
+
|
|
248
|
+
.mc-cust-list, .mc-member-list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 0.4rem; }
|
|
249
|
+
.mc-cust { background: var(--bg-elevated); border: 1px solid var(--border); border-radius: var(--radius-sm); padding: 0.6rem 0.75rem; }
|
|
250
|
+
.mc-cust-head { display: flex; justify-content: space-between; align-items: baseline; gap: 0.5rem; }
|
|
251
|
+
.mc-cust-name { color: var(--text); font-weight: 600; }
|
|
252
|
+
.mc-cust-spend { color: var(--accent-bright); font-weight: 600; }
|
|
253
|
+
.mc-cust-meta { color: var(--text-muted); font-size: 0.78rem; margin: 0.2rem 0 0.4rem; }
|
|
254
|
+
|
|
255
|
+
.mc-member { display: flex; justify-content: space-between; align-items: center; gap: 0.5rem; background: var(--bg-elevated); border: 1px solid var(--border); border-radius: var(--radius-sm); padding: 0.5rem 0.7rem; }
|
|
256
|
+
.mc-member-name { color: var(--text); font-weight: 600; }
|
|
257
|
+
|
|
258
|
+
.mc-head-id { display: flex; align-items: center; gap: 0.75rem; }
|
|
259
|
+
.mc-head-logo { width: 44px; height: 44px; border-radius: var(--radius-sm); object-fit: cover; border: 1px solid var(--border); background: var(--bg-elevated); }
|
|
260
|
+
.mc-logo-row { display: flex; align-items: center; gap: 0.75rem; margin-top: 0.3rem; }
|
|
261
|
+
.mc-logo-preview { width: 56px; height: 56px; border-radius: var(--radius-sm); object-fit: cover; border: 1px solid var(--border); background: var(--bg-elevated); }
|
|
262
|
+
.mc-logo-empty { width: 56px; height: 56px; border-radius: var(--radius-sm); border: 1px dashed var(--border); display: flex; align-items: center; justify-content: center; color: var(--text-muted); font-size: 0.7rem; text-align: center; }
|
|
263
|
+
.mc-upload-btn { position: relative; overflow: hidden; cursor: pointer; }
|
|
264
|
+
.mc-file-hidden { position: absolute; inset: 0; opacity: 0; cursor: pointer; }
|
|
265
|
+
.mc-checkbox-row { display: flex; align-items: center; gap: 0.5rem; color: var(--text); font-size: 0.9rem; cursor: pointer; }
|
|
266
|
+
|
|
267
|
+
.mc-portfolio { display: flex; flex-direction: column; gap: 0.6rem; }
|
|
268
|
+
.mc-pf-live { background: var(--success-bg); border: 1px solid var(--success); border-radius: var(--radius-sm); padding: 0.6rem 0.75rem; display: flex; flex-direction: column; gap: 0.4rem; }
|
|
269
|
+
.mc-pf-prompt { font-family: var(--font-mono, monospace); font-size: 0.8rem; white-space: pre; }
|
|
270
|
+
.mc-pf-html { font-family: var(--font-mono, monospace); font-size: 0.8rem; }
|
|
271
|
+
.mc-theme-row { display: flex; flex-wrap: wrap; gap: 0.5rem; margin: 0.3rem 0 0.6rem; }
|
|
272
|
+
.mc-theme-btn { background: var(--bg-elevated); border: 1px solid var(--border); border-radius: var(--radius-sm); padding: 0.4rem 0.9rem; cursor: pointer; color: var(--text-dim); font-weight: 600; font-size: 0.85rem; transition: border-color 0.15s, color 0.15s; }
|
|
273
|
+
.mc-theme-btn:hover { color: var(--text); }
|
|
274
|
+
.mc-theme-btn.active { border-color: var(--accent); color: var(--accent-bright); background: var(--accent-faint); }
|
|
275
|
+
|
|
276
|
+
.mc-header-row { display: flex; justify-content: space-between; align-items: center; gap: 0.75rem; }
|
|
277
|
+
|
|
278
|
+
.mc-orders-received { border-top: 1px solid var(--border); margin-top: 1.25rem; padding-top: 1rem; }
|
|
279
|
+
.mc-order-list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 0.4rem; }
|
|
280
|
+
.mc-order {
|
|
281
|
+
background: var(--bg-elevated); border: 1px solid var(--border);
|
|
282
|
+
border-radius: var(--radius-sm); padding: 0.6rem 0.75rem;
|
|
283
|
+
}
|
|
284
|
+
.mc-order-head { display: flex; justify-content: space-between; align-items: center; gap: 0.5rem; }
|
|
285
|
+
.mc-order-title { color: var(--text); font-weight: 600; }
|
|
286
|
+
.mc-order-meta { display: flex; flex-wrap: wrap; gap: 0.6rem; color: var(--text-muted); font-size: 0.78rem; margin-top: 0.2rem; }
|
|
287
|
+
.mc-order-input { color: var(--text-dim); font-size: 0.85rem; margin-top: 0.3rem; }
|
|
288
|
+
.mc-order-receipt { color: var(--accent-bright); font-size: 0.82rem; margin-top: 0.3rem; }
|
|
289
|
+
|
|
290
|
+
.mc-status { font-size: 0.72rem; font-weight: 600; padding: 0.1rem 0.55rem; border-radius: var(--radius-full); white-space: nowrap; }
|
|
291
|
+
.mc-status--queued { background: var(--bg-card); color: var(--text-dim); border: 1px solid var(--border); }
|
|
292
|
+
.mc-status--active { background: var(--accent-faint); color: var(--accent-bright); border: 1px solid var(--accent-border); }
|
|
293
|
+
.mc-status--done { background: var(--success-bg); color: var(--success); border: 1px solid var(--success); }
|
|
294
|
+
.mc-status--failed { background: var(--danger-bg); color: var(--danger); border: 1px solid var(--danger-border); }
|
|
295
|
+
|
|
296
|
+
.mc-error {
|
|
297
|
+
color: var(--danger);
|
|
298
|
+
background: var(--danger-bg);
|
|
299
|
+
border: 1px solid var(--danger-border);
|
|
300
|
+
border-radius: var(--radius-sm);
|
|
301
|
+
padding: 0.5rem 0.75rem;
|
|
302
|
+
margin: 0 0 1rem;
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
.mc-stub-badge {
|
|
306
|
+
display: inline-block;
|
|
307
|
+
background: var(--accent-faint);
|
|
308
|
+
color: var(--accent-bright);
|
|
309
|
+
border: 1px solid var(--accent-border);
|
|
310
|
+
border-radius: var(--radius-full);
|
|
311
|
+
padding: 0.2rem 0.7rem;
|
|
312
|
+
font-size: 0.78rem;
|
|
313
|
+
font-weight: 600;
|
|
314
|
+
margin: 0 0 0.75rem;
|
|
315
|
+
}
|
|
@@ -482,6 +482,7 @@
|
|
|
482
482
|
.pf .scope-modal {max-width:560px}
|
|
483
483
|
.pf .scope-modal h3 {margin-bottom:.25rem}
|
|
484
484
|
.pf .scope-modal .scope-agent-info {color:var(--text-dim,#6B7280);font-size:.8rem;margin-bottom:1.25rem;font-family:monospace}
|
|
485
|
+
.pf .scope-agent-msg {margin-left:.5rem;text-decoration:none;font-family:initial}
|
|
485
486
|
.pf .scope-templates {display:flex;gap:.5rem;flex-wrap:wrap;margin-bottom:1.25rem}
|
|
486
487
|
.pf .scope-tpl-btn {flex:1;min-width:100px;padding:.6rem .75rem;background:var(--bg-card,#FFFFFF);border:1px solid var(--border,#E5E7EB);border-radius:8px;cursor:pointer;color:var(--text-dim,#6B7280);font-size:.8rem;font-weight:600;transition:all .2s;text-align:center}
|
|
487
488
|
.pf .scope-tpl-btn:hover {color:var(--text,#1A1A2E);border-color:var(--accent,#E8564A)}
|
|
@@ -3027,3 +3028,24 @@
|
|
|
3027
3028
|
.pf-presence-pill--on { background: var(--accent); border-color: var(--accent); color: #fff; }
|
|
3028
3029
|
.pf-presence-pill:disabled { opacity: .6; cursor: default; }
|
|
3029
3030
|
.pf-presence-hint { font-size: .78rem; color: var(--text-dim); margin: .15rem 0 .35rem; }
|
|
3031
|
+
|
|
3032
|
+
/* ── Discover tab (master directory) ───────────────────────────────────── */
|
|
3033
|
+
.dsc-controls { display: flex; flex-wrap: wrap; gap: .75rem; align-items: center; margin: 1rem 0 .75rem; }
|
|
3034
|
+
.dsc-scope { display: inline-flex; gap: .25rem; background: var(--bg-dim); border: 1px solid var(--border); border-radius: var(--radius-full); padding: .2rem; }
|
|
3035
|
+
.dsc-scope-btn { border-radius: var(--radius-full); padding: .3rem .85rem; font-size: .85rem; }
|
|
3036
|
+
.dsc-scope-active { background: var(--accent); color: #fff; }
|
|
3037
|
+
.dsc-search { flex: 1; min-width: 200px; padding: .5rem .75rem; background: var(--control-bg); border: 1px solid var(--control-border); border-radius: var(--radius); color: inherit; }
|
|
3038
|
+
.dsc-facets { display: flex; flex-wrap: wrap; gap: .4rem; margin-bottom: 1rem; }
|
|
3039
|
+
.dsc-facet { padding: .3rem .7rem; font-size: .82rem; background: var(--card); border: 1px solid var(--border); border-radius: var(--radius-full); cursor: pointer; color: inherit; }
|
|
3040
|
+
.dsc-facet:hover { border-color: var(--accent-border); }
|
|
3041
|
+
.dsc-facet-active { background: var(--accent-subtle); border-color: var(--accent-border); color: var(--accent); }
|
|
3042
|
+
.dsc-item { display: block; padding: .75rem .9rem; margin-bottom: .6rem; background: var(--card); border: 1px solid var(--border); border-radius: var(--radius); text-decoration: none; color: inherit; transition: border-color .12s; }
|
|
3043
|
+
.dsc-item:hover { border-color: var(--accent-border); box-shadow: var(--shadow-sm); }
|
|
3044
|
+
.dsc-item-head { display: flex; flex-wrap: wrap; align-items: center; gap: .5rem; }
|
|
3045
|
+
.dsc-type-badge { font-size: .72rem; text-transform: uppercase; letter-spacing: .03em; color: var(--accent); background: var(--accent-subtle); border: 1px solid var(--accent-border); border-radius: var(--radius-full); padding: .1rem .5rem; }
|
|
3046
|
+
.dsc-item-title { font-size: .98rem; }
|
|
3047
|
+
.dsc-segment { font-size: .75rem; color: var(--text-dim); background: var(--bg-dim); border-radius: var(--radius-full); padding: .1rem .5rem; }
|
|
3048
|
+
.dsc-item-desc { margin-top: .35rem; font-size: .87rem; color: var(--text-dim); overflow: hidden; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; }
|
|
3049
|
+
.dsc-item-meta { margin-top: .5rem; display: flex; flex-wrap: wrap; align-items: center; gap: .35rem; }
|
|
3050
|
+
.dsc-tag { font-size: .72rem; color: var(--muted); background: var(--bg-dim); border-radius: var(--radius-full); padding: .08rem .45rem; }
|
|
3051
|
+
.dsc-owner { margin-left: auto; font-size: .72rem; color: var(--muted); font-family: var(--mono); }
|
|
@@ -10,20 +10,38 @@
|
|
|
10
10
|
* @version-history
|
|
11
11
|
* v1.0.0 -- 2026-06-16 -- Initial creation for user-to-user messaging (layer 5: Inbox tab).
|
|
12
12
|
* v1.0.1 -- 2026-06-19 -- JSDoc type annotations for frontend type-checking
|
|
13
|
+
* v1.1.0 -- 2026-06-23 -- send() carries the optional `interactive` payload (federated AskUserQuestion).
|
|
13
14
|
*/
|
|
14
15
|
import { api, apiGet } from '/js/api.js';
|
|
15
16
|
|
|
16
17
|
const enc = encodeURIComponent;
|
|
17
18
|
|
|
18
19
|
/** Send a direct message. `attachments` is an array of descriptors (storage_key, mime, size, kind, inline, id).
|
|
19
|
-
* `subject` opens a new topic thread; `conversationId` continues a specific existing thread.
|
|
20
|
-
|
|
20
|
+
* `subject` opens a new topic thread; `conversationId` continues a specific existing thread.
|
|
21
|
+
* `interactive` carries a structured AskUserQuestion payload (a `questions` spec or the human's `answers`). */
|
|
22
|
+
export async function send({ to, body, attachments, replyTo, subject, conversationId, interactive } = /** @type {{ to?: any, body?: any, attachments?: any, replyTo?: any, subject?: any, conversationId?: any, interactive?: any }} */ ({})) {
|
|
21
23
|
return api('/v1/messages', {
|
|
22
24
|
method: 'POST',
|
|
23
|
-
body: JSON.stringify({ to, body, attachments, reply_to: replyTo, subject, conversation_id: conversationId }),
|
|
25
|
+
body: JSON.stringify({ to, body, attachments, reply_to: replyTo, subject, conversation_id: conversationId, interactive }),
|
|
24
26
|
});
|
|
25
27
|
}
|
|
26
28
|
|
|
29
|
+
/** Send one message to MANY recipients. `to` is an array of identities and/or `groupId` is a Share Group
|
|
30
|
+
* whose members are the audience. `mode` 'announcement' = read-only; 'broadcast' = repliable. `interactive`
|
|
31
|
+
* makes it a poll. Returns { broadcast_id, recipients, sent, failed }. */
|
|
32
|
+
export async function sendBroadcast({ to, groupId, audience, mode, body, attachments, interactive } = /** @type {{ to?: any, groupId?: any, audience?: any, mode?: any, body?: any, attachments?: any, interactive?: any }} */ ({})) {
|
|
33
|
+
return api('/v1/messages/broadcast', {
|
|
34
|
+
method: 'POST',
|
|
35
|
+
body: JSON.stringify({ to, group_id: groupId, audience, mode, body, attachments, interactive }),
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/** Aggregated results for a broadcast (recipients, delivered/read/answered counts, poll answers). */
|
|
40
|
+
export async function getBroadcastResults(broadcastId) {
|
|
41
|
+
const r = await apiGet(`/v1/messages/broadcast/${enc(broadcastId)}`);
|
|
42
|
+
return r?.data || null;
|
|
43
|
+
}
|
|
44
|
+
|
|
27
45
|
export async function listInbox(unreadOnly = false) {
|
|
28
46
|
const r = await apiGet(`/v1/messages/inbox${unreadOnly ? '?unread=true' : ''}`);
|
|
29
47
|
return r?.data || { messages: [], total: 0, unread: 0 };
|