@qiqb/message-domain 0.0.0-stage → 0.1.4

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 (57) hide show
  1. package/README.md +220 -2
  2. package/build/components/DefaultMessageReminderRenderer.d.ts +10 -0
  3. package/build/components/DefaultMessageReminderRenderer.js +29 -0
  4. package/build/components/MessageNavigation.d.ts +7 -0
  5. package/build/components/MessageNavigation.js +192 -0
  6. package/build/components/MessageReminderDisplay.d.ts +21 -0
  7. package/build/components/MessageReminderDisplay.js +353 -0
  8. package/build/components/MessageWorkspace.d.ts +16 -0
  9. package/build/components/MessageWorkspace.js +26 -0
  10. package/build/components/message-navigation.less +89 -0
  11. package/build/components/message-reminder-display.less +367 -0
  12. package/build/components/message-workspace.less +150 -0
  13. package/build/index.d.ts +20 -0
  14. package/build/index.js +17 -0
  15. package/build/pages/inbox/InboxPage.d.ts +2 -0
  16. package/build/pages/inbox/InboxPage.js +265 -0
  17. package/build/pages/inbox/inbox.less +430 -0
  18. package/build/pages/subscription/PersonalSubscriptionPage.d.ts +1 -0
  19. package/build/pages/subscription/PersonalSubscriptionPage.js +6 -0
  20. package/build/pages/subscription/RoleSubscriptionPage.d.ts +1 -0
  21. package/build/pages/subscription/RoleSubscriptionPage.js +5 -0
  22. package/build/pages/subscription/SubscriptionForm.d.ts +16 -0
  23. package/build/pages/subscription/SubscriptionForm.js +111 -0
  24. package/build/pages/subscription/SubscriptionPage.d.ts +5 -0
  25. package/build/pages/subscription/SubscriptionPage.js +273 -0
  26. package/build/pages/subscription/subscription-form.less +341 -0
  27. package/build/pages/subscription/subscription.less +250 -0
  28. package/build/pages/topic/TopicPage.d.ts +1 -0
  29. package/build/pages/topic/TopicPage.js +291 -0
  30. package/build/routes.cjs +38 -0
  31. package/build/routes.d.cts +22 -0
  32. package/build/routes.d.ts +22 -0
  33. package/build/routes.js +34 -0
  34. package/build/runtime/MessageReminderLayout.d.ts +14 -0
  35. package/build/runtime/MessageReminderLayout.js +25 -0
  36. package/build/runtime/MessageReminders.d.ts +16 -0
  37. package/build/runtime/MessageReminders.js +364 -0
  38. package/build/runtime/index.d.ts +79 -0
  39. package/build/runtime/index.js +105 -0
  40. package/build/runtime/message-reminder-layout.less +40 -0
  41. package/build/runtime/messageRealtime.d.ts +15 -0
  42. package/build/runtime/messageRealtime.js +99 -0
  43. package/build/runtime/reminderEvents.d.ts +18 -0
  44. package/build/runtime/reminderEvents.js +53 -0
  45. package/build/runtime/reminderOwnership.d.ts +35 -0
  46. package/build/runtime/reminderOwnership.js +135 -0
  47. package/build/runtime/reminderPresentation.d.ts +34 -0
  48. package/build/runtime/reminderPresentation.js +57 -0
  49. package/build/runtime/reminderQuery.d.ts +18 -0
  50. package/build/runtime/reminderQuery.js +33 -0
  51. package/build/runtime/reminderQueue.d.ts +25 -0
  52. package/build/runtime/reminderQueue.js +88 -0
  53. package/build/services/MessageController.d.ts +108 -0
  54. package/build/services/MessageController.js +42 -0
  55. package/build/types/index.d.ts +12 -0
  56. package/build/types/index.js +1 -0
  57. package/package.json +96 -4
