anarock-widgets 1.0.366 → 1.0.374

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": "anarock-widgets",
3
- "version": "1.0.366",
3
+ "version": "1.0.374",
4
4
  "main": "dist/index.cjs.js",
5
5
  "module": "dist/index.es.js",
6
6
  "types": "dist/index.d.ts",
package/readme.md CHANGED
@@ -1,75 +1,467 @@
1
- 📦 anarock-widgets
1
+ # CLAUDE.md
2
+
3
+ ## Project Overview
4
+
5
+ - This repository is a reusable React widget library for ANAROCK dashboards.
6
+ - It contains residential and commercial dashboard widgets packaged for reuse in other applications.
7
+ - Widgets are primarily presentational cards, charts, and section wrappers.
8
+ - The repo also includes a local playground for visual development and manual verification.
9
+
10
+ ## Tech Stack
11
+
12
+ - React 18
13
+ - JavaScript / JSX
14
+ - Vite
15
+ - Tailwind CSS utilities
16
+ - Recharts
17
+ - MUI (`@mui/material`, `@mui/icons-material`)
18
+ - Emotion (`@emotion/react`, `@emotion/styled`)
19
+ - `react-icons`
20
+ - `lucide-react`
21
+ - `react-datepicker`
22
+
23
+ Not present in this repo:
24
+
25
+ - TypeScript source files
26
+ - Redux
27
+ - React Context as a formal app-level state layer
28
+ - Socket.IO / websockets
29
+ - React Hook Form
30
+ - Dedicated API client layer
31
+
32
+ ## Project Structure
33
+
34
+ ```text
35
+ src/
36
+ index.js
37
+ index.css
38
+ playground/
39
+ App.jsx
40
+ main.jsx
41
+ index.css
42
+ index.html
43
+ widgets/
44
+ components/
45
+ utils/
46
+ overview/
47
+ community/
48
+ financials/
49
+ facilities/
50
+ gate-and-security/
51
+ helpdesk/
52
+ engagement/
53
+ commercial-dashboard/
54
+ commercial-smart-access/
55
+ commercial-helpdesk/
56
+ commercial-visitors/
57
+ commercial-amenities/
58
+ commercial-asset-management/
59
+ commercial-guard-petrol/
60
+ commercial-food-and-order/
61
+ commercial-table/
62
+ ```
63
+
64
+ ### Folder Responsibilities
65
+
66
+ - `src/index.js`
67
+ - Public export surface for the package.
68
+ - Any widget intended for external consumption must be exported here.
69
+
70
+ - `src/playground/`
71
+ - Local development harness.
72
+ - Used to render widgets in isolation and check layout/visual behavior.
73
+
74
+ - `src/widgets/components/`
75
+ - Shared UI building blocks used across multiple widget sections.
76
+ - Examples:
77
+ - `Card.jsx`
78
+ - `CardNoLogo.jsx`
79
+ - `Header.jsx`
80
+ - `CommercialHeader.jsx`
81
+ - `ActionButtons.jsx`
82
+
83
+ - `src/widgets/utils/`
84
+ - Cross-widget helpers and common fallback UI.
85
+ - Examples:
86
+ - `EmptyState.jsx`
87
+ - `formatAmount`
88
+ - `updateSession`
89
+
90
+ - `src/widgets/<section>/`
91
+ - Section-level wrapper components.
92
+ - Each folder usually has:
93
+ - `index.jsx` for section composition
94
+ - `component/` or `components/` for actual widget cards/charts
95
+
96
+ ### Section Examples
97
+
98
+ - Residential:
99
+ - `src/widgets/community/`
100
+ - `src/widgets/financials/`
101
+ - `src/widgets/helpdesk/`
102
+
103
+ - Commercial:
104
+ - `src/widgets/commercial-amenities/`
105
+ - `src/widgets/commercial-visitors/`
106
+ - `src/widgets/commercial-asset-management/`
107
+
108
+ ## Component Architecture
109
+
110
+ ### Component Types
111
+
112
+ - Section wrappers
113
+ - Compose multiple child widgets into a page/grid.
114
+ - Usually live at `src/widgets/<section>/index.jsx`.
115
+
116
+ - Presentational widgets
117
+ - Cards, charts, summary panels.
118
+ - Usually accept `data` or similarly named props.
119
+
120
+ - Shared UI primitives
121
+ - Card shells, headers, tooltips, chips, empty states.
122
+ - Reused across multiple sections.
123
+
124
+ ### Smart vs Dumb Components
125
+
126
+ - Mostly dumb/presentational:
127
+ - Most widgets receive props and render UI.
128
+ - Data transformation is local and lightweight.
129
+
130
+ - Light smart behavior inside components:
131
+ - Some widgets normalize API-shaped data before rendering.
132
+ - Some widgets manage local UI state:
133
+ - date pickers
134
+ - legend toggles
135
+ - local pagination
136
+
137
+ - No dedicated container layer exists.
138
+ - If adding one, keep business/data orchestration above presentational widgets.
139
+
140
+ ### Reusable Component Patterns
141
+
142
+ - Use `Card.jsx` for standard dashboard cards.
143
+ - Use `CardNoLogo.jsx` for commercial cards and date-navigation variants.
144
+ - Use `Header.jsx` for residential section-level date/export controls.
145
+ - Use `CommercialHeader.jsx` for commercial section headers.
146
+ - Use `EmptyState.jsx` for explicit no-data rendering.
2
147
 
