@semiont/react-ui 0.4.13 → 0.4.14

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@semiont/react-ui",
3
- "version": "0.4.13",
3
+ "version": "0.4.14",
4
4
  "description": "React components and hooks for Semiont",
5
5
  "main": "./dist/index.mjs",
6
6
  "types": "./dist/index.d.mts",
@@ -77,19 +77,6 @@ export function Toolbar<T extends string = string>({
77
77
  <span className="semiont-toolbar-icon" aria-hidden="true">📒</span>
78
78
  </button>
79
79
 
80
- {/* Collaboration Icon */}
81
- <button
82
- onClick={() => handlePanelToggle('collaboration')}
83
- className="semiont-toolbar-button"
84
- data-active={activePanel === 'collaboration'}
85
- data-panel="collaboration"
86
- aria-label={t('collaboration')}
87
- aria-pressed={activePanel === 'collaboration'}
88
- title={t('collaboration')}
89
- >
90
- <span className="semiont-toolbar-icon" aria-hidden="true">👥</span>
91
- </button>
92
-
93
80
  {/* JSON-LD Icon */}
94
81
  <button
95
82
  onClick={() => handlePanelToggle('jsonld')}
@@ -102,6 +89,19 @@ export function Toolbar<T extends string = string>({
102
89
  >
103
90
  <span className="semiont-toolbar-icon" aria-hidden="true">🌐</span>
104
91
  </button>
92
+
93
+ {/* Collaboration Icon */}
94
+ <button
95
+ onClick={() => handlePanelToggle('collaboration')}
96
+ className="semiont-toolbar-button"
97
+ data-active={activePanel === 'collaboration'}
98
+ data-panel="collaboration"
99
+ aria-label={t('collaboration')}
100
+ aria-pressed={activePanel === 'collaboration'}
101
+ title={t('collaboration')}
102
+ >
103
+ <span className="semiont-toolbar-icon" aria-hidden="true">👥</span>
104
+ </button>
105
105
  </>
106
106
  )}
107
107
 
@@ -7,12 +7,14 @@ interface Props {
7
7
  isConnected: boolean;
8
8
  eventCount: number;
9
9
  lastEventTimestamp?: string;
10
+ knowledgeBaseName?: string;
10
11
  }
11
12
 
12
13
  export function CollaborationPanel({
13
14
  isConnected,
14
15
  eventCount,
15
- lastEventTimestamp
16
+ lastEventTimestamp,
17
+ knowledgeBaseName
16
18
  }: Props) {
17
19
  const t = useTranslations('CollaborationPanel');
18
20
 
@@ -52,6 +54,12 @@ export function CollaborationPanel({
52
54
  {t('title')}
53
55
  </h3>
54
56
 
57
+ {knowledgeBaseName && (
58
+ <div style={{ padding: '0 0.75rem 0.5rem', fontSize: '0.8rem', color: 'var(--semiont-color-neutral-400)' }}>
59
+ {knowledgeBaseName}
60
+ </div>
61
+ )}
62
+
55
63
  {/* Connection Status Section */}
56
64
  <div className="semiont-collaboration-panel__section">
57
65
  <h3 className="semiont-collaboration-panel__heading">
@@ -90,6 +90,11 @@ export interface ResourceViewerPageProps {
90
90
  * SSE attention stream connection status for the active workspace
91
91
  */
92
92
  streamStatus: StreamStatus;
93
+
94
+ /**
95
+ * Name of the active knowledge base (for display in panels)
96
+ */
97
+ knowledgeBaseName?: string | undefined;
93
98
  }
94
99
 
95
100
  /**
@@ -128,6 +133,7 @@ export function ResourceViewerPage({
128
133
  ToolbarPanels,
129
134
  refetchDocument,
130
135
  streamStatus,
136
+ knowledgeBaseName,
131
137
  }: ResourceViewerPageProps) {
132
138
  // Translations
133
139
  const tw = useTranslations('ReferenceWizard');
@@ -628,6 +634,7 @@ export function ResourceViewerPage({
628
634
  <CollaborationPanel
629
635
  isConnected={streamStatus === 'connected'}
630
636
  eventCount={0}
637
+ knowledgeBaseName={knowledgeBaseName}
631
638
  />
632
639
  )}
633
640
 
@@ -401,4 +401,16 @@
401
401
 
402
402
  .semiont-panel-actions--between {
403
403
  justify-content: space-between;
404
+ }
405
+
406
+ /* Login form pulsing border for first-launch nudge */
407
+ @keyframes semiont-pulse-border {
408
+ 0%, 100% { border-color: var(--semiont-color-primary-300, #93c5fd); }
409
+ 50% { border-color: var(--semiont-color-primary-600, #2563eb); }
410
+ }
411
+
412
+ .semiont-panel__login-form--pulsing {
413
+ border: 2px solid var(--semiont-color-primary-400, #60a5fa);
414
+ border-radius: var(--semiont-panel-border-radius, 0.5rem);
415
+ animation: semiont-pulse-border 2s ease-in-out infinite;
404
416
  }