@hef2024/llmasaservice-ui 0.20.3 → 0.22.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.
@@ -246,3 +246,5 @@ For questions about this implementation, see:
246
246
  - `docs/ERROR-HANDLING-413.md` - Detailed technical documentation
247
247
  - GitHub Issues - Report bugs or request enhancements
248
248
 
249
+
250
+
@@ -0,0 +1,147 @@
1
+ # Controlled Collapse State - Quick Start Guide
2
+
3
+ ## TL;DR
4
+
5
+ The `AIAgentPanel` now supports controlled collapse state, allowing you to persist the panel's collapsed/expanded state across page navigations.
6
+
7
+ ## Quick Examples
8
+
9
+ ### Before (Uncontrolled - state resets on navigation)
10
+ ```tsx
11
+ <AIAgentPanel
12
+ defaultCollapsed={false}
13
+ agents={agents}
14
+ customerId={customerId}
15
+ apiKey={apiKey}
16
+ />
17
+ ```
18
+
19
+ ### After (Controlled - state persists)
20
+ ```tsx
21
+ const [collapsed, setCollapsed] = useState(() =>
22
+ localStorage.getItem('aiPanelCollapsed') === 'true'
23
+ );
24
+
25
+ const handleCollapsedChange = (isCollapsed: boolean) => {
26
+ setCollapsed(isCollapsed);
27
+ localStorage.setItem('aiPanelCollapsed', String(isCollapsed));
28
+ };
29
+
30
+ <AIAgentPanel
31
+ isCollapsed={collapsed}
32
+ onCollapsedChange={handleCollapsedChange}
33
+ agents={agents}
34
+ customerId={customerId}
35
+ apiKey={apiKey}
36
+ />
37
+ ```
38
+
39
+ ## New Props
40
+
41
+ | Prop | Type | Description |
42
+ |------|------|-------------|
43
+ | `isCollapsed` | `boolean?` | Controlled collapse state |
44
+ | `onCollapsedChange` | `(isCollapsed: boolean) => void?` | Callback when state changes |
45
+
46
+ ## Common Use Cases
47
+
48
+ ### 1. Persist Across Page Navigation (localStorage)
49
+ ```tsx
50
+ const [collapsed, setCollapsed] = useState(() =>
51
+ localStorage.getItem('aiPanelCollapsed') === 'true'
52
+ );
53
+
54
+ <AIAgentPanel
55
+ isCollapsed={collapsed}
56
+ onCollapsedChange={(isCollapsed) => {
57
+ setCollapsed(isCollapsed);
58
+ localStorage.setItem('aiPanelCollapsed', String(isCollapsed));
59
+ }}
60
+ />
61
+ ```
62
+
63
+ ### 2. Sync Across Devices (Database)
64
+ ```tsx
65
+ const { data } = useUserPreferences();
66
+ const { mutate } = useUpdateUserPreferences();
67
+
68
+ <AIAgentPanel
69
+ isCollapsed={data?.aiPanelCollapsed ?? false}
70
+ onCollapsedChange={(isCollapsed) => {
71
+ mutate({ aiPanelCollapsed: isCollapsed });
72
+ }}
73
+ />
74
+ ```
75
+
76
+ ### 3. Track for Analytics (Uncontrolled + Callback)
77
+ ```tsx
78
+ <AIAgentPanel
79
+ defaultCollapsed={false}
80
+ onCollapsedChange={(isCollapsed) => {
81
+ analytics.track('panel_collapsed', { isCollapsed });
82
+ }}
83
+ />
84
+ ```
85
+
86
+ ### 4. Programmatic Control
87
+ ```tsx
88
+ const [collapsed, setCollapsed] = useState(false);
89
+
90
+ <div>
91
+ <button onClick={() => setCollapsed(true)}>Collapse Panel</button>
92
+
93
+ <AIAgentPanel
94
+ isCollapsed={collapsed}
95
+ onCollapsedChange={setCollapsed}
96
+ />
97
+ </div>
98
+ ```
99
+
100
+ ## Key Points
101
+
102
+ ✅ **Backward Compatible** - Existing code works without changes
103
+ ✅ **Opt-in** - Only use controlled mode when you need it
104
+ ✅ **Standard React Pattern** - Works like `<input value={...} onChange={...} />`
105
+ ✅ **Flexible** - Works with localStorage, database, Redux, etc.
106
+
107
+ ## Common Mistakes
108
+
109
+ ### ❌ Missing Callback
110
+ ```tsx
111
+ // Panel won't respond to user clicks
112
+ <AIAgentPanel isCollapsed={collapsed} />
113
+ ```
114
+
115
+ ### ✅ Correct
116
+ ```tsx
117
+ <AIAgentPanel
118
+ isCollapsed={collapsed}
119
+ onCollapsedChange={setCollapsed}
120
+ />
121
+ ```
122
+
123
+ ### ❌ Conflicting Props
124
+ ```tsx
125
+ // defaultCollapsed is ignored in controlled mode
126
+ <AIAgentPanel
127
+ isCollapsed={collapsed}
128
+ onCollapsedChange={setCollapsed}
129
+ defaultCollapsed={false} // Remove this
130
+ />
131
+ ```
132
+
133
+ ### ✅ Correct
134
+ ```tsx
135
+ <AIAgentPanel
136
+ isCollapsed={collapsed}
137
+ onCollapsedChange={setCollapsed}
138
+ />
139
+ ```
140
+
141
+ ## Full Documentation
142
+
143
+ For complete documentation, see:
144
+ - [Controlled Collapse State Guide](./CONTROLLED-COLLAPSE-STATE.md)
145
+ - [Examples](../examples/controlled-collapse-example.tsx)
146
+ - [Demo App](../examples/demo-app/src/App.tsx)
147
+