3
- A collection of reusable React UI widgets for the Anarock Dashboard.
148
+ ## State Management
4
149
 
5
- 🚀 Development Workflow
6
- 1️⃣ Install Dependencies
150
+ ### Current State Model
7
151
 
8
- npm install
152
+ - Local component state with `useState` is the primary state mechanism.
153
+ - Derived view data is often computed inline or with `useMemo`.
154
+ - There is no Redux store and no centralized global app state inside this package.
9
155
 
10
- 2️⃣ Run Playground (for previewing widgets in real-time)
11
- cd playground
12
- npm run dev
156
+ ### Where State Lives
13
157
 
14
- Opens local dev server.
158
+ - Widget-local state:
159
+ - chart legend visibility
160
+ - local date picker state
161
+ - pagination state
162
+ - dropdown open/close state
15
163
 
16
- Any changes to widgets will hot-reload in the browser.
164
+ - Browser storage state:
165
+ - `sessionStorage` is used in `ActionButtons.jsx` and `utils/index.jsx`
166
+ - keys used:
167
+ - `community_id`
168
+ - `widget_id`
169
+ - `export`
17
170
 
18
- 3️⃣ Build the Package
19
- npm run build
171
+ ### When To Use Local State
172
+
173
+ - Use local state for:
174
+ - temporary UI interactions
175
+ - date controls local to a widget
176
+ - table pagination
177
+ - visual toggles
178
+
179
+ ### When To Use Global State
180
+
181
+ - There is no in-repo global state layer today.
182
+ - If cross-widget coordination is needed, current code uses:
183
+ - `sessionStorage`
184
+ - custom browser events such as `dashboard-update`
185
+
186
+ - Do not introduce Redux or Context unless the change requires true cross-section orchestration.
187
+
188
+ ## API Layer
189
+
190
+ ### Current Reality
191
+
192
+ - There is no dedicated `services/` or API client layer in this repository.
193
+ - Most widgets are data-agnostic UI components and expect props from a host application.
194
+ - Some components include local normalization for backend-shaped data.
195
+
196
+ ### Existing Data Pattern
197
+
198
+ - Components often accept raw API-like payloads and normalize internally.
199
+ - Example normalization pattern:
200
+ - convert snake_case fields into render-friendly values
201
+ - coerce numbers with `Number(...) || 0`
202
+ - guard missing labels with `"Unknown"` or `"-"`
203
+
204
+ ### Recommended API Integration Pattern
205
+
206
+ If adding real API integration later:
207
+
208
+ - Keep fetch logic outside widget components.
209
+ - Add data fetching in the host application or a future `services/` layer.
210
+ - Pass normalized props into widgets when possible.
211
+ - If a widget must normalize, do it once near the top of the component.
212
+
213
+ ## Socket Architecture
214
+
215
+ - Not applicable in the current repository.
216
+ - No socket initialization, event bus, or reconnection logic exists.
217
+ - Do not add socket logic directly into presentational widgets.
218
+
219
+ ## UI Guidelines
220
+
221
+ ### Naming Conventions
222
+
223
+ - Component names: PascalCase
224
+ - Hook names: `useXxx` if custom hooks are added later
225
+ - Utility function names: camelCase
226
+ - Section wrappers should ideally be descriptively named, even though some existing files still use `function index()`
227
+
228
+ ### Layout Structure
229
+
230
+ - Section wrapper:
231
+ - header first
232
+ - grid layout second
233
+ - cards inside grid cells
234
+
235
+ - Widgets:
236
+ - top bar with title/icon/period
237
+ - main content area
238
+ - optional footer
239
+
240
+ ### Styling Approach
241
+
242
+ - Tailwind utility classes are the primary styling method.
243
+ - MUI is used selectively for controls/icons.
244
+ - Avoid introducing a second styling system unless necessary.
245
+
246
+ ### Responsive Design Approach
247
+
248
+ - Most layouts use Tailwind grid classes and responsive column changes.
249
+ - Prefer existing patterns such as:
250
+ - `grid-cols-1 sm:grid-cols-2 lg:grid-cols-3`
251
+ - `lg:grid-cols-[minmax(0,1fr)_minmax(0,4fr)]`
252
+
253
+ - New widgets should:
254
+ - degrade cleanly on smaller widths
255
+ - avoid fixed widths unless the design already requires them
256
+ - handle long labels without breaking charts or layouts
257
+
258
+ ## Forms Handling
259
+
260
+ - No formal forms layer exists.
261
+ - Small input interactions are handled with local state.
262
+ - Current examples include:
263
+ - `react-datepicker`
264
+ - MUI `Select`
265
+ - local search/filter state
266
+
267
+ Rules:
268
+
269
+ - Keep form state local unless multiple widgets must share it.
270
+ - Validate defensively at the component boundary.
271
+ - Prefer simple controlled inputs over adding heavy form abstractions.
272
+
273
+ ## Performance Rules
274
+
275
+ - Keep widgets presentational and cheap to render.
276
+ - Use `useMemo` only when:
277
+ - data normalization is non-trivial
278
+ - chart transformations are repeated
279
+ - derived arrays/objects are expensive enough to justify memoization
280
+
281
+ - Avoid:
282
+ - recreating large transformed arrays multiple times in JSX
283
+ - unnecessary state for purely derived values
284
+ - deep prop drilling for temporary UI-only state
20
285
 