@@ -0,0 +1,367 @@
1
+ // Portal 使用独立命名空间,主题变量来自宿主的 Ant Design token,兼容明暗主题。
2
+ .qiqb-message-reminders {
3
+ color: var(--reminder-text);
4
+ font-size: 14px;
5
+ line-height: 1.5;
6
+
7
+ * {
8
+ box-sizing: border-box;
9
+ }
10
+
11
+ [data-level] {
12
+ --reminder-accent: var(--reminder-normal);
13
+ --reminder-accent-bg: var(--reminder-normal-bg);
14
+ --reminder-accent-border: var(--reminder-normal-border);
15
+ }
16
+ [data-level='IMPORTANT'] {
17
+ --reminder-accent: var(--reminder-important);
18
+ --reminder-accent-bg: var(--reminder-important-bg);
19
+ --reminder-accent-border: var(--reminder-important-border);
20
+ }
21
+ [data-level='SEVERE'] {
22
+ --reminder-accent: var(--reminder-severe);
23
+ --reminder-accent-bg: var(--reminder-severe-bg);
24
+ --reminder-accent-border: var(--reminder-severe-border);
25
+ }
26
+
27
+ .qiqb-message-reminder-floating-stack {
28
+ position: fixed;
29
+ bottom: 24px;
30
+ right: 24px;
31
+ z-index: var(--reminder-floating-z);
32
+ // 多条消息共用右下角面板,只展示当前项,避免通知堆叠遮住业务页面。
33
+ width: 360px;
34
+ max-width: calc(100vw - 32px);
35
+ }
36
+ .qiqb-message-reminder-floating-card {
37
+ box-shadow: var(--reminder-shadow);
38
+
39
+ h3 {
40
+ margin: 0;
41
+ min-width: 0;
42
+ color: var(--reminder-text);
43
+ font-size: 14px;
44
+ font-weight: 600;
45
+ overflow-wrap: anywhere;
46
+ }
47
+ }
48
+ .qiqb-message-reminder-floating-header {
49
+ display: flex;
50
+ align-items: flex-start;
51
+ gap: 8px;
52
+ margin-bottom: 8px;
53
+
54
+ .ant-tag {
55
+ flex-shrink: 0;
56
+ margin-inline-end: 0;
57
+ }
58
+ }
59
+ .qiqb-message-reminder-floating-summary {
60
+ display: -webkit-box;
61
+ margin: 0;
62
+ overflow: hidden;
63
+ color: var(--reminder-muted);
64
+ white-space: pre-wrap;
65
+ overflow-wrap: anywhere;
66
+ -webkit-line-clamp: 3;
67
+ -webkit-box-orient: vertical;
68
+ }
69
+ .qiqb-message-reminder-floating-footer {
70
+ display: flex;
71
+ align-items: center;
72
+ justify-content: space-between;
73
+ gap: 12px;
74
+ margin-top: 10px;
75
+ color: var(--reminder-muted);
76
+ font-size: 12px;
77
+
78
+ > span {
79
+ min-width: 0;
80
+ overflow-wrap: anywhere;
81
+ }
82
+ }
83
+
84
+ .qiqb-message-reminder-floating-navigation {
85
+ display: flex;
86
+ align-items: center;
87
+ justify-content: flex-end;
88
+ gap: 4px;
89
+ margin-top: 4px;
90
+ padding-top: 4px;
91
+ border-top: 1px solid var(--reminder-border);
92
+ }
93
+
94
+ // 消息栏随页面槽位布局,不再覆盖整个应用或产生悬浮卡片式重阴影。
95
+ &.qiqb-message-reminders-inline {
96
+ width: 100%;
97
+ min-width: 0;
98
+ }
99
+ // Alert 只承接条带外观;消息切换、可见性和阅读事务继续由现有组件控制。
100
+ .qiqb-message-reminder-carousel-region {
101
+ width: 100%;
102
+ min-width: 0;
103
+ }
104
+ .qiqb-message-reminder-carousel.ant-alert {
105
+ width: 100%;
106
+ min-height: 40px;
107
+ border-radius: 0;
108
+
109
+ // 同时兼容包声明支持的 Ant Design 5/6 内容区类名。
110
+ .ant-alert-content,
111
+ .ant-alert-section {
112
+ min-width: 0;
113
+ }
114
+ }
115
+ .qiqb-message-reminder-carousel-content {
116
+ display: flex;
117
+ align-items: center;
118
+ gap: 10px;
119
+ min-width: 0;
120
+ }
121
+ .qiqb-message-reminder-carousel-level {
122
+ flex-shrink: 0;
123
+ color: var(--reminder-muted);
124
+ font-size: 12px;
125
+ white-space: nowrap;
126
+ }
127
+ .qiqb-message-reminder-carousel-viewport {
128
+ position: relative;
129
+ flex: 1;
130
+ min-width: 0;
131
+ height: 24px;
132
+ overflow: hidden;
133
+ }
134
+ .qiqb-message-reminder-carousel-message {
135
+ display: flex;
136
+ align-items: center;
137
+ gap: 8px;
138
+ width: 100%;
139
+ height: 100%;
140
+ min-width: 0;
141
+
142
+ strong {
143
+ flex-shrink: 0;
144
+ max-width: 45%;
145
+ overflow: hidden;
146
+ color: var(--reminder-text);
147
+ font-size: 13px;
148
+ text-overflow: ellipsis;
149
+ white-space: nowrap;
150
+ font-weight: 600;
151
+ }
152
+ &.is-current {
153
+ animation: qiqb-message-carousel-enter 260ms ease-out both;
154
+ }
155
+ &.is-departing {
156
+ position: absolute;
157
+ inset: 0;
158
+ pointer-events: none;
159
+ animation: qiqb-message-carousel-leave 260ms ease-out both;
160
+ }
161
+ }
162
+ .qiqb-message-reminder-carousel-separator {
163
+ color: var(--reminder-muted);
164
+ }
165
+ .qiqb-message-reminder-carousel-summary {
166
+ flex: 1;
167
+ min-width: 0;
168
+ overflow: hidden;
169
+ color: var(--reminder-muted);
170
+ font-size: 13px;
171
+ text-overflow: ellipsis;
172
+ white-space: nowrap;
173
+ }
174
+ .qiqb-message-reminder-carousel-actions,
175
+ .qiqb-message-reminder-carousel-navigation {
176
+ display: flex;
177
+ flex-shrink: 0;
178
+ align-items: center;
179
+ gap: 2px;
180
+
181
+ .ant-btn {
182
+ height: 26px;
183
+ border-radius: 5px;
184
+ box-shadow: none;
185
+ }
186
+ .ant-btn-icon-only {
187
+ width: 26px;
188
+ padding: 0;
189
+ color: var(--reminder-muted);
190
+ font-size: 11px;
191
+ }
192
+ }
193
+ .qiqb-message-reminder-carousel-navigation {
194
+ margin-left: 5px;
195
+ padding-left: 5px;
196
+ border-left: 1px solid var(--reminder-border);
197
+ }
198
+ .qiqb-message-reminder-counter {
199
+ min-width: 34px;
200
+ color: var(--reminder-muted);
201
+ text-align: center;
202
+ font-size: 11px;
203
+ font-variant-numeric: tabular-nums;
204
+ }
205
+
206
+ @keyframes qiqb-message-carousel-enter {
207
+ from {
208
+ opacity: 0;
209
+ transform: translateY(16px);
210
+ }
211
+ to {
212
+ opacity: 1;
213
+ transform: translateY(0);
214
+ }
215
+ }
216
+ @keyframes qiqb-message-carousel-leave {
217
+ from {
218
+ opacity: 1;
219
+ transform: translateY(0);
220
+ }
221
+ to {
222
+ opacity: 0;
223
+ transform: translateY(-16px);
224
+ }
225
+ }
226
+ @media (prefers-reduced-motion: reduce) {
227
+ .qiqb-message-reminder-carousel,
228
+ .qiqb-message-reminder-carousel-message {
229
+ animation: none;
230
+ transition: none;
231
+ }
232
+ .qiqb-message-reminder-carousel-message.is-departing {
233
+ display: none;
234
+ }
235
+ }
236
+
237
+ // Modal 负责遮罩、焦点和页脚布局;只让长正文滚动,始终保留确认入口。
238
+ .qiqb-message-reminder-fullscreen-scroll {
239
+ max-height: calc(100dvh - 260px);
240
+ overflow-y: auto;
241
+ overscroll-behavior: contain;
242
+
243
+ h2 {
244
+ margin: 0 0 12px;
245
+ color: var(--reminder-text);
246
+ font-size: 20px;
247
+ overflow-wrap: anywhere;
248
+ }
249
+ }
250
+ .qiqb-message-reminder-fullscreen-header {
251
+ display: flex;
252
+ align-items: center;
253
+ gap: 12px;
254
+ flex-shrink: 0;
255
+ }
256
+ .qiqb-message-reminder-fullscreen-count {
257
+ margin-left: auto;
258
+ color: var(--reminder-muted);
259
+ font-size: 12px;
260
+ white-space: nowrap;
261
+ }
262
+ .qiqb-message-reminder-fullscreen-meta {
263
+ display: flex;
264
+ flex-shrink: 0;
265
+ flex-wrap: wrap;
266
+ gap: 6px 20px;
267
+ margin-bottom: 20px;
268
+ color: var(--reminder-muted);
269
+ font-size: 12px;
270
+ overflow-wrap: anywhere;
271
+ }
272
+ .qiqb-message-reminder-fullscreen-body {
273
+ white-space: pre-wrap;
274
+ overflow-wrap: anywhere;
275
+ line-height: 1.8;
276
+ }
277
+ .qiqb-message-reminder-confirm-error {
278
+ flex-shrink: 0;
279
+ margin-top: 12px;
280
+ }
281
+ .qiqb-message-reminder-fullscreen-footer {
282
+ display: flex;
283
+ flex-shrink: 0;
284
+ align-items: center;
285
+ justify-content: space-between;
286
+ gap: 16px;
287
+
288
+ > span {
289
+ color: var(--reminder-muted);
290
+ font-size: 12px;
291
+ }
292
+ > div {
293
+ display: flex;
294
+ flex-shrink: 0;
295
+ gap: 10px;
296
+ }
297
+ }
298
+
299
+ @media (max-width: 767px) {
300
+ // 手机保留标题与可读摘要,操作压缩为两行;单条消息仍只显示查看与关闭。
301
+ .qiqb-message-reminder-carousel-content {
302
+ gap: 6px;
303
+ }
304
+ .qiqb-message-reminder-carousel-viewport {
305
+ height: 52px;
306
+ }
307
+ .qiqb-message-reminder-carousel-message {
308
+ flex-direction: column;
309
+ align-items: flex-start;
310
+ justify-content: center;
311
+ gap: 2px;
312
+ strong {
313
+ width: 100%;
314
+ max-width: none;
315
+ line-height: 18px;
316
+ }
317
+ }
318
+ .qiqb-message-reminder-carousel-separator,
319
+ .qiqb-message-reminder-carousel-level {
320
+ display: none;
321
+ }
322
+ .qiqb-message-reminder-carousel-summary {
323
+ display: -webkit-box;
324
+ flex: none;
325
+ width: 100%;
326
+ white-space: normal;
327
+ overflow-wrap: anywhere;
328
+ font-size: 12px;
329
+ line-height: 16px;
330
+ -webkit-line-clamp: 2;
331
+ -webkit-box-orient: vertical;
332
+ }
333
+ .qiqb-message-reminder-carousel-actions {
334
+ display: grid;
335
+ grid-template-columns: auto 26px;
336
+ gap: 1px 2px;
337
+ }
338
+ .qiqb-message-reminder-carousel-view {
339
+ grid-column: 1;
340
+ grid-row: 1;
341
+ }
342
+ .qiqb-message-reminder-carousel-close {
343
+ grid-column: 2;
344
+ grid-row: 1;
345
+ }
346
+ .qiqb-message-reminder-carousel-navigation {
347
+ grid-column: 1 / 3;
348
+ grid-row: 2;
349
+ justify-content: flex-end;
350
+ margin: 0;
351
+ padding: 0;
352
+ border: 0;
353
+ }
354
+ .qiqb-message-reminder-floating-stack {
355
+ right: 12px;
356
+ bottom: 12px;
357
+ max-width: calc(100vw - 24px);
358
+ }
359
+ .qiqb-message-reminder-fullscreen-footer {
360
+ align-items: flex-start;
361
+ flex-direction: column;
362
+ > div {
363
+ align-self: flex-end;
364
+ }
365
+ }
366
+ }
367
+ }
@@ -0,0 +1,150 @@
1
+ .qiqb-message {
2
+ color: var(--message-text);
3
+
4
+ * {
5
+ box-sizing: border-box;
6
+ }
7
+
8
+ .qiqb-message-heading {
9
+ display: flex;
10
+ align-items: center;
11
+ justify-content: space-between;
12
+ gap: 20px;
13
+ margin-bottom: 24px;
14
+ }
15
+
16
+ .qiqb-message-heading-main {
17
+ display: flex;
18
+ align-items: center;
19
+ gap: 14px;
20
+ min-width: 0;
21
+
22
+ h1 {
23
+ margin: 0;
24
+ font-size: 24px;
25
+ font-weight: 600;
26
+ line-height: 1.5;
27
+ letter-spacing: -0.4px;
28
+ }
29
+
30
+ p {
31
+ margin: 4px 0 0;
32
+ color: var(--message-muted);
33
+ font-size: 13px;
34
+ line-height: 1.7;
35
+ }
36
+ }
37
+
38
+ .qiqb-message-heading-icon {
39
+ display: grid;
40
+ flex: 0 0 46px;
41
+ width: 46px;
42
+ height: 46px;
43
+ place-items: center;
44
+ color: var(--message-primary);
45
+ background: var(--message-primary-bg);
46
+ border-radius: 14px;
47
+ font-size: 22px;
48
+ }
49
+
50
+ .qiqb-message-heading-actions {
51
+ display: flex;
52
+ align-items: center;
53
+ flex-shrink: 0;
54
+ gap: 12px;
55
+ }
56
+
57
+ .qiqb-message-surface {
58
+ overflow: hidden;
59
+ background: var(--message-surface);
60
+ border: 1px solid var(--message-border);
61
+ border-radius: var(--message-radius);
62
+ }
63
+
64
+ .qiqb-message-toolbar {
65
+ display: flex;
66
+ align-items: center;
67
+ justify-content: space-between;
68
+ flex-wrap: wrap;
69
+ gap: 12px;
70
+ padding: 16px 20px;
71
+ border-bottom: 1px solid var(--message-border);
72
+ }
73
+
74
+ .qiqb-message-caption {
75
+ color: var(--message-muted);
76
+ font-size: 12px;
77
+ line-height: 1.7;
78
+ }
79
+
80
+ .qiqb-message-filter-select {
81
+ width: 200px;
82
+ max-width: 100%;
83
+ }
84
+
85
+ .qiqb-message-pagination {
86
+ display: flex;
87
+ justify-content: flex-end;
88
+ padding: 16px 20px;
89
+ border-top: 1px solid var(--message-border);
90
+ }
91
+
92
+ .qiqb-message-state {
93
+ display: flex;
94
+ align-items: center;
95
+ justify-content: center;
96
+ flex-direction: column;
97
+ min-height: 320px;
98
+ padding: 40px 24px;
99
+ text-align: center;
100
+
101
+ h3 {
102
+ margin: 20px 0 8px;
103
+ color: var(--message-text);
104
+ font-size: 16px;
105
+ font-weight: 500;
106
+ }
107
+
108
+ p {
109
+ max-width: 300px;
110
+ margin: 0 0 20px;
111
+ color: var(--message-muted);
112
+ font-size: 13px;
113
+ line-height: 1.8;
114
+ }
115
+ }
116
+
117
+ .qiqb-message-state-icon {
118
+ display: grid;
119
+ width: 64px;
120
+ height: 64px;
121
+ place-items: center;
122
+ color: var(--message-primary);
123
+ background: var(--message-primary-bg);
124
+ border-radius: 20px;
125
+ font-size: 28px;
126
+ }
127
+
128
+ @media (max-width: 767px) {
129
+ .qiqb-message-heading {
130
+ align-items: flex-start;
131
+ flex-direction: column;
132
+ gap: 16px;
133
+ margin-bottom: 20px;
134
+ }
135
+
136
+ .qiqb-message-heading-main h1 {
137
+ font-size: 21px;
138
+ }
139
+
140
+ .qiqb-message-heading-actions {
141
+ align-self: flex-end;
142
+ flex-wrap: wrap;
143
+ }
144
+
145
+ .qiqb-message-toolbar,
146
+ .qiqb-message-pagination {
147
+ padding: 14px;
148
+ }
149
+ }
150
+ }
@@ -0,0 +1,20 @@
1
+ export { default as MessageReminderDisplay } from './components/MessageReminderDisplay.js';
2
+ export type { MessageReminderDisplayProps } from './components/MessageReminderDisplay.js';
3
+ export { default as MessageNavigation } from './components/MessageNavigation.js';
4
+ export type { MessageNavigationProps } from './components/MessageNavigation.js';
5
+ export { default as InboxPage } from './pages/inbox/InboxPage.js';
6
+ export { default as PersonalSubscriptionPage } from './pages/subscription/PersonalSubscriptionPage.js';
7
+ export { default as RoleSubscriptionPage } from './pages/subscription/RoleSubscriptionPage.js';
8
+ export { default as TopicPage } from './pages/topic/TopicPage.js';
9
+ export * from './routes.js';
10
+ export * from './runtime/MessageReminderLayout.js';
11
+ export { default as MessageReminders } from './runtime/MessageReminders.js';
12
+ export * from './runtime/reminderEvents.js';
13
+ export * from './services/MessageController.js';
14
+ export * from './runtime/index.js';
15
+ export type { MessageRemindersProps } from './runtime/MessageReminders.js';
16
+ export * from './runtime/reminderOwnership.js';
17
+ export * from './runtime/reminderQueue.js';
18
+ export * from './types/index.js';
19
+ export { default as DefaultMessageReminderRenderer } from './components/DefaultMessageReminderRenderer.js';
20
+ export type { MessageReminderRenderer, MessageReminderRendererProps, } from './runtime/reminderPresentation.js';
package/build/index.js ADDED
@@ -0,0 +1,17 @@
1
+ export { default as MessageReminderDisplay } from './components/MessageReminderDisplay.js';
2
+ export { default as MessageNavigation } from './components/MessageNavigation.js';
3
+ export { default as InboxPage } from './pages/inbox/InboxPage.js';
4
+ export { default as PersonalSubscriptionPage } from './pages/subscription/PersonalSubscriptionPage.js';
5
+ export { default as RoleSubscriptionPage } from './pages/subscription/RoleSubscriptionPage.js';
6
+ export { default as TopicPage } from './pages/topic/TopicPage.js';
7
+ export * from './routes.js';
8
+ export * from './runtime/MessageReminderLayout.js';
9
+ export { default as MessageReminders } from './runtime/MessageReminders.js';
10
+ export * from './runtime/reminderEvents.js';
11
+ export * from './services/MessageController.js';
12
+ export * from './runtime/index.js';
13
+ export * from './runtime/reminderOwnership.js';
14
+ export * from './runtime/reminderQueue.js';
15
+ export * from './types/index.js';
16
+ // 默认展示与可替换展示契约一并导出,项目不需要复制平台轮询或已读逻辑。
17
+ export { default as DefaultMessageReminderRenderer } from './components/DefaultMessageReminderRenderer.js';
@@ -0,0 +1,2 @@
1
+ import './inbox.less';
2
+ export default function InboxPage(): import("react").JSX.Element;