queen-mq 0.1.0 → 0.1.2
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/API.md +862 -752
- package/AUTH.md +2044 -0
- package/LICENSE.md +202 -0
- package/README.md +1705 -1051
- package/WEBAPP.md +1889 -0
- package/assets/dashboard-01.png +0 -0
- package/assets/queen-logo-blue.svg +210 -0
- package/assets/queen-logo-cyan.svg +210 -0
- package/assets/queen-logo-indigo.svg +210 -0
- package/assets/queen-logo-orange.svg +210 -0
- package/assets/queen-logo-pink.svg +210 -0
- package/assets/queen-logo-purple.svg +210 -0
- package/assets/queen-logo-rose.svg +239 -0
- package/assets/queen-logo.svg +263 -0
- package/examples/batch-processing.js +58 -0
- package/examples/test-complete-client.js +260 -0
- package/examples/test-dashboard-api.js +200 -0
- package/examples/test-traceid.js +147 -0
- package/package.json +17 -4
- package/server.log +1 -0
- package/src/benchmark/consumer.js +207 -0
- package/src/benchmark/consumer_multi.js +216 -0
- package/src/benchmark/producer.js +75 -0
- package/src/benchmark/producer_multi.js +115 -0
- package/src/client/client.js +300 -31
- package/src/client/queenClient.js +5 -0
- package/src/cluster-server.js +242 -0
- package/src/config.js +19 -5
- package/src/database/connection.js +42 -16
- package/src/database/poolManager.js +7 -0
- package/src/database/schema-v2.sql +194 -130
- package/src/managers/queueManagerOptimized.js +823 -933
- package/src/managers/systemEventManager.js +8 -3
- package/src/routes/messages.js +127 -57
- package/src/routes/pop.js +27 -43
- package/src/routes/resources.js +61 -27
- package/src/routes/status.js +1037 -0
- package/src/server.js +308 -272
- package/src/services/evictionService.js +57 -28
- package/src/services/retentionService.js +44 -11
- package/src/test/MIGRATION_ISSUES.md +174 -0
- package/src/test/README.md +203 -0
- package/src/test/advanced-pattern-tests.js +1137 -0
- package/src/test/bus-mode-tests.js +361 -0
- package/src/test/core-tests.js +342 -0
- package/src/test/edge-case-tests.js +561 -0
- package/src/test/enterprise-tests.js +637 -0
- package/src/test/partition-locking-tests.js +545 -0
- package/src/test/test-new.js +278 -0
- package/src/test/test.js +6 -3
- package/src/test/utils.js +169 -0
- package/src/utils/streaming.js +231 -0
- package/src/utils/uuid.js +2 -2
- package/src/websocket/wsServer.js +10 -3
- package/test-keepalive-v2.sh +22 -0
- package/webapp/COLOR_GUIDE.md +118 -0
- package/webapp/README.md +143 -0
- package/webapp/index.html +14 -0
- package/webapp/package-lock.json +3184 -0
- package/webapp/package.json +25 -0
- package/webapp/postcss.config.js +7 -0
- package/webapp/public/assets/queen-logo-blue.svg +210 -0
- package/webapp/public/assets/queen-logo-cyan.svg +210 -0
- package/webapp/public/assets/queen-logo-indigo.svg +210 -0
- package/webapp/public/assets/queen-logo-orange.svg +210 -0
- package/webapp/public/assets/queen-logo-pink.svg +210 -0
- package/webapp/public/assets/queen-logo-purple.svg +210 -0
- package/webapp/public/assets/queen-logo-rose.svg +239 -0
- package/webapp/public/assets/queen-logo.svg +263 -0
- package/webapp/src/App.vue +19 -0
- package/webapp/src/api/analytics.js +10 -0
- package/webapp/src/api/client.js +29 -0
- package/webapp/src/api/consumers.js +52 -0
- package/webapp/src/api/health.js +7 -0
- package/webapp/src/api/messages.js +26 -0
- package/webapp/src/api/queues.js +14 -0
- package/webapp/src/api/resources.js +8 -0
- package/webapp/src/assets/styles/main.css +357 -0
- package/webapp/src/components/analytics/AnalyticsFilters.vue +87 -0
- package/webapp/src/components/analytics/AnalyticsMetrics.vue +57 -0
- package/webapp/src/components/analytics/MessageDistributionChart.vue +111 -0
- package/webapp/src/components/analytics/MessageFlowChart.vue +173 -0
- package/webapp/src/components/analytics/TimeRangeSelector.vue +27 -0
- package/webapp/src/components/analytics/TopQueuesChart.vue +132 -0
- package/webapp/src/components/common/ConfirmDialog.vue +56 -0
- package/webapp/src/components/common/LoadingSpinner.vue +6 -0
- package/webapp/src/components/common/MetricCard.vue +43 -0
- package/webapp/src/components/common/StatusBadge.vue +45 -0
- package/webapp/src/components/dashboard/MessageStatusCard.vue +50 -0
- package/webapp/src/components/dashboard/PerformanceCard.vue +38 -0
- package/webapp/src/components/dashboard/ThroughputChart.vue +182 -0
- package/webapp/src/components/dashboard/TopQueuesTable.vue +53 -0
- package/webapp/src/components/layout/AppLayout.vue +110 -0
- package/webapp/src/components/layout/AppSidebar.vue +304 -0
- package/webapp/src/components/messages/MessageDetailPanel.vue +242 -0
- package/webapp/src/components/messages/MessageFilters.vue +114 -0
- package/webapp/src/components/queue-detail/PartitionList.vue +79 -0
- package/webapp/src/components/queue-detail/PushMessageModal.vue +175 -0
- package/webapp/src/components/queue-detail/QueueConfig.vue +63 -0
- package/webapp/src/components/queue-detail/QueueDetailHeader.vue +53 -0
- package/webapp/src/components/queue-detail/RecentMessages.vue +76 -0
- package/webapp/src/components/queues/CreateQueueModal.vue +193 -0
- package/webapp/src/components/queues/QueueFilters.vue +90 -0
- package/webapp/src/composables/useApi.js +34 -0
- package/webapp/src/composables/useTheme.js +36 -0
- package/webapp/src/main.js +11 -0
- package/webapp/src/router/index.js +42 -0
- package/webapp/src/utils/colors.js +96 -0
- package/webapp/src/utils/formatters.js +49 -0
- package/webapp/src/views/Analytics.vue +377 -0
- package/webapp/src/views/ConsumerGroups.vue +433 -0
- package/webapp/src/views/Dashboard.vue +418 -0
- package/webapp/src/views/Messages.vue +361 -0
- package/webapp/src/views/QueueDetail.vue +582 -0
- package/webapp/src/views/Queues.vue +496 -0
- package/webapp/tailwind.config.js +25 -0
- package/webapp/vite.config.js +10 -0
- package/CACHE.md +0 -519
- package/DASHBOARD-V3.md +0 -478
- package/DASHBOARD.md +0 -382
- package/MOD_QUEUE.md +0 -453
- package/PARTITION_LOCKING_DESIGN.md +0 -989
- package/PLAN.md +0 -707
- package/QUERY_ANALSYS.md +0 -72
- package/QUEUE_BUS.md +0 -334
- package/V2-PLAN.md +0 -236
- package/dashboard/.vscode/extensions.json +0 -3
- package/dashboard/README.md +0 -5
- package/dashboard/index.html +0 -14
- package/dashboard/package-lock.json +0 -1458
- package/dashboard/package.json +0 -25
- package/dashboard/public/vite.svg +0 -1
- package/dashboard/src/App.vue +0 -29
- package/dashboard/src/assets/styles/main.css +0 -908
- package/dashboard/src/assets/vue.svg +0 -1
- package/dashboard/src/components/cards/MetricCard.vue +0 -298
- package/dashboard/src/components/charts/QueueDepthChart.vue +0 -276
- package/dashboard/src/components/charts/QueueLagChart.vue +0 -436
- package/dashboard/src/components/charts/ThroughputChart.vue +0 -302
- package/dashboard/src/components/common/ActivityFeed.vue +0 -251
- package/dashboard/src/components/layout/AppHeader.vue +0 -208
- package/dashboard/src/components/layout/AppLayout.vue +0 -88
- package/dashboard/src/components/layout/AppSidebar.vue +0 -261
- package/dashboard/src/main.js +0 -44
- package/dashboard/src/router.js +0 -54
- package/dashboard/src/services/api.js +0 -187
- package/dashboard/src/services/websocket.js +0 -167
- package/dashboard/src/utils/constants.js +0 -56
- package/dashboard/src/utils/helpers.js +0 -118
- package/dashboard/src/views/Analytics.vue +0 -912
- package/dashboard/src/views/Dashboard.vue +0 -906
- package/dashboard/src/views/Messages.vue +0 -437
- package/dashboard/src/views/QueueDetail.vue +0 -501
- package/dashboard/src/views/Queues.vue +0 -333
- package/dashboard/vite.config.js +0 -30
- package/debug-namespace.js +0 -110
- package/docs/long-polling.md +0 -159
- package/docs/multi-server-cache-solutions.md +0 -185
- package/docs/performance-tuning.md +0 -222
- package/src/routes/analytics.js +0 -812
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
<svg viewBox="0 0 120 120" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
|
|
3
|
+
<!-- Decorative sparkles -->
|
|
4
|
+
<g id="sparkles">
|
|
5
|
+
<circle cx="25" cy="30" r="1" fill="url(#sparkleGradient)" opacity="0.8">
|
|
6
|
+
<animate attributeName="opacity" values="0.8;0.3;0.8" dur="3s" repeatCount="indefinite"/>
|
|
7
|
+
</circle>
|
|
8
|
+
<circle cx="95" cy="35" r="1.5" fill="url(#sparkleGradient)" opacity="0.6">
|
|
9
|
+
<animate attributeName="opacity" values="0.6;1;0.6" dur="2.5s" repeatCount="indefinite"/>
|
|
10
|
+
</circle>
|
|
11
|
+
<circle cx="90" cy="85" r="1" fill="url(#sparkleGradient)" opacity="0.7">
|
|
12
|
+
<animate attributeName="opacity" values="0.7;0.4;0.7" dur="2s" repeatCount="indefinite"/>
|
|
13
|
+
</circle>
|
|
14
|
+
<circle cx="30" cy="90" r="1.2" fill="url(#sparkleGradient)" opacity="0.5">
|
|
15
|
+
<animate attributeName="opacity" values="0.5;0.9;0.5" dur="2.8s" repeatCount="indefinite"/>
|
|
16
|
+
</circle>
|
|
17
|
+
</g>
|
|
18
|
+
|
|
19
|
+
<!-- Queue lines -->
|
|
20
|
+
<g id="queue-lines">
|
|
21
|
+
<g opacity="0.8">
|
|
22
|
+
<rect x="15" y="65" width="20" height="3" rx="1.5" fill="url(#queueGradient1)">
|
|
23
|
+
<animate attributeName="x" values="15;20;15" dur="4s" repeatCount="indefinite"/>
|
|
24
|
+
</rect>
|
|
25
|
+
<rect x="18" y="72" width="15" height="3" rx="1.5" fill="url(#queueGradient2)">
|
|
26
|
+
<animate attributeName="x" values="18;23;18" dur="3.5s" repeatCount="indefinite"/>
|
|
27
|
+
</rect>
|
|
28
|
+
<rect x="12" y="79" width="25" height="3" rx="1.5" fill="url(#queueGradient3)">
|
|
29
|
+
<animate attributeName="x" values="12;17;12" dur="4.5s" repeatCount="indefinite"/>
|
|
30
|
+
</rect>
|
|
31
|
+
</g>
|
|
32
|
+
<g opacity="0.8">
|
|
33
|
+
<rect x="85" y="65" width="20" height="3" rx="1.5" fill="url(#queueGradient1)">
|
|
34
|
+
<animate attributeName="x" values="85;80;85" dur="4s" repeatCount="indefinite"/>
|
|
35
|
+
</rect>
|
|
36
|
+
<rect x="87" y="72" width="15" height="3" rx="1.5" fill="url(#queueGradient2)">
|
|
37
|
+
<animate attributeName="x" values="87;82;87" dur="3.5s" repeatCount="indefinite"/>
|
|
38
|
+
</rect>
|
|
39
|
+
<rect x="83" y="79" width="25" height="3" rx="1.5" fill="url(#queueGradient3)">
|
|
40
|
+
<animate attributeName="x" values="83;78;83" dur="4.5s" repeatCount="indefinite"/>
|
|
41
|
+
</rect>
|
|
42
|
+
</g>
|
|
43
|
+
</g>
|
|
44
|
+
|
|
45
|
+
<!-- Main duck -->
|
|
46
|
+
<g id="queen-duck" transform="translate(60, 60)">
|
|
47
|
+
<ellipse cx="0" cy="35" rx="25" ry="8" fill="#000000" opacity="0.15"/>
|
|
48
|
+
<path d="M -20 5 Q -25 15 -22 28 Q -18 38 -5 40 L 5 40 Q 18 38 22 28 Q 25 15 20 5 Q 15 -2 8 -3 L -8 -3 Q -15 -2 -20 5 Z"
|
|
49
|
+
fill="url(#bodyGradient)" stroke="url(#bodyStroke)" stroke-width="1.5"/>
|
|
50
|
+
<ellipse cx="0" cy="15" rx="12" ry="15" fill="url(#chestHighlight)" opacity="0.6"/>
|
|
51
|
+
<path d="M -18 8 Q -23 12 -22 20 Q -20 25 -15 22 Q -12 18 -13 12 Z"
|
|
52
|
+
fill="url(#wingGradient)" stroke="url(#wingStroke)" stroke-width="0.8" opacity="0.9"/>
|
|
53
|
+
<path d="M 18 8 Q 23 12 22 20 Q 20 25 15 22 Q 12 18 13 12 Z"
|
|
54
|
+
fill="url(#wingGradient)" stroke="url(#wingStroke)" stroke-width="0.8" opacity="0.9"/>
|
|
55
|
+
<path d="M -5 -3 Q -6 -8 -5 -12 L 5 -12 Q 6 -8 5 -3" fill="url(#neckGradient)" stroke="none"/>
|
|
56
|
+
<ellipse cx="0" cy="-18" rx="12" ry="13" fill="url(#headGradient)" stroke="url(#headStroke)" stroke-width="1.2"/>
|
|
57
|
+
<ellipse cx="-2" cy="-20" rx="6" ry="7" fill="url(#headHighlight)" opacity="0.5"/>
|
|
58
|
+
<path d="M 8 -18 Q 14 -18 15 -17 Q 15 -15 14 -14 Q 13 -13 8 -14 Z"
|
|
59
|
+
fill="url(#beakGradient)" stroke="#FCD34D" stroke-width="0.8"/>
|
|
60
|
+
<ellipse cx="4" cy="-19" rx="3" ry="3.5" fill="white"/>
|
|
61
|
+
<ellipse cx="4.5" cy="-19" rx="2" ry="2.5" fill="url(#eyeGradient)"/>
|
|
62
|
+
<circle cx="5" cy="-19.5" r="1" fill="#1F2937"/>
|
|
63
|
+
<circle cx="5.5" cy="-20" r="0.4" fill="white"/>
|
|
64
|
+
<path d="M 6 -22 L 7 -23.5 M 7 -21.5 L 8.5 -22.5 M 7.5 -21 L 9 -21.5"
|
|
65
|
+
stroke="#1F2937" stroke-width="0.4" fill="none" stroke-linecap="round"/>
|
|
66
|
+
<ellipse cx="1" cy="-15" rx="2.5" ry="1.5" fill="#FFB6C1" opacity="0.4"/>
|
|
67
|
+
|
|
68
|
+
<g id="crown" transform="translate(0, -32)">
|
|
69
|
+
<ellipse cx="0" cy="2" rx="12" ry="3" fill="#000000" opacity="0.1"/>
|
|
70
|
+
<path d="M -12 0 L -10 -8 L -6 -3 L -3 -10 L 0 -5 L 3 -10 L 6 -3 L 10 -8 L 12 0 Q 10 2 0 2 Q -10 2 -12 0 Z"
|
|
71
|
+
fill="url(#crownGradient)" stroke="url(#crownStroke)" stroke-width="1.2" stroke-linejoin="round"/>
|
|
72
|
+
<path d="M -10 0 L -8 -6 L -5 -2 L -2 -8 L 0 -4 L 2 -8 L 5 -2 L 8 -6 L 10 0"
|
|
73
|
+
fill="none" stroke="#FEF3C7" stroke-width="0.5" opacity="0.6"/>
|
|
74
|
+
<circle cx="0" cy="-2" r="2.5" fill="url(#centerJewelGradient)" stroke="#a855f7" stroke-width="0.5"/>
|
|
75
|
+
<circle cx="0" cy="-2" r="1.5" fill="url(#jewelSparkle)" opacity="0.8"/>
|
|
76
|
+
<circle cx="-6" cy="-1" r="1.8" fill="url(#leftJewelGradient)" stroke="#c084fc" stroke-width="0.4"/>
|
|
77
|
+
<circle cx="6" cy="-1" r="1.8" fill="url(#rightJewelGradient)" stroke="#9333ea" stroke-width="0.4"/>
|
|
78
|
+
<circle cx="-3" cy="-4" r="1" fill="#d8b4fe" opacity="0.9"/>
|
|
79
|
+
<circle cx="3" cy="-4" r="1" fill="#d8b4fe" opacity="0.9"/>
|
|
80
|
+
<circle cx="0" cy="-10" r="1.2" fill="#FEF3C7"/>
|
|
81
|
+
<circle cx="-6" cy="-8" r="1" fill="#FEF3C7"/>
|
|
82
|
+
<circle cx="6" cy="-8" r="1" fill="#FEF3C7"/>
|
|
83
|
+
</g>
|
|
84
|
+
|
|
85
|
+
<g id="tail" transform="translate(-22, 25)">
|
|
86
|
+
<path d="M 0 0 Q -3 3 -2 7 Q -1 9 1 8 Q 2 5 0 0" fill="url(#tailGradient)" opacity="0.8"/>
|
|
87
|
+
<path d="M 2 -1 Q -1 2 0 6 Q 1 8 3 7 Q 4 4 2 -1" fill="url(#tailGradient)" opacity="0.7"/>
|
|
88
|
+
<path d="M 4 -2 Q 1 1 2 5 Q 3 7 5 6 Q 6 3 4 -2" fill="url(#tailGradient)" opacity="0.6"/>
|
|
89
|
+
</g>
|
|
90
|
+
</g>
|
|
91
|
+
|
|
92
|
+
<defs>
|
|
93
|
+
<radialGradient id="sparkleGradient">
|
|
94
|
+
<stop offset="0%" style="stop-color:#c084fc;stop-opacity:1" />
|
|
95
|
+
<stop offset="100%" style="stop-color:#d8b4fe;stop-opacity:0" />
|
|
96
|
+
</radialGradient>
|
|
97
|
+
|
|
98
|
+
<linearGradient id="queueGradient1" x1="0%" y1="0%" x2="100%" y2="0%">
|
|
99
|
+
<stop offset="0%" style="stop-color:#a855f7;stop-opacity:0.3" />
|
|
100
|
+
<stop offset="50%" style="stop-color:#a855f7;stop-opacity:1" />
|
|
101
|
+
<stop offset="100%" style="stop-color:#a855f7;stop-opacity:0.3" />
|
|
102
|
+
</linearGradient>
|
|
103
|
+
|
|
104
|
+
<linearGradient id="queueGradient2" x1="0%" y1="0%" x2="100%" y2="0%">
|
|
105
|
+
<stop offset="0%" style="stop-color:#3B82F6;stop-opacity:0.3" />
|
|
106
|
+
<stop offset="50%" style="stop-color:#3B82F6;stop-opacity:1" />
|
|
107
|
+
<stop offset="100%" style="stop-color:#3B82F6;stop-opacity:0.3" />
|
|
108
|
+
</linearGradient>
|
|
109
|
+
|
|
110
|
+
<linearGradient id="queueGradient3" x1="0%" y1="0%" x2="100%" y2="0%">
|
|
111
|
+
<stop offset="0%" style="stop-color:#F59E0B;stop-opacity:0.3" />
|
|
112
|
+
<stop offset="50%" style="stop-color:#F59E0B;stop-opacity:1" />
|
|
113
|
+
<stop offset="100%" style="stop-color:#F59E0B;stop-opacity:0.3" />
|
|
114
|
+
</linearGradient>
|
|
115
|
+
|
|
116
|
+
<radialGradient id="bodyGradient" cx="50%" cy="30%">
|
|
117
|
+
<stop offset="0%" style="stop-color:#e9d5ff;stop-opacity:1" />
|
|
118
|
+
<stop offset="70%" style="stop-color:#d8b4fe;stop-opacity:1" />
|
|
119
|
+
<stop offset="100%" style="stop-color:#a855f7;stop-opacity:1" />
|
|
120
|
+
</radialGradient>
|
|
121
|
+
|
|
122
|
+
<linearGradient id="bodyStroke" x1="0%" y1="0%" x2="0%" y2="100%">
|
|
123
|
+
<stop offset="0%" style="stop-color:#c084fc;stop-opacity:1" />
|
|
124
|
+
<stop offset="100%" style="stop-color:#9333ea;stop-opacity:1" />
|
|
125
|
+
</linearGradient>
|
|
126
|
+
|
|
127
|
+
<radialGradient id="chestHighlight">
|
|
128
|
+
<stop offset="0%" style="stop-color:#FFFFFF;stop-opacity:0.8" />
|
|
129
|
+
<stop offset="100%" style="stop-color:#faf5ff;stop-opacity:0.2" />
|
|
130
|
+
</radialGradient>
|
|
131
|
+
|
|
132
|
+
<linearGradient id="wingGradient" x1="0%" y1="0%" x2="100%" y2="100%">
|
|
133
|
+
<stop offset="0%" style="stop-color:#d8b4fe;stop-opacity:1" />
|
|
134
|
+
<stop offset="100%" style="stop-color:#9333ea;stop-opacity:1" />
|
|
135
|
+
</linearGradient>
|
|
136
|
+
|
|
137
|
+
<linearGradient id="wingStroke">
|
|
138
|
+
<stop offset="0%" style="stop-color:#a855f7;stop-opacity:1" />
|
|
139
|
+
<stop offset="100%" style="stop-color:#7e22ce;stop-opacity:1" />
|
|
140
|
+
</linearGradient>
|
|
141
|
+
|
|
142
|
+
<linearGradient id="neckGradient" x1="0%" y1="100%" x2="0%" y2="0%">
|
|
143
|
+
<stop offset="0%" style="stop-color:#d8b4fe;stop-opacity:1" />
|
|
144
|
+
<stop offset="100%" style="stop-color:#e9d5ff;stop-opacity:1" />
|
|
145
|
+
</linearGradient>
|
|
146
|
+
|
|
147
|
+
<radialGradient id="headGradient" cx="40%" cy="40%">
|
|
148
|
+
<stop offset="0%" style="stop-color:#f3e8ff;stop-opacity:1" />
|
|
149
|
+
<stop offset="60%" style="stop-color:#e9d5ff;stop-opacity:1" />
|
|
150
|
+
<stop offset="100%" style="stop-color:#c084fc;stop-opacity:1" />
|
|
151
|
+
</radialGradient>
|
|
152
|
+
|
|
153
|
+
<linearGradient id="headStroke">
|
|
154
|
+
<stop offset="0%" style="stop-color:#c084fc;stop-opacity:1" />
|
|
155
|
+
<stop offset="100%" style="stop-color:#a855f7;stop-opacity:1" />
|
|
156
|
+
</linearGradient>
|
|
157
|
+
|
|
158
|
+
<radialGradient id="headHighlight">
|
|
159
|
+
<stop offset="0%" style="stop-color:#FFFFFF;stop-opacity:1" />
|
|
160
|
+
<stop offset="100%" style="stop-color:#faf5ff;stop-opacity:0" />
|
|
161
|
+
</radialGradient>
|
|
162
|
+
|
|
163
|
+
<linearGradient id="beakGradient" x1="0%" y1="0%" x2="100%" y2="0%">
|
|
164
|
+
<stop offset="0%" style="stop-color:#FDE68A;stop-opacity:1" />
|
|
165
|
+
<stop offset="100%" style="stop-color:#FCD34D;stop-opacity:1" />
|
|
166
|
+
</linearGradient>
|
|
167
|
+
|
|
168
|
+
<radialGradient id="eyeGradient">
|
|
169
|
+
<stop offset="0%" style="stop-color:#92400E;stop-opacity:1" />
|
|
170
|
+
<stop offset="100%" style="stop-color:#451A03;stop-opacity:1" />
|
|
171
|
+
</radialGradient>
|
|
172
|
+
|
|
173
|
+
<linearGradient id="crownGradient" x1="0%" y1="100%" x2="0%" y2="0%">
|
|
174
|
+
<stop offset="0%" style="stop-color:#FDE68A;stop-opacity:1" />
|
|
175
|
+
<stop offset="50%" style="stop-color:#FCD34D;stop-opacity:1" />
|
|
176
|
+
<stop offset="100%" style="stop-color:#FEF3C7;stop-opacity:1" />
|
|
177
|
+
</linearGradient>
|
|
178
|
+
|
|
179
|
+
<linearGradient id="crownStroke">
|
|
180
|
+
<stop offset="0%" style="stop-color:#FCD34D;stop-opacity:1" />
|
|
181
|
+
<stop offset="100%" style="stop-color:#FBBF24;stop-opacity:1" />
|
|
182
|
+
</linearGradient>
|
|
183
|
+
|
|
184
|
+
<radialGradient id="centerJewelGradient">
|
|
185
|
+
<stop offset="0%" style="stop-color:#f3e8ff;stop-opacity:1" />
|
|
186
|
+
<stop offset="100%" style="stop-color:#a855f7;stop-opacity:1" />
|
|
187
|
+
</radialGradient>
|
|
188
|
+
|
|
189
|
+
<radialGradient id="leftJewelGradient">
|
|
190
|
+
<stop offset="0%" style="stop-color:#e9d5ff;stop-opacity:1" />
|
|
191
|
+
<stop offset="100%" style="stop-color:#9333ea;stop-opacity:1" />
|
|
192
|
+
</radialGradient>
|
|
193
|
+
|
|
194
|
+
<radialGradient id="rightJewelGradient">
|
|
195
|
+
<stop offset="0%" style="stop-color:#f3e8ff;stop-opacity:1" />
|
|
196
|
+
<stop offset="100%" style="stop-color:#7e22ce;stop-opacity:1" />
|
|
197
|
+
</radialGradient>
|
|
198
|
+
|
|
199
|
+
<radialGradient id="jewelSparkle">
|
|
200
|
+
<stop offset="0%" style="stop-color:#FFFFFF;stop-opacity:1" />
|
|
201
|
+
<stop offset="100%" style="stop-color:#FFFFFF;stop-opacity:0" />
|
|
202
|
+
</radialGradient>
|
|
203
|
+
|
|
204
|
+
<linearGradient id="tailGradient" x1="0%" y1="0%" x2="100%" y2="100%">
|
|
205
|
+
<stop offset="0%" style="stop-color:#c084fc;stop-opacity:1" />
|
|
206
|
+
<stop offset="100%" style="stop-color:#9333ea;stop-opacity:1" />
|
|
207
|
+
</linearGradient>
|
|
208
|
+
</defs>
|
|
209
|
+
</svg>
|
|
210
|
+
|
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
<svg viewBox="0 0 120 120" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
|
|
3
|
+
<!-- Decorative sparkles -->
|
|
4
|
+
<g id="sparkles">
|
|
5
|
+
<circle cx="25" cy="30" r="1" fill="url(#sparkleGradient)" opacity="0.8">
|
|
6
|
+
<animate attributeName="opacity" values="0.8;0.3;0.8" dur="3s" repeatCount="indefinite"/>
|
|
7
|
+
</circle>
|
|
8
|
+
<circle cx="95" cy="35" r="1.5" fill="url(#sparkleGradient)" opacity="0.6">
|
|
9
|
+
<animate attributeName="opacity" values="0.6;1;0.6" dur="2.5s" repeatCount="indefinite"/>
|
|
10
|
+
</circle>
|
|
11
|
+
<circle cx="90" cy="85" r="1" fill="url(#sparkleGradient)" opacity="0.7">
|
|
12
|
+
<animate attributeName="opacity" values="0.7;0.4;0.7" dur="2s" repeatCount="indefinite"/>
|
|
13
|
+
</circle>
|
|
14
|
+
<circle cx="30" cy="90" r="1.2" fill="url(#sparkleGradient)" opacity="0.5">
|
|
15
|
+
<animate attributeName="opacity" values="0.5;0.9;0.5" dur="2.8s" repeatCount="indefinite"/>
|
|
16
|
+
</circle>
|
|
17
|
+
</g>
|
|
18
|
+
|
|
19
|
+
<!-- Queue lines flowing (messages being managed) -->
|
|
20
|
+
<g id="queue-lines">
|
|
21
|
+
<!-- Left side queues -->
|
|
22
|
+
<g opacity="0.8">
|
|
23
|
+
<rect x="15" y="65" width="20" height="3" rx="1.5" fill="url(#queueGradient1)">
|
|
24
|
+
<animate attributeName="x" values="15;20;15" dur="4s" repeatCount="indefinite"/>
|
|
25
|
+
</rect>
|
|
26
|
+
<rect x="18" y="72" width="15" height="3" rx="1.5" fill="url(#queueGradient2)">
|
|
27
|
+
<animate attributeName="x" values="18;23;18" dur="3.5s" repeatCount="indefinite"/>
|
|
28
|
+
</rect>
|
|
29
|
+
<rect x="12" y="79" width="25" height="3" rx="1.5" fill="url(#queueGradient3)">
|
|
30
|
+
<animate attributeName="x" values="12;17;12" dur="4.5s" repeatCount="indefinite"/>
|
|
31
|
+
</rect>
|
|
32
|
+
</g>
|
|
33
|
+
|
|
34
|
+
<!-- Right side queues -->
|
|
35
|
+
<g opacity="0.8">
|
|
36
|
+
<rect x="85" y="65" width="20" height="3" rx="1.5" fill="url(#queueGradient1)">
|
|
37
|
+
<animate attributeName="x" values="85;80;85" dur="4s" repeatCount="indefinite"/>
|
|
38
|
+
</rect>
|
|
39
|
+
<rect x="87" y="72" width="15" height="3" rx="1.5" fill="url(#queueGradient2)">
|
|
40
|
+
<animate attributeName="x" values="87;82;87" dur="3.5s" repeatCount="indefinite"/>
|
|
41
|
+
</rect>
|
|
42
|
+
<rect x="83" y="79" width="25" height="3" rx="1.5" fill="url(#queueGradient3)">
|
|
43
|
+
<animate attributeName="x" values="83;78;83" dur="4.5s" repeatCount="indefinite"/>
|
|
44
|
+
</rect>
|
|
45
|
+
</g>
|
|
46
|
+
</g>
|
|
47
|
+
|
|
48
|
+
<!-- Main duck with crown -->
|
|
49
|
+
<g id="queen-duck" transform="translate(60, 60)">
|
|
50
|
+
<!-- Shadow -->
|
|
51
|
+
<ellipse cx="0" cy="35" rx="25" ry="8" fill="#000000" opacity="0.15"/>
|
|
52
|
+
|
|
53
|
+
<!-- Body with elegant curves -->
|
|
54
|
+
<path d="M -20 5 Q -25 15 -22 28 Q -18 38 -5 40 L 5 40 Q 18 38 22 28 Q 25 15 20 5 Q 15 -2 8 -3 L -8 -3 Q -15 -2 -20 5 Z"
|
|
55
|
+
fill="url(#bodyGradient)" stroke="url(#bodyStroke)" stroke-width="1.5"/>
|
|
56
|
+
|
|
57
|
+
<!-- Chest highlight -->
|
|
58
|
+
<ellipse cx="0" cy="15" rx="12" ry="15" fill="url(#chestHighlight)" opacity="0.6"/>
|
|
59
|
+
|
|
60
|
+
<!-- Wing detail left -->
|
|
61
|
+
<path d="M -18 8 Q -23 12 -22 20 Q -20 25 -15 22 Q -12 18 -13 12 Z"
|
|
62
|
+
fill="url(#wingGradient)" stroke="url(#wingStroke)" stroke-width="0.8" opacity="0.9"/>
|
|
63
|
+
|
|
64
|
+
<!-- Wing detail right -->
|
|
65
|
+
<path d="M 18 8 Q 23 12 22 20 Q 20 25 15 22 Q 12 18 13 12 Z"
|
|
66
|
+
fill="url(#wingGradient)" stroke="url(#wingStroke)" stroke-width="0.8" opacity="0.9"/>
|
|
67
|
+
|
|
68
|
+
<!-- Neck -->
|
|
69
|
+
<path d="M -5 -3 Q -6 -8 -5 -12 L 5 -12 Q 6 -8 5 -3"
|
|
70
|
+
fill="url(#neckGradient)" stroke="none"/>
|
|
71
|
+
|
|
72
|
+
<!-- Head with better proportions -->
|
|
73
|
+
<ellipse cx="0" cy="-18" rx="12" ry="13" fill="url(#headGradient)" stroke="url(#headStroke)" stroke-width="1.2"/>
|
|
74
|
+
|
|
75
|
+
<!-- Head highlight -->
|
|
76
|
+
<ellipse cx="-2" cy="-20" rx="6" ry="7" fill="url(#headHighlight)" opacity="0.5"/>
|
|
77
|
+
|
|
78
|
+
<!-- Beak with royal touch -->
|
|
79
|
+
<path d="M 8 -18 Q 14 -18 15 -17 Q 15 -15 14 -14 Q 13 -13 8 -14 Z"
|
|
80
|
+
fill="url(#beakGradient)" stroke="#FCD34D" stroke-width="0.8"/>
|
|
81
|
+
|
|
82
|
+
<!-- Eye with elegant details -->
|
|
83
|
+
<ellipse cx="4" cy="-19" rx="3" ry="3.5" fill="white"/>
|
|
84
|
+
<ellipse cx="4.5" cy="-19" rx="2" ry="2.5" fill="url(#eyeGradient)"/>
|
|
85
|
+
<circle cx="5" cy="-19.5" r="1" fill="#1F2937"/>
|
|
86
|
+
<circle cx="5.5" cy="-20" r="0.4" fill="white"/>
|
|
87
|
+
|
|
88
|
+
<!-- Eyelashes for feminine touch -->
|
|
89
|
+
<path d="M 6 -22 L 7 -23.5 M 7 -21.5 L 8.5 -22.5 M 7.5 -21 L 9 -21.5"
|
|
90
|
+
stroke="#1F2937" stroke-width="0.4" fill="none" stroke-linecap="round"/>
|
|
91
|
+
|
|
92
|
+
<!-- Cheek blush -->
|
|
93
|
+
<ellipse cx="1" cy="-15" rx="2.5" ry="1.5" fill="#FFB6C1" opacity="0.4"/>
|
|
94
|
+
|
|
95
|
+
<!-- Crown -->
|
|
96
|
+
<g id="crown" transform="translate(0, -32)">
|
|
97
|
+
<ellipse cx="0" cy="2" rx="12" ry="3" fill="#000000" opacity="0.1"/>
|
|
98
|
+
<path d="M -12 0 L -10 -8 L -6 -3 L -3 -10 L 0 -5 L 3 -10 L 6 -3 L 10 -8 L 12 0 Q 10 2 0 2 Q -10 2 -12 0 Z"
|
|
99
|
+
fill="url(#crownGradient)" stroke="url(#crownStroke)" stroke-width="1.2" stroke-linejoin="round"/>
|
|
100
|
+
<path d="M -10 0 L -8 -6 L -5 -2 L -2 -8 L 0 -4 L 2 -8 L 5 -2 L 8 -6 L 10 0"
|
|
101
|
+
fill="none" stroke="#FEF3C7" stroke-width="0.5" opacity="0.6"/>
|
|
102
|
+
<circle cx="0" cy="-2" r="2.5" fill="url(#centerJewelGradient)" stroke="#f43f5e" stroke-width="0.5"/>
|
|
103
|
+
<circle cx="0" cy="-2" r="1.5" fill="url(#jewelSparkle)" opacity="0.8"/>
|
|
104
|
+
<circle cx="-6" cy="-1" r="1.8" fill="url(#leftJewelGradient)" stroke="#fb7185" stroke-width="0.4"/>
|
|
105
|
+
<circle cx="6" cy="-1" r="1.8" fill="url(#rightJewelGradient)" stroke="#e11d48" stroke-width="0.4"/>
|
|
106
|
+
<circle cx="-3" cy="-4" r="1" fill="#fda4af" opacity="0.9"/>
|
|
107
|
+
<circle cx="3" cy="-4" r="1" fill="#fda4af" opacity="0.9"/>
|
|
108
|
+
<circle cx="0" cy="-10" r="1.2" fill="#FEF3C7"/>
|
|
109
|
+
<circle cx="-6" cy="-8" r="1" fill="#FEF3C7"/>
|
|
110
|
+
<circle cx="6" cy="-8" r="1" fill="#FEF3C7"/>
|
|
111
|
+
</g>
|
|
112
|
+
|
|
113
|
+
<!-- Tail feathers -->
|
|
114
|
+
<g id="tail" transform="translate(-22, 25)">
|
|
115
|
+
<path d="M 0 0 Q -3 3 -2 7 Q -1 9 1 8 Q 2 5 0 0" fill="url(#tailGradient)" opacity="0.8"/>
|
|
116
|
+
<path d="M 2 -1 Q -1 2 0 6 Q 1 8 3 7 Q 4 4 2 -1" fill="url(#tailGradient)" opacity="0.7"/>
|
|
117
|
+
<path d="M 4 -2 Q 1 1 2 5 Q 3 7 5 6 Q 6 3 4 -2" fill="url(#tailGradient)" opacity="0.6"/>
|
|
118
|
+
</g>
|
|
119
|
+
</g>
|
|
120
|
+
|
|
121
|
+
<defs>
|
|
122
|
+
<radialGradient id="sparkleGradient">
|
|
123
|
+
<stop offset="0%" style="stop-color:#fb7185;stop-opacity:1" />
|
|
124
|
+
<stop offset="100%" style="stop-color:#fda4af;stop-opacity:0" />
|
|
125
|
+
</radialGradient>
|
|
126
|
+
|
|
127
|
+
<linearGradient id="queueGradient1" x1="0%" y1="0%" x2="100%" y2="0%">
|
|
128
|
+
<stop offset="0%" style="stop-color:#f43f5e;stop-opacity:0.3" />
|
|
129
|
+
<stop offset="50%" style="stop-color:#f43f5e;stop-opacity:1" />
|
|
130
|
+
<stop offset="100%" style="stop-color:#f43f5e;stop-opacity:0.3" />
|
|
131
|
+
</linearGradient>
|
|
132
|
+
|
|
133
|
+
<linearGradient id="queueGradient2" x1="0%" y1="0%" x2="100%" y2="0%">
|
|
134
|
+
<stop offset="0%" style="stop-color:#3B82F6;stop-opacity:0.3" />
|
|
135
|
+
<stop offset="50%" style="stop-color:#3B82F6;stop-opacity:1" />
|
|
136
|
+
<stop offset="100%" style="stop-color:#3B82F6;stop-opacity:0.3" />
|
|
137
|
+
</linearGradient>
|
|
138
|
+
|
|
139
|
+
<linearGradient id="queueGradient3" x1="0%" y1="0%" x2="100%" y2="0%">
|
|
140
|
+
<stop offset="0%" style="stop-color:#F59E0B;stop-opacity:0.3" />
|
|
141
|
+
<stop offset="50%" style="stop-color:#F59E0B;stop-opacity:1" />
|
|
142
|
+
<stop offset="100%" style="stop-color:#F59E0B;stop-opacity:0.3" />
|
|
143
|
+
</linearGradient>
|
|
144
|
+
|
|
145
|
+
<radialGradient id="bodyGradient" cx="50%" cy="30%">
|
|
146
|
+
<stop offset="0%" style="stop-color:#fecdd3;stop-opacity:1" />
|
|
147
|
+
<stop offset="70%" style="stop-color:#fda4af;stop-opacity:1" />
|
|
148
|
+
<stop offset="100%" style="stop-color:#f43f5e;stop-opacity:1" />
|
|
149
|
+
</radialGradient>
|
|
150
|
+
|
|
151
|
+
<linearGradient id="bodyStroke" x1="0%" y1="0%" x2="0%" y2="100%">
|
|
152
|
+
<stop offset="0%" style="stop-color:#fb7185;stop-opacity:1" />
|
|
153
|
+
<stop offset="100%" style="stop-color:#e11d48;stop-opacity:1" />
|
|
154
|
+
</linearGradient>
|
|
155
|
+
|
|
156
|
+
<radialGradient id="chestHighlight">
|
|
157
|
+
<stop offset="0%" style="stop-color:#FFFFFF;stop-opacity:0.8" />
|
|
158
|
+
<stop offset="100%" style="stop-color:#fff1f2;stop-opacity:0.2" />
|
|
159
|
+
</radialGradient>
|
|
160
|
+
|
|
161
|
+
<linearGradient id="wingGradient" x1="0%" y1="0%" x2="100%" y2="100%">
|
|
162
|
+
<stop offset="0%" style="stop-color:#fda4af;stop-opacity:1" />
|
|
163
|
+
<stop offset="100%" style="stop-color:#e11d48;stop-opacity:1" />
|
|
164
|
+
</linearGradient>
|
|
165
|
+
|
|
166
|
+
<linearGradient id="wingStroke">
|
|
167
|
+
<stop offset="0%" style="stop-color:#f43f5e;stop-opacity:1" />
|
|
168
|
+
<stop offset="100%" style="stop-color:#be123c;stop-opacity:1" />
|
|
169
|
+
</linearGradient>
|
|
170
|
+
|
|
171
|
+
<linearGradient id="neckGradient" x1="0%" y1="100%" x2="0%" y2="0%">
|
|
172
|
+
<stop offset="0%" style="stop-color:#fda4af;stop-opacity:1" />
|
|
173
|
+
<stop offset="100%" style="stop-color:#fecdd3;stop-opacity:1" />
|
|
174
|
+
</linearGradient>
|
|
175
|
+
|
|
176
|
+
<radialGradient id="headGradient" cx="40%" cy="40%">
|
|
177
|
+
<stop offset="0%" style="stop-color:#ffe4e6;stop-opacity:1" />
|
|
178
|
+
<stop offset="60%" style="stop-color:#fecdd3;stop-opacity:1" />
|
|
179
|
+
<stop offset="100%" style="stop-color:#fb7185;stop-opacity:1" />
|
|
180
|
+
</radialGradient>
|
|
181
|
+
|
|
182
|
+
<linearGradient id="headStroke">
|
|
183
|
+
<stop offset="0%" style="stop-color:#fb7185;stop-opacity:1" />
|
|
184
|
+
<stop offset="100%" style="stop-color:#f43f5e;stop-opacity:1" />
|
|
185
|
+
</linearGradient>
|
|
186
|
+
|
|
187
|
+
<radialGradient id="headHighlight">
|
|
188
|
+
<stop offset="0%" style="stop-color:#FFFFFF;stop-opacity:1" />
|
|
189
|
+
<stop offset="100%" style="stop-color:#fff1f2;stop-opacity:0" />
|
|
190
|
+
</radialGradient>
|
|
191
|
+
|
|
192
|
+
<linearGradient id="beakGradient" x1="0%" y1="0%" x2="100%" y2="0%">
|
|
193
|
+
<stop offset="0%" style="stop-color:#FDE68A;stop-opacity:1" />
|
|
194
|
+
<stop offset="100%" style="stop-color:#FCD34D;stop-opacity:1" />
|
|
195
|
+
</linearGradient>
|
|
196
|
+
|
|
197
|
+
<radialGradient id="eyeGradient">
|
|
198
|
+
<stop offset="0%" style="stop-color:#92400E;stop-opacity:1" />
|
|
199
|
+
<stop offset="100%" style="stop-color:#451A03;stop-opacity:1" />
|
|
200
|
+
</radialGradient>
|
|
201
|
+
|
|
202
|
+
<linearGradient id="crownGradient" x1="0%" y1="100%" x2="0%" y2="0%">
|
|
203
|
+
<stop offset="0%" style="stop-color:#FDE68A;stop-opacity:1" />
|
|
204
|
+
<stop offset="50%" style="stop-color:#FCD34D;stop-opacity:1" />
|
|
205
|
+
<stop offset="100%" style="stop-color:#FEF3C7;stop-opacity:1" />
|
|
206
|
+
</linearGradient>
|
|
207
|
+
|
|
208
|
+
<linearGradient id="crownStroke">
|
|
209
|
+
<stop offset="0%" style="stop-color:#FCD34D;stop-opacity:1" />
|
|
210
|
+
<stop offset="100%" style="stop-color:#FBBF24;stop-opacity:1" />
|
|
211
|
+
</linearGradient>
|
|
212
|
+
|
|
213
|
+
<radialGradient id="centerJewelGradient">
|
|
214
|
+
<stop offset="0%" style="stop-color:#ffe4e6;stop-opacity:1" />
|
|
215
|
+
<stop offset="100%" style="stop-color:#f43f5e;stop-opacity:1" />
|
|
216
|
+
</radialGradient>
|
|
217
|
+
|
|
218
|
+
<radialGradient id="leftJewelGradient">
|
|
219
|
+
<stop offset="0%" style="stop-color:#fecdd3;stop-opacity:1" />
|
|
220
|
+
<stop offset="100%" style="stop-color:#e11d48;stop-opacity:1" />
|
|
221
|
+
</radialGradient>
|
|
222
|
+
|
|
223
|
+
<radialGradient id="rightJewelGradient">
|
|
224
|
+
<stop offset="0%" style="stop-color:#ffe4e6;stop-opacity:1" />
|
|
225
|
+
<stop offset="100%" style="stop-color:#be123c;stop-opacity:1" />
|
|
226
|
+
</radialGradient>
|
|
227
|
+
|
|
228
|
+
<radialGradient id="jewelSparkle">
|
|
229
|
+
<stop offset="0%" style="stop-color:#FFFFFF;stop-opacity:1" />
|
|
230
|
+
<stop offset="100%" style="stop-color:#FFFFFF;stop-opacity:0" />
|
|
231
|
+
</radialGradient>
|
|
232
|
+
|
|
233
|
+
<linearGradient id="tailGradient" x1="0%" y1="0%" x2="100%" y2="100%">
|
|
234
|
+
<stop offset="0%" style="stop-color:#fb7185;stop-opacity:1" />
|
|
235
|
+
<stop offset="100%" style="stop-color:#e11d48;stop-opacity:1" />
|
|
236
|
+
</linearGradient>
|
|
237
|
+
</defs>
|
|
238
|
+
</svg>
|
|
239
|
+
|