21
- Creates the dist/ folder with production-ready files:
286
+ - Prefer:
287
+ - one normalization block near the top of the component
288
+ - stable empty checks before rendering charts
289
+ - safe `ResponsiveContainer` usage for Recharts
290
+
291
+ - Lazy loading is not currently set up in this package.
292
+ - If introduced later, apply it at section/playground level, not inside small leaf components.
293
+
294
+ ## Code Conventions
295
+
296
+ ### Naming
297
+
298
+ - Components: PascalCase
299
+ - Functions: camelCase
300
+ - Constants: UPPER_SNAKE_CASE for true constants, otherwise camelCase
301
+ - Props:
302
+ - prefer descriptive names like `data`, `rows`, `totalAssets`, `onDateChange`
303
+
304
+ ### File Naming
305
+
306
+ - Existing code uses `.jsx`.
307
+ - Component files are mostly PascalCase or descriptive kebab-lowercase variants already present in the repo.
308
+ - Follow the local folder convention before introducing a new naming style.
309
+
310
+ ### Hooks Naming
311
+
312
+ - If custom hooks are added, name them `useXxx`.
313
+ - Keep hooks pure and UI-agnostic when possible.
314
+
315
+ ### Component File Structure
316
+
317
+ Recommended order:
318
+
319
+ 1. imports
320
+ 2. constants / dummy data
321
+ 3. helper functions
322
+ 4. component definition
323
+ 5. data normalization
324
+ 6. early empty-state return
325
+ 7. JSX
326
+ 8. export default
327
+
328
+ ## Common Patterns
329
+
330
+ ### 1. Dummy Data Fallback
331
+
332
+ Common pattern in commercial widgets:
333
+
334
+ - `undefined` or `null` prop:
335
+ - use internal dummy/demo data
336
+ - explicit empty array:
337
+ - show `EmptyState`
338
+
339
+ This keeps the playground populated while still supporting real no-data rendering.
340
+
341
+ ### 2. Empty State Pattern
342
+
343
+ - Use `src/widgets/utils/EmptyState.jsx`.
344
+ - Prefer explicit titles per widget, for example:
345
+ - `No Booking Found`
346
+ - `No Assets Found`
347
+ - `No Visitors Found`
348
+
349
+ ### 3. Local Data Normalization
350
+
351
+ Typical rules:
352
+
353
+ - `Array.isArray(data)` before `.map`
354
+ - `Number(value) || 0` for numeric fields
355
+ - `item?.name || "Unknown"` for labels
356
+ - `??` for safe defaults
357
+
358
+ ### 4. Section Composition
359
+
360
+ - Section `index.jsx` files compose widgets into grids.
361
+ - Add new widgets there if they belong to an existing dashboard section.
362
+
363
+ ### 5. Browser Event Coordination
364
+
365
+ - `updateSession` writes to `sessionStorage` and dispatches `dashboard-update`.
366
+ - This is the current pattern for lightweight external coordination.
367
+
368
+ ## Environment Variables
369
+
370
+ - No environment variable convention is defined in the current repo.
371
+ - No `.env` usage is visible in the widget source.
372
+
373
+ If environment variables are added later:
374
+
375
+ - use Vite conventions (`import.meta.env`)
376
+ - keep secrets out of the package source
377
+ - do not hardcode host-specific URLs in widget components
378
+
379
+ ## How to Run the Project
380
+
381
+ ```bash
382
+ npm install
383
+ npm run dev
384
+ npm run build
385
+ ```
22
386
 
23
- dist/index.js (CJS build)
387
+ Notes:
24
388
 
25
- dist/index.esm.js (ESM build)
389
+ - `npm run dev` starts the Vite dev environment.
390
+ - `src/playground/App.jsx` is the main place for visual verification.
391
+ - `npm run build` produces the package output in `dist/`.
26
392
 
27
- dist/index.d.ts (TypeScript types, if using TS)
393
+ ## Important Notes for AI Agents
28
394
 
29
- 4️⃣ Update Version
395
+ ### Where To Add New Features
30
396
 
31
- Every time you change widgets, bump the version in package.json:
397
+ - New shared UI primitives:
398
+ - `src/widgets/components/`
32
399
 
33
- {
34
- "name": "@anarock/widgets",
35
- "version": "1.0.1"
36
- }
400
+ - New utility helpers:
401
+ - `src/widgets/utils/`
37
402
 
38
- Follow semver
39
- :
403
+ - New widget cards inside an existing section:
404
+ - `src/widgets/<section>/component/`
405
+ - or `src/widgets/<section>/components/`
40
406
 
41
- Patch bug fixes (1.0.1)
407
+ - New section wrappers:
408
+ - `src/widgets/<section>/index.jsx`
42
409
 
43
- Minor new widgets/features (1.1.0)
410
+ ### Where To Add Public Exports
44
411
 
45
- Major breaking changes (2.0.0)
412
+ - Always update `src/index.js`.
413
+ - If it is not exported there, external consumers cannot import it.
46
414
 
47
- 5️⃣ Publish to GitHub (Private)
415
+ ### Where To Add Playground Examples
48
416
 
49
- Publish:
417
+ - `src/playground/App.jsx`
50
418
 
51
- git push
419
+ Add:
52
420
 
53
- 6️⃣ Install in Another Project
421
+ - a normal data example
422
+ - an empty-data example if the widget has important empty-state behavior
54
423
 
55
- From GitHub Repo:
424
+ ### Null / Empty Handling Rules
56
425
 
57
- npm install git+https://github.com/vinayak-vayuz/anarock-dashboard-widgets.git
426
+ Preserve this contract unless explicitly changing the section standard:
58
427
 
59
- From Local Tarball (if testing without publish):
428
+ - `undefined` / `null`
429
+ - usually show internal demo fallback
430
+ - `[]`
431
+ - usually show `EmptyState`
432
+ - all-zero datasets
433
+ - often should also be treated as empty for charts where zero bars/areas add no value
60
434
 
61
- npm pack
62
- npm install ../anarock-widgets/anarock-widgets-1.0.0.tgz
435
+ ### Things Agents Should Not Modify Without Reason
63
436
 
64
- 📝 Notes
437
+ - `src/index.js` export names unless intentionally changing public API
438
+ - shared card/header components unless the change is meant to affect multiple widgets
439
+ - browser storage keys:
440
+ - `community_id`
441
+ - `widget_id`
442
+ - `export`
443
+ - existing layout patterns in unrelated sections
444
+ - package output settings in `package.json`, `vite.config.js`, or build config unless required
65
445
 
66
- Ensure node_modules and dist are not ignored in .gitignore.
446
+ ### Known Caveats
67
447
 
68
- Widgets should not hardcode fonts. Use the global font defined in src/styles/global.css.
448
+ - Some files use `function index()` instead of descriptive names.
449
+ - Some export names in `src/index.js` are inconsistent with implementation names.
450
+ - Some widgets are more demo-driven than data-driven.
451
+ - `CommercialHeader.jsx` is mostly visual and not a full interaction layer.
452
+ - `ActionButtons.jsx` contains commented filter UI; export behavior is the active part.
69
453
 
70
- Keep react and react-dom as peerDependencies (not bundled).
454
+ ### Safe Workflow For New Widget Integration
71
455
 
72
- Always test in the playground before publishing.
456
+ 1. Add the widget file in the correct section folder.
457
+ 2. Reuse `Card.jsx` or `CardNoLogo.jsx`.
458
+ 3. Normalize incoming data near the top of the component.
459
+ 4. Handle `undefined`, `null`, empty array, and all-zero states.
460
+ 5. Use `EmptyState` for explicit no-data rendering.
461
+ 6. Add the widget to the relevant section `index.jsx`.
462
+ 7. Export it from `src/index.js`.
463
+ 8. Render it in `src/playground/App.jsx`.
464
+ 9. Run `npm run build` if the task includes functional code changes.
73
465
 
74
466
 
75
467
  #Important To push the code for the npm package use