dhanasekar-ui 1.7.0 → 1.8.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.
@@ -0,0 +1,330 @@
1
+ 'use strict';var chunkDDGBDWFC_js=require('./chunk-DDGBDWFC.js'),react=require('react'),jsxRuntime=require('react/jsx-runtime');var te=`
2
+ /* ========== SpeedDial Root ========== */
3
+ .ui-speed-dial {
4
+ position: relative;
5
+ display: inline-flex;
6
+ z-index: 1050;
7
+ }
8
+
9
+ .ui-speed-dial--hidden {
10
+ visibility: hidden;
11
+ opacity: 0;
12
+ pointer-events: none;
13
+ }
14
+
15
+ /* ========== Main FAB ========== */
16
+ .ui-speed-dial__fab {
17
+ display: inline-flex;
18
+ align-items: center;
19
+ justify-content: center;
20
+ box-sizing: border-box;
21
+ border: none;
22
+ outline: none;
23
+ cursor: pointer;
24
+ user-select: none;
25
+ vertical-align: middle;
26
+ appearance: none;
27
+ text-decoration: none;
28
+ border-radius: 50%;
29
+ position: relative;
30
+ z-index: 1;
31
+ transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1),
32
+ box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1);
33
+ box-shadow: 0px 3px 5px -1px rgba(0,0,0,0.2),
34
+ 0px 6px 10px 0px rgba(0,0,0,0.14),
35
+ 0px 1px 18px 0px rgba(0,0,0,0.12);
36
+ font-family: inherit;
37
+ }
38
+
39
+ .ui-speed-dial__fab:hover {
40
+ box-shadow: 0px 2px 4px -1px rgba(0,0,0,0.2),
41
+ 0px 4px 5px 0px rgba(0,0,0,0.14),
42
+ 0px 1px 10px 0px rgba(0,0,0,0.12);
43
+ }
44
+
45
+ .ui-speed-dial__fab:active {
46
+ box-shadow: 0px 5px 5px -3px rgba(0,0,0,0.2),
47
+ 0px 8px 10px 1px rgba(0,0,0,0.14),
48
+ 0px 3px 14px 2px rgba(0,0,0,0.12);
49
+ }
50
+
51
+ /* FAB icon transition */
52
+ .ui-speed-dial__fab-icon {
53
+ display: flex;
54
+ align-items: center;
55
+ justify-content: center;
56
+ transition: transform 300ms cubic-bezier(0.4, 0, 0.2, 1);
57
+ }
58
+
59
+ .ui-speed-dial--open .ui-speed-dial__fab-icon--rotate {
60
+ transform: rotate(45deg);
61
+ }
62
+
63
+ .ui-speed-dial__fab-icon--active,
64
+ .ui-speed-dial__fab-icon--open {
65
+ position: absolute;
66
+ top: 50%;
67
+ left: 50%;
68
+ transform: translate(-50%, -50%);
69
+ transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1),
70
+ transform 200ms cubic-bezier(0.4, 0, 0.2, 1);
71
+ }
72
+
73
+ .ui-speed-dial__fab-icon--active {
74
+ opacity: 1;
75
+ transform: translate(-50%, -50%) rotate(0deg);
76
+ }
77
+
78
+ .ui-speed-dial__fab-icon--open {
79
+ opacity: 0;
80
+ transform: translate(-50%, -50%) rotate(-45deg);
81
+ }
82
+
83
+ .ui-speed-dial--open .ui-speed-dial__fab-icon--active {
84
+ opacity: 0;
85
+ transform: translate(-50%, -50%) rotate(45deg);
86
+ }
87
+
88
+ .ui-speed-dial--open .ui-speed-dial__fab-icon--open {
89
+ opacity: 1;
90
+ transform: translate(-50%, -50%) rotate(0deg);
91
+ }
92
+
93
+ /* FAB Sizes */
94
+ .ui-speed-dial__fab--small {
95
+ width: 40px;
96
+ height: 40px;
97
+ }
98
+ .ui-speed-dial__fab--medium {
99
+ width: 56px;
100
+ height: 56px;
101
+ }
102
+ .ui-speed-dial__fab--large {
103
+ width: 72px;
104
+ height: 72px;
105
+ }
106
+
107
+ /* FAB Colors */
108
+ .ui-speed-dial__fab--default {
109
+ color: rgba(0, 0, 0, 0.87);
110
+ background-color: #e0e0e0;
111
+ }
112
+ .ui-speed-dial__fab--default:hover {
113
+ background-color: #d5d5d5;
114
+ }
115
+
116
+ .ui-speed-dial__fab--primary {
117
+ color: #fff;
118
+ background-color: #1976d2;
119
+ }
120
+ .ui-speed-dial__fab--primary:hover {
121
+ background-color: #1565c0;
122
+ }
123
+
124
+ .ui-speed-dial__fab--secondary {
125
+ color: #fff;
126
+ background-color: #dc004e;
127
+ }
128
+ .ui-speed-dial__fab--secondary:hover {
129
+ background-color: #c51162;
130
+ }
131
+
132
+ .ui-speed-dial__fab--inherit {
133
+ color: inherit;
134
+ background-color: inherit;
135
+ }
136
+
137
+ /* ========== Actions Container ========== */
138
+ .ui-speed-dial__actions {
139
+ display: flex;
140
+ position: absolute;
141
+ pointer-events: none;
142
+ gap: 8px;
143
+ padding: 8px 0;
144
+ }
145
+
146
+ .ui-speed-dial--open .ui-speed-dial__actions {
147
+ pointer-events: auto;
148
+ }
149
+
150
+ /* Direction positioning */
151
+ .ui-speed-dial__actions--up {
152
+ flex-direction: column-reverse;
153
+ bottom: 100%;
154
+ left: 50%;
155
+ transform: translateX(-50%);
156
+ padding: 0 0 8px 0;
157
+ }
158
+
159
+ .ui-speed-dial__actions--down {
160
+ flex-direction: column;
161
+ top: 100%;
162
+ left: 50%;
163
+ transform: translateX(-50%);
164
+ padding: 8px 0 0 0;
165
+ }
166
+
167
+ .ui-speed-dial__actions--left {
168
+ flex-direction: row-reverse;
169
+ right: 100%;
170
+ top: 50%;
171
+ transform: translateY(-50%);
172
+ padding: 0 8px 0 0;
173
+ }
174
+
175
+ .ui-speed-dial__actions--right {
176
+ flex-direction: row;
177
+ left: 100%;
178
+ top: 50%;
179
+ transform: translateY(-50%);
180
+ padding: 0 0 0 8px;
181
+ }
182
+
183
+ /* ========== Action Item ========== */
184
+ .ui-speed-dial__action-wrapper {
185
+ display: flex;
186
+ align-items: center;
187
+ gap: 8px;
188
+ position: relative;
189
+ opacity: 0;
190
+ transform: scale(0.3);
191
+ transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1),
192
+ transform 200ms cubic-bezier(0.4, 0, 0.2, 1);
193
+ }
194
+
195
+ .ui-speed-dial--open .ui-speed-dial__action-wrapper {
196
+ opacity: 1;
197
+ transform: scale(1);
198
+ }
199
+
200
+ /* Staggered delay for actions */
201
+ .ui-speed-dial--open .ui-speed-dial__action-wrapper:nth-child(1) { transition-delay: 30ms; }
202
+ .ui-speed-dial--open .ui-speed-dial__action-wrapper:nth-child(2) { transition-delay: 60ms; }
203
+ .ui-speed-dial--open .ui-speed-dial__action-wrapper:nth-child(3) { transition-delay: 90ms; }
204
+ .ui-speed-dial--open .ui-speed-dial__action-wrapper:nth-child(4) { transition-delay: 120ms; }
205
+ .ui-speed-dial--open .ui-speed-dial__action-wrapper:nth-child(5) { transition-delay: 150ms; }
206
+ .ui-speed-dial--open .ui-speed-dial__action-wrapper:nth-child(6) { transition-delay: 180ms; }
207
+ .ui-speed-dial--open .ui-speed-dial__action-wrapper:nth-child(7) { transition-delay: 210ms; }
208
+ .ui-speed-dial--open .ui-speed-dial__action-wrapper:nth-child(8) { transition-delay: 240ms; }
209
+
210
+ /* Closing staggered delay (reversed) */
211
+ .ui-speed-dial__action-wrapper:nth-child(1) { transition-delay: 240ms; }
212
+ .ui-speed-dial__action-wrapper:nth-child(2) { transition-delay: 210ms; }
213
+ .ui-speed-dial__action-wrapper:nth-child(3) { transition-delay: 180ms; }
214
+ .ui-speed-dial__action-wrapper:nth-child(4) { transition-delay: 150ms; }
215
+ .ui-speed-dial__action-wrapper:nth-child(5) { transition-delay: 120ms; }
216
+ .ui-speed-dial__action-wrapper:nth-child(6) { transition-delay: 90ms; }
217
+ .ui-speed-dial__action-wrapper:nth-child(7) { transition-delay: 60ms; }
218
+ .ui-speed-dial__action-wrapper:nth-child(8) { transition-delay: 30ms; }
219
+
220
+ /* Action button */
221
+ .ui-speed-dial__action {
222
+ display: inline-flex;
223
+ align-items: center;
224
+ justify-content: center;
225
+ box-sizing: border-box;
226
+ border: none;
227
+ outline: none;
228
+ cursor: pointer;
229
+ user-select: none;
230
+ appearance: none;
231
+ border-radius: 50%;
232
+ width: 40px;
233
+ height: 40px;
234
+ flex-shrink: 0;
235
+ color: rgba(0, 0, 0, 0.87);
236
+ background-color: #e0e0e0;
237
+ box-shadow: 0px 3px 5px -1px rgba(0,0,0,0.2),
238
+ 0px 6px 10px 0px rgba(0,0,0,0.14),
239
+ 0px 1px 18px 0px rgba(0,0,0,0.12);
240
+ transition: background-color 200ms cubic-bezier(0.4, 0, 0.2, 1),
241
+ box-shadow 200ms cubic-bezier(0.4, 0, 0.2, 1),
242
+ transform 200ms cubic-bezier(0.4, 0, 0.2, 1);
243
+ }
244
+
245
+ .ui-speed-dial__action:hover {
246
+ background-color: #d5d5d5;
247
+ box-shadow: 0px 2px 4px -1px rgba(0,0,0,0.2),
248
+ 0px 4px 5px 0px rgba(0,0,0,0.14),
249
+ 0px 1px 10px 0px rgba(0,0,0,0.12);
250
+ transform: scale(1.08);
251
+ }
252
+
253
+ .ui-speed-dial__action:active {
254
+ transform: scale(0.95);
255
+ }
256
+
257
+ .ui-speed-dial__action:focus-visible {
258
+ outline: 2px solid #1976d2;
259
+ outline-offset: 2px;
260
+ }
261
+
262
+ /* ========== Tooltip (static, always visible when open) ========== */
263
+ .ui-speed-dial__tooltip {
264
+ position: absolute;
265
+ white-space: nowrap;
266
+ background-color: rgba(97, 97, 97, 0.92);
267
+ color: #fff;
268
+ border-radius: 4px;
269
+ padding: 4px 8px;
270
+ font-family: 'Roboto', 'Helvetica', 'Arial', sans-serif;
271
+ font-size: 0.6875rem;
272
+ line-height: 1.4em;
273
+ font-weight: 500;
274
+ pointer-events: none;
275
+ opacity: 0;
276
+ transition: opacity 150ms cubic-bezier(0.4, 0, 0.2, 1);
277
+ }
278
+
279
+ .ui-speed-dial--open .ui-speed-dial__tooltip--visible {
280
+ opacity: 1;
281
+ }
282
+
283
+ .ui-speed-dial__action-wrapper:hover .ui-speed-dial__tooltip {
284
+ opacity: 1;
285
+ }
286
+
287
+ /* Tooltip positions */
288
+ .ui-speed-dial__tooltip--left {
289
+ right: calc(100% + 8px);
290
+ top: 50%;
291
+ transform: translateY(-50%);
292
+ }
293
+
294
+ .ui-speed-dial__tooltip--right {
295
+ left: calc(100% + 8px);
296
+ top: 50%;
297
+ transform: translateY(-50%);
298
+ }
299
+
300
+ .ui-speed-dial__tooltip--top {
301
+ bottom: calc(100% + 8px);
302
+ left: 50%;
303
+ transform: translateX(-50%);
304
+ }
305
+
306
+ .ui-speed-dial__tooltip--bottom {
307
+ top: calc(100% + 8px);
308
+ left: 50%;
309
+ transform: translateX(-50%);
310
+ }
311
+
312
+ /* ========== Backdrop ========== */
313
+ .ui-speed-dial__backdrop {
314
+ position: fixed;
315
+ top: 0;
316
+ left: 0;
317
+ right: 0;
318
+ bottom: 0;
319
+ z-index: -1;
320
+ opacity: 0;
321
+ pointer-events: none;
322
+ transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1);
323
+ }
324
+
325
+ .ui-speed-dial--open .ui-speed-dial__backdrop {
326
+ opacity: 1;
327
+ pointer-events: auto;
328
+ }
329
+ `;function ae(b){switch(b){case "up":case "down":return "left";case "left":case "right":return "top";default:return "left"}}var A=react.forwardRef(({as:b,component:M,className:L,classes:g,children:v,icon:w,openIcon:m,actions:B=[],direction:k="up",open:T,onOpen:E,onClose:z,hidden:H=false,triggerMode:l="click",color:P="primary",size:Y="medium",slotProps:$={},slots:F={},sx:O,ariaLabel:S,...X},c)=>{let[j,R]=react.useState(false),s=T!==void 0,o=s?T:j,x=react.useRef(null),r=react.useRef(null),u=l==="hover"||l==="both",C=l==="click"||l==="both",_=react.useCallback(e=>{s||R(true),E?.(e);},[s,E]),t=react.useCallback(e=>{s||R(false),z?.(e);},[s,z]),I=react.useCallback(e=>{C&&(o?t(e):_(e));},[o,C,t,_]),K=react.useCallback(e=>{u&&(r.current&&(clearTimeout(r.current),r.current=null),_(e));},[u,_]),q=react.useCallback(e=>{u&&(r.current=setTimeout(()=>{t(e);},100));},[u,t]);react.useEffect(()=>()=>{r.current&&clearTimeout(r.current);},[]),react.useEffect(()=>{let e=i=>{i.key==="Escape"&&o&&t(i);};return document.addEventListener("keydown",e),()=>document.removeEventListener("keydown",e)},[o,t]),react.useEffect(()=>{let e=i=>{o&&x.current&&!x.current.contains(i.target)&&t(i);};return document.addEventListener("mousedown",e),()=>document.removeEventListener("mousedown",e)},[o,t]);let G=F.root||b||M||"div",J=(e,i={})=>{let p=$[e],h=typeof p=="function"?p(i):p;return {...i,...h}},Q=ae(k),U=(e,i)=>{e.onClick?.(i),t(i);},V=()=>m?jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("span",{className:"ui-speed-dial__fab-icon--active",children:w}),jsxRuntime.jsx("span",{className:"ui-speed-dial__fab-icon--open",children:m})]}):jsxRuntime.jsx("span",{className:chunkDDGBDWFC_js.a("ui-speed-dial__fab-icon",!m&&"ui-speed-dial__fab-icon--rotate"),children:w}),W=()=>v||B.map((e,i)=>{let p=e.tooltipPlacement||Q,h=e.key||`speed-dial-action-${i}`;return jsxRuntime.jsxs("div",{className:"ui-speed-dial__action-wrapper",children:[jsxRuntime.jsx("span",{className:chunkDDGBDWFC_js.a("ui-speed-dial__tooltip",`ui-speed-dial__tooltip--${p}`,e.tooltipOpen&&"ui-speed-dial__tooltip--visible"),role:"tooltip",children:e.tooltipTitle}),jsxRuntime.jsx("button",{type:"button",className:chunkDDGBDWFC_js.a("ui-speed-dial__action",e.className),style:e.sx,onClick:Z=>U(e,Z),"aria-label":e.tooltipTitle,children:e.icon})]},h)});return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("style",{dangerouslySetInnerHTML:{__html:te}}),jsxRuntime.jsxs(G,{ref:e=>{x.current=e,typeof c=="function"?c(e):c&&(c.current=e);},className:chunkDDGBDWFC_js.a("ui-speed-dial",o&&"ui-speed-dial--open",H&&"ui-speed-dial--hidden",L,g?.root),style:{...O},role:"presentation","aria-label":S,onMouseEnter:K,onMouseLeave:q,...J("root",X),children:[jsxRuntime.jsx("div",{className:"ui-speed-dial__backdrop",onClick:t}),jsxRuntime.jsx("div",{className:chunkDDGBDWFC_js.a("ui-speed-dial__actions",`ui-speed-dial__actions--${k}`),children:W()}),jsxRuntime.jsx("button",{type:"button",className:chunkDDGBDWFC_js.a("ui-speed-dial__fab",`ui-speed-dial__fab--${Y}`,`ui-speed-dial__fab--${P}`,g?.fab),onClick:I,"aria-expanded":o,"aria-haspopup":"true","aria-label":S||"SpeedDial",children:V()})]})]})});A.displayName="SpeedDial";var oe=A;exports.a=oe;//# sourceMappingURL=chunk-ESTSF474.js.map
330
+ //# sourceMappingURL=chunk-ESTSF474.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/SpeedDial/SpeedDial.tsx"],"names":["STYLES","getDefaultTooltipPlacement","direction","SpeedDial","forwardRef","as","component","className","classes","children","icon","openIcon","actions","controlledOpen","onOpen","onClose","hidden","triggerMode","color","size","slotProps","slots","sx","ariaLabel","props","ref","internalOpen","setInternalOpen","useState","isControlled","isOpen","rootRef","useRef","hoverTimeoutRef","canHover","canClick","handleOpen","useCallback","event","handleClose","handleToggle","handleMouseEnter","handleMouseLeave","useEffect","handleKeyDown","e","handleClickOutside","RootComponent","getSlotProps","slotName","baseProps","customProps","resolvedCustomProps","defaultTooltipPlacement","handleActionClick","action","renderIcon","jsxs","Fragment","jsx","cn","renderActions","index","placement","key","node","SpeedDial_default"],"mappings":"gIAMA,IAAMA,EAAAA,CAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;A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","file":"chunk-ESTSF474.js","sourcesContent":["'use client';\n\nimport React, { forwardRef, useState, useRef, useEffect, useCallback, ElementType } from 'react';\nimport { cn } from '../../utils/cn';\nimport { SpeedDialProps, SpeedDialAction, SpeedDialTrigger } from './types';\n\nconst STYLES = `\n /* ========== SpeedDial Root ========== */\n .ui-speed-dial {\n position: relative;\n display: inline-flex;\n z-index: 1050;\n }\n\n .ui-speed-dial--hidden {\n visibility: hidden;\n opacity: 0;\n pointer-events: none;\n }\n\n /* ========== Main FAB ========== */\n .ui-speed-dial__fab {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n border: none;\n outline: none;\n cursor: pointer;\n user-select: none;\n vertical-align: middle;\n appearance: none;\n text-decoration: none;\n border-radius: 50%;\n position: relative;\n z-index: 1;\n transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1),\n box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1);\n box-shadow: 0px 3px 5px -1px rgba(0,0,0,0.2),\n 0px 6px 10px 0px rgba(0,0,0,0.14),\n 0px 1px 18px 0px rgba(0,0,0,0.12);\n font-family: inherit;\n }\n\n .ui-speed-dial__fab:hover {\n box-shadow: 0px 2px 4px -1px rgba(0,0,0,0.2),\n 0px 4px 5px 0px rgba(0,0,0,0.14),\n 0px 1px 10px 0px rgba(0,0,0,0.12);\n }\n\n .ui-speed-dial__fab:active {\n box-shadow: 0px 5px 5px -3px rgba(0,0,0,0.2),\n 0px 8px 10px 1px rgba(0,0,0,0.14),\n 0px 3px 14px 2px rgba(0,0,0,0.12);\n }\n\n /* FAB icon transition */\n .ui-speed-dial__fab-icon {\n display: flex;\n align-items: center;\n justify-content: center;\n transition: transform 300ms cubic-bezier(0.4, 0, 0.2, 1);\n }\n\n .ui-speed-dial--open .ui-speed-dial__fab-icon--rotate {\n transform: rotate(45deg);\n }\n\n .ui-speed-dial__fab-icon--active,\n .ui-speed-dial__fab-icon--open {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1),\n transform 200ms cubic-bezier(0.4, 0, 0.2, 1);\n }\n\n .ui-speed-dial__fab-icon--active {\n opacity: 1;\n transform: translate(-50%, -50%) rotate(0deg);\n }\n\n .ui-speed-dial__fab-icon--open {\n opacity: 0;\n transform: translate(-50%, -50%) rotate(-45deg);\n }\n\n .ui-speed-dial--open .ui-speed-dial__fab-icon--active {\n opacity: 0;\n transform: translate(-50%, -50%) rotate(45deg);\n }\n\n .ui-speed-dial--open .ui-speed-dial__fab-icon--open {\n opacity: 1;\n transform: translate(-50%, -50%) rotate(0deg);\n }\n\n /* FAB Sizes */\n .ui-speed-dial__fab--small {\n width: 40px;\n height: 40px;\n }\n .ui-speed-dial__fab--medium {\n width: 56px;\n height: 56px;\n }\n .ui-speed-dial__fab--large {\n width: 72px;\n height: 72px;\n }\n\n /* FAB Colors */\n .ui-speed-dial__fab--default {\n color: rgba(0, 0, 0, 0.87);\n background-color: #e0e0e0;\n }\n .ui-speed-dial__fab--default:hover {\n background-color: #d5d5d5;\n }\n\n .ui-speed-dial__fab--primary {\n color: #fff;\n background-color: #1976d2;\n }\n .ui-speed-dial__fab--primary:hover {\n background-color: #1565c0;\n }\n\n .ui-speed-dial__fab--secondary {\n color: #fff;\n background-color: #dc004e;\n }\n .ui-speed-dial__fab--secondary:hover {\n background-color: #c51162;\n }\n\n .ui-speed-dial__fab--inherit {\n color: inherit;\n background-color: inherit;\n }\n\n /* ========== Actions Container ========== */\n .ui-speed-dial__actions {\n display: flex;\n position: absolute;\n pointer-events: none;\n gap: 8px;\n padding: 8px 0;\n }\n\n .ui-speed-dial--open .ui-speed-dial__actions {\n pointer-events: auto;\n }\n\n /* Direction positioning */\n .ui-speed-dial__actions--up {\n flex-direction: column-reverse;\n bottom: 100%;\n left: 50%;\n transform: translateX(-50%);\n padding: 0 0 8px 0;\n }\n\n .ui-speed-dial__actions--down {\n flex-direction: column;\n top: 100%;\n left: 50%;\n transform: translateX(-50%);\n padding: 8px 0 0 0;\n }\n\n .ui-speed-dial__actions--left {\n flex-direction: row-reverse;\n right: 100%;\n top: 50%;\n transform: translateY(-50%);\n padding: 0 8px 0 0;\n }\n\n .ui-speed-dial__actions--right {\n flex-direction: row;\n left: 100%;\n top: 50%;\n transform: translateY(-50%);\n padding: 0 0 0 8px;\n }\n\n /* ========== Action Item ========== */\n .ui-speed-dial__action-wrapper {\n display: flex;\n align-items: center;\n gap: 8px;\n position: relative;\n opacity: 0;\n transform: scale(0.3);\n transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1),\n transform 200ms cubic-bezier(0.4, 0, 0.2, 1);\n }\n\n .ui-speed-dial--open .ui-speed-dial__action-wrapper {\n opacity: 1;\n transform: scale(1);\n }\n\n /* Staggered delay for actions */\n .ui-speed-dial--open .ui-speed-dial__action-wrapper:nth-child(1) { transition-delay: 30ms; }\n .ui-speed-dial--open .ui-speed-dial__action-wrapper:nth-child(2) { transition-delay: 60ms; }\n .ui-speed-dial--open .ui-speed-dial__action-wrapper:nth-child(3) { transition-delay: 90ms; }\n .ui-speed-dial--open .ui-speed-dial__action-wrapper:nth-child(4) { transition-delay: 120ms; }\n .ui-speed-dial--open .ui-speed-dial__action-wrapper:nth-child(5) { transition-delay: 150ms; }\n .ui-speed-dial--open .ui-speed-dial__action-wrapper:nth-child(6) { transition-delay: 180ms; }\n .ui-speed-dial--open .ui-speed-dial__action-wrapper:nth-child(7) { transition-delay: 210ms; }\n .ui-speed-dial--open .ui-speed-dial__action-wrapper:nth-child(8) { transition-delay: 240ms; }\n\n /* Closing staggered delay (reversed) */\n .ui-speed-dial__action-wrapper:nth-child(1) { transition-delay: 240ms; }\n .ui-speed-dial__action-wrapper:nth-child(2) { transition-delay: 210ms; }\n .ui-speed-dial__action-wrapper:nth-child(3) { transition-delay: 180ms; }\n .ui-speed-dial__action-wrapper:nth-child(4) { transition-delay: 150ms; }\n .ui-speed-dial__action-wrapper:nth-child(5) { transition-delay: 120ms; }\n .ui-speed-dial__action-wrapper:nth-child(6) { transition-delay: 90ms; }\n .ui-speed-dial__action-wrapper:nth-child(7) { transition-delay: 60ms; }\n .ui-speed-dial__action-wrapper:nth-child(8) { transition-delay: 30ms; }\n\n /* Action button */\n .ui-speed-dial__action {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n border: none;\n outline: none;\n cursor: pointer;\n user-select: none;\n appearance: none;\n border-radius: 50%;\n width: 40px;\n height: 40px;\n flex-shrink: 0;\n color: rgba(0, 0, 0, 0.87);\n background-color: #e0e0e0;\n box-shadow: 0px 3px 5px -1px rgba(0,0,0,0.2),\n 0px 6px 10px 0px rgba(0,0,0,0.14),\n 0px 1px 18px 0px rgba(0,0,0,0.12);\n transition: background-color 200ms cubic-bezier(0.4, 0, 0.2, 1),\n box-shadow 200ms cubic-bezier(0.4, 0, 0.2, 1),\n transform 200ms cubic-bezier(0.4, 0, 0.2, 1);\n }\n\n .ui-speed-dial__action:hover {\n background-color: #d5d5d5;\n box-shadow: 0px 2px 4px -1px rgba(0,0,0,0.2),\n 0px 4px 5px 0px rgba(0,0,0,0.14),\n 0px 1px 10px 0px rgba(0,0,0,0.12);\n transform: scale(1.08);\n }\n\n .ui-speed-dial__action:active {\n transform: scale(0.95);\n }\n\n .ui-speed-dial__action:focus-visible {\n outline: 2px solid #1976d2;\n outline-offset: 2px;\n }\n\n /* ========== Tooltip (static, always visible when open) ========== */\n .ui-speed-dial__tooltip {\n position: absolute;\n white-space: nowrap;\n background-color: rgba(97, 97, 97, 0.92);\n color: #fff;\n border-radius: 4px;\n padding: 4px 8px;\n font-family: 'Roboto', 'Helvetica', 'Arial', sans-serif;\n font-size: 0.6875rem;\n line-height: 1.4em;\n font-weight: 500;\n pointer-events: none;\n opacity: 0;\n transition: opacity 150ms cubic-bezier(0.4, 0, 0.2, 1);\n }\n\n .ui-speed-dial--open .ui-speed-dial__tooltip--visible {\n opacity: 1;\n }\n\n .ui-speed-dial__action-wrapper:hover .ui-speed-dial__tooltip {\n opacity: 1;\n }\n\n /* Tooltip positions */\n .ui-speed-dial__tooltip--left {\n right: calc(100% + 8px);\n top: 50%;\n transform: translateY(-50%);\n }\n\n .ui-speed-dial__tooltip--right {\n left: calc(100% + 8px);\n top: 50%;\n transform: translateY(-50%);\n }\n\n .ui-speed-dial__tooltip--top {\n bottom: calc(100% + 8px);\n left: 50%;\n transform: translateX(-50%);\n }\n\n .ui-speed-dial__tooltip--bottom {\n top: calc(100% + 8px);\n left: 50%;\n transform: translateX(-50%);\n }\n\n /* ========== Backdrop ========== */\n .ui-speed-dial__backdrop {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n z-index: -1;\n opacity: 0;\n pointer-events: none;\n transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1);\n }\n\n .ui-speed-dial--open .ui-speed-dial__backdrop {\n opacity: 1;\n pointer-events: auto;\n }\n`;\n\n/**\n * Determines default tooltip placement based on the direction of actions.\n */\nfunction getDefaultTooltipPlacement(direction: string): 'top' | 'bottom' | 'left' | 'right' {\n switch (direction) {\n case 'up':\n case 'down':\n return 'left';\n case 'left':\n case 'right':\n return 'top';\n default:\n return 'left';\n }\n}\n\nexport const SpeedDial = forwardRef(<T extends ElementType = 'div'>(\n {\n as,\n component,\n className,\n classes,\n children,\n icon,\n openIcon,\n actions = [],\n direction = 'up',\n open: controlledOpen,\n onOpen,\n onClose,\n hidden = false,\n triggerMode = 'click',\n color = 'primary',\n size = 'medium',\n slotProps = {},\n slots = {},\n sx,\n ariaLabel,\n ...props\n }: SpeedDialProps<T>,\n ref: any\n) => {\n const [internalOpen, setInternalOpen] = useState(false);\n const isControlled = controlledOpen !== undefined;\n const isOpen = isControlled ? controlledOpen : internalOpen;\n\n const rootRef = useRef<HTMLDivElement>(null);\n const hoverTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const canHover = triggerMode === 'hover' || triggerMode === 'both';\n const canClick = triggerMode === 'click' || triggerMode === 'both';\n\n const handleOpen = useCallback((event: React.SyntheticEvent) => {\n if (!isControlled) setInternalOpen(true);\n onOpen?.(event);\n }, [isControlled, onOpen]);\n\n const handleClose = useCallback((event: React.SyntheticEvent) => {\n if (!isControlled) setInternalOpen(false);\n onClose?.(event);\n }, [isControlled, onClose]);\n\n const handleToggle = useCallback((event: React.MouseEvent<HTMLButtonElement>) => {\n if (!canClick) return;\n if (isOpen) {\n handleClose(event);\n } else {\n handleOpen(event);\n }\n }, [isOpen, canClick, handleClose, handleOpen]);\n\n // Hover handlers\n const handleMouseEnter = useCallback((event: React.MouseEvent) => {\n if (!canHover) return;\n if (hoverTimeoutRef.current) {\n clearTimeout(hoverTimeoutRef.current);\n hoverTimeoutRef.current = null;\n }\n handleOpen(event);\n }, [canHover, handleOpen]);\n\n const handleMouseLeave = useCallback((event: React.MouseEvent) => {\n if (!canHover) return;\n // Small delay to prevent flicker when moving between FAB and actions\n hoverTimeoutRef.current = setTimeout(() => {\n handleClose(event);\n }, 100);\n }, [canHover, handleClose]);\n\n // Cleanup timeout on unmount\n useEffect(() => {\n return () => {\n if (hoverTimeoutRef.current) clearTimeout(hoverTimeoutRef.current);\n };\n }, []);\n\n // Close on Escape key\n useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape' && isOpen) {\n handleClose(e as any);\n }\n };\n document.addEventListener('keydown', handleKeyDown);\n return () => document.removeEventListener('keydown', handleKeyDown);\n }, [isOpen, handleClose]);\n\n // Close on outside click\n useEffect(() => {\n const handleClickOutside = (e: MouseEvent) => {\n if (\n isOpen &&\n rootRef.current &&\n !rootRef.current.contains(e.target as Node)\n ) {\n handleClose(e as any);\n }\n };\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, [isOpen, handleClose]);\n\n const RootComponent = slots.root || as || component || 'div';\n\n const getSlotProps = (slotName: 'root', baseProps: any = {}) => {\n const customProps = slotProps[slotName];\n const resolvedCustomProps = typeof customProps === 'function' ? customProps(baseProps) : customProps;\n return { ...baseProps, ...resolvedCustomProps };\n };\n\n const defaultTooltipPlacement = getDefaultTooltipPlacement(direction);\n\n const handleActionClick = (action: SpeedDialAction, event: React.MouseEvent<HTMLButtonElement>) => {\n action.onClick?.(event);\n handleClose(event);\n };\n\n const renderIcon = () => {\n if (openIcon) {\n return (\n <>\n <span className=\"ui-speed-dial__fab-icon--active\">\n {icon}\n </span>\n <span className=\"ui-speed-dial__fab-icon--open\">\n {openIcon}\n </span>\n </>\n );\n }\n\n return (\n <span\n className={cn(\n 'ui-speed-dial__fab-icon',\n !openIcon && 'ui-speed-dial__fab-icon--rotate'\n )}\n >\n {icon}\n </span>\n );\n };\n\n const renderActions = () => {\n if (children) return children;\n\n return actions.map((action, index) => {\n const placement = action.tooltipPlacement || defaultTooltipPlacement;\n const key = action.key || `speed-dial-action-${index}`;\n\n return (\n <div key={key} className=\"ui-speed-dial__action-wrapper\">\n {/* Tooltip */}\n <span\n className={cn(\n 'ui-speed-dial__tooltip',\n `ui-speed-dial__tooltip--${placement}`,\n action.tooltipOpen && 'ui-speed-dial__tooltip--visible'\n )}\n role=\"tooltip\"\n >\n {action.tooltipTitle}\n </span>\n\n {/* Action button */}\n <button\n type=\"button\"\n className={cn('ui-speed-dial__action', action.className)}\n style={action.sx}\n onClick={(e) => handleActionClick(action, e)}\n aria-label={action.tooltipTitle}\n >\n {action.icon}\n </button>\n </div>\n );\n });\n };\n\n return (\n <>\n <style dangerouslySetInnerHTML={{ __html: STYLES }} />\n <RootComponent\n ref={(node: HTMLDivElement) => {\n (rootRef as any).current = node;\n if (typeof ref === 'function') ref(node);\n else if (ref) ref.current = node;\n }}\n className={cn(\n 'ui-speed-dial',\n isOpen && 'ui-speed-dial--open',\n hidden && 'ui-speed-dial--hidden',\n className,\n classes?.root\n )}\n style={{ ...sx }}\n role=\"presentation\"\n aria-label={ariaLabel}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n {...getSlotProps('root', props)}\n >\n {/* Backdrop for closing on click-away */}\n <div\n className=\"ui-speed-dial__backdrop\"\n onClick={handleClose as any}\n />\n\n {/* Actions */}\n <div\n className={cn(\n 'ui-speed-dial__actions',\n `ui-speed-dial__actions--${direction}`\n )}\n >\n {renderActions()}\n </div>\n\n {/* Main FAB */}\n <button\n type=\"button\"\n className={cn(\n 'ui-speed-dial__fab',\n `ui-speed-dial__fab--${size}`,\n `ui-speed-dial__fab--${color}`,\n classes?.fab\n )}\n onClick={handleToggle}\n aria-expanded={isOpen}\n aria-haspopup=\"true\"\n aria-label={ariaLabel || 'SpeedDial'}\n >\n {renderIcon()}\n </button>\n </RootComponent>\n </>\n );\n});\n\nSpeedDial.displayName = 'SpeedDial';\n\nexport default SpeedDial;\n"]}
@@ -1,4 +1,4 @@
1
- 'use strict';var chunkHZF4MXSO_js=require('./chunk-HZF4MXSO.js'),chunkCGUBPQGJ_js=require('./chunk-CGUBPQGJ.js'),chunkTYTCGH2C_js=require('./chunk-TYTCGH2C.js'),chunkDDGBDWFC_js=require('./chunk-DDGBDWFC.js'),react=require('react'),jsxRuntime=require('react/jsx-runtime');var ye=`
1
+ 'use strict';var chunkCGUBPQGJ_js=require('./chunk-CGUBPQGJ.js'),chunkHZF4MXSO_js=require('./chunk-HZF4MXSO.js'),chunkTYTCGH2C_js=require('./chunk-TYTCGH2C.js'),chunkDDGBDWFC_js=require('./chunk-DDGBDWFC.js'),react=require('react'),jsxRuntime=require('react/jsx-runtime');var ye=`
2
2
  /* DataGrid Root */
3
3
  .ui-datagrid {
4
4
  display: flex;
@@ -229,5 +229,5 @@
229
229
  .ui-datagrid-info {
230
230
  font-weight: 500;
231
231
  }
232
- `,K=react.forwardRef(({columns:v,rows:y=[],getRowId:A,page:h,defaultPage:Q=0,pageSize:g=10,pageSizeOptions:U=[5,10,25,50],pagination:M=true,paginationMode:S="client",rowCount:X,onPageChange:N,onPageSizeChange:G,checkboxSelection:z=false,rowSelectionModel:R,onRowSelectionModelChange:T,loading:Z=false,density:P="standard",getRowClassName:$,height:ee,sx:te,classes:u={},className:ie,...H},ae)=>{let[de,I]=react.useState(Q),W=h!==void 0&&N!==void 0,x=W?h:de,[re,F]=react.useState(g!==void 0?g:10),O=g!==void 0&&G!==void 0,f=O?g:re,[c,ne]=react.useState(null),[p,oe]=react.useState(null),[le,se]=react.useState([]),s=R!==void 0?R:le;react.useEffect(()=>{h!==void 0&&I(h);},[h]),react.useEffect(()=>{g!==void 0&&F(g);},[g]),react.useEffect(()=>{I(0);},[f]);let k=e=>{R===void 0&&se(e),T&&T(e);},_=e=>A?A(e):e.id!==void 0?e.id:"",ce=e=>{if(e.sortable===false)return;let t="asc";c===e.field&&(p==="asc"?t="desc":p==="desc"?t=null:t="asc"),ne(t?e.field:null),oe(t);},j=S==="server"||!c||!p?y:[...y].sort((e,t)=>{let a=v.find(r=>r.field===c),d=a?.valueGetter?a.valueGetter({row:e,value:e[c]}):e[c],o=a?.valueGetter?a.valueGetter({row:t,value:t[c]}):t[c];return d==null&&(d=""),o==null&&(o=""),typeof d=="string"&&typeof o=="string"?p==="asc"?d.localeCompare(o):o.localeCompare(d):p==="asc"?d>o?1:d<o?-1:0:d<o?1:d>o?-1:0}),w=S==="server"?X??y.length:y.length,D=M&&S==="client"?j.slice(x*f,(x+1)*f):j,m=D.map(_),B=m.length>0&&m.every(e=>s.includes(e)),ge=m.length>0&&m.some(e=>s.includes(e))&&!B,fe=e=>{if(e.target.checked){let t=m.filter(a=>!s.includes(a));k([...s,...t]);}else {let t=s.filter(a=>!m.includes(a));k(t);}},ue=e=>{let t=s.includes(e);k(t?s.filter(a=>a!==e):[...s,e]);},pe=e=>{W||I(e-1),N&&N(e-1);},me=e=>{let t=parseInt(e.target.value,10);O||F(t),G&&G(t);},he=w===0?0:x*f+1,xe=Math.min(w,(x+1)*f),V=Math.ceil(w/f),Y=e=>{let t={};return e.width?(t.width=`${e.width}px`,t.minWidth=`${e.width}px`):e.minWidth&&(t.minWidth=`${e.minWidth}px`),e.flex&&(t.flex=e.flex),t};return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("style",{dangerouslySetInnerHTML:{__html:ye}}),jsxRuntime.jsxs("div",{ref:ae,className:chunkDDGBDWFC_js.a("ui-datagrid",`ui-datagrid--${P}`,u.root,ie),style:{height:ee,...chunkTYTCGH2C_js.a(te),...H.style},...H,children:[jsxRuntime.jsxs("div",{className:chunkDDGBDWFC_js.a("ui-datagrid-main"),children:[Z&&jsxRuntime.jsx("div",{className:"ui-datagrid-loading-overlay",children:jsxRuntime.jsx("div",{className:"ui-datagrid-spinner"})}),jsxRuntime.jsxs("table",{className:chunkDDGBDWFC_js.a("ui-datagrid-table",u.table),children:[jsxRuntime.jsx("thead",{className:chunkDDGBDWFC_js.a("ui-datagrid-thead",u.header),children:jsxRuntime.jsxs("tr",{className:"ui-datagrid-tr",children:[z&&jsxRuntime.jsx("th",{className:"ui-datagrid-th ui-datagrid-cell--checkbox",children:jsxRuntime.jsx(chunkCGUBPQGJ_js.d,{size:"small",checked:B,indeterminate:ge,onChange:fe})}),v.map(e=>{let t=e.sortable!==false,a=c===e.field,d=e.headerAlign?`ui-datagrid-cell--align-${e.headerAlign}`:e.align?`ui-datagrid-cell--align-${e.align}`:"";return jsxRuntime.jsx("th",{onClick:()=>ce(e),className:chunkDDGBDWFC_js.a("ui-datagrid-th",t&&"ui-datagrid-th--sortable",d),style:Y(e),children:jsxRuntime.jsxs("div",{className:"ui-datagrid-th-content",children:[jsxRuntime.jsx("span",{children:e.headerName??e.field}),t&&jsxRuntime.jsx("span",{className:chunkDDGBDWFC_js.a("ui-datagrid-th-sort-icon",a&&"ui-datagrid-th-sort-icon--active"),style:{transform:a&&p==="desc"?"rotate(180deg)":void 0},children:jsxRuntime.jsxs("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",children:[jsxRuntime.jsx("line",{x1:"12",y1:"19",x2:"12",y2:"5"}),jsxRuntime.jsx("polyline",{points:"5 12 12 5 19 12"})]})})]})},e.field)})]})}),jsxRuntime.jsx("tbody",{children:D.length===0?jsxRuntime.jsx("tr",{className:"ui-datagrid-tr",children:jsxRuntime.jsx("td",{colSpan:v.length+(z?1:0),className:"ui-datagrid-td",style:{textAlign:"center",padding:"32px 0",color:"#64748b"},children:"No rows to display"})}):D.map((e,t)=>{let a=_(e),d=s.includes(a),o=$?$({row:e}):"";return jsxRuntime.jsxs("tr",{className:chunkDDGBDWFC_js.a("ui-datagrid-tr",d&&"ui-datagrid-tr--selected",o,u.row),children:[z&&jsxRuntime.jsx("td",{className:"ui-datagrid-td ui-datagrid-cell--checkbox",children:jsxRuntime.jsx(chunkCGUBPQGJ_js.d,{size:"small",checked:d,onChange:()=>ue(a)})}),v.map(r=>{let be=r.align?`ui-datagrid-cell--align-${r.align}`:"",C=r.valueGetter?r.valueGetter({row:e,value:e[r.field]}):e[r.field];return jsxRuntime.jsx("td",{className:chunkDDGBDWFC_js.a("ui-datagrid-td",be,u.cell),style:Y(r),children:r.renderCell?r.renderCell({value:C,row:e,field:r.field,id:a}):C!=null?String(C):""},r.field)})]},a||t)})})]})]}),M&&jsxRuntime.jsxs("div",{className:chunkDDGBDWFC_js.a("ui-datagrid-footer",u.footer),children:[jsxRuntime.jsx("div",{className:"ui-datagrid-footer-left",children:jsxRuntime.jsxs("div",{className:"ui-datagrid-rows-per-page",children:[jsxRuntime.jsx("span",{children:"Rows per page:"}),jsxRuntime.jsx("select",{value:f,onChange:me,className:"ui-datagrid-select",children:U.map(e=>jsxRuntime.jsx("option",{value:e,children:e},e))})]})}),jsxRuntime.jsxs("div",{className:"ui-datagrid-footer-right",children:[jsxRuntime.jsxs("span",{className:"ui-datagrid-info",children:[he,"-",xe," of ",w]}),V>1&&jsxRuntime.jsx("div",{className:"ui-datagrid-footer-pagination",children:jsxRuntime.jsx(chunkHZF4MXSO_js.a,{count:V,page:x+1,onChange:(e,t)=>pe(t),size:"small",shape:"rounded"})})]})]})]})]})});K.displayName="DataGrid";var ke=K;exports.a=K;exports.b=ke;//# sourceMappingURL=chunk-UMANLRMH.js.map
233
- //# sourceMappingURL=chunk-UMANLRMH.js.map
232
+ `,K=react.forwardRef(({columns:v,rows:y=[],getRowId:A,page:h,defaultPage:Q=0,pageSize:g=10,pageSizeOptions:U=[5,10,25,50],pagination:M=true,paginationMode:S="client",rowCount:X,onPageChange:N,onPageSizeChange:G,checkboxSelection:z=false,rowSelectionModel:R,onRowSelectionModelChange:T,loading:Z=false,density:P="standard",getRowClassName:$,height:ee,sx:te,classes:u={},className:ie,...H},ae)=>{let[de,I]=react.useState(Q),W=h!==void 0&&N!==void 0,x=W?h:de,[re,F]=react.useState(g!==void 0?g:10),O=g!==void 0&&G!==void 0,f=O?g:re,[c,ne]=react.useState(null),[p,oe]=react.useState(null),[le,se]=react.useState([]),s=R!==void 0?R:le;react.useEffect(()=>{h!==void 0&&I(h);},[h]),react.useEffect(()=>{g!==void 0&&F(g);},[g]),react.useEffect(()=>{I(0);},[f]);let k=e=>{R===void 0&&se(e),T&&T(e);},_=e=>A?A(e):e.id!==void 0?e.id:"",ce=e=>{if(e.sortable===false)return;let t="asc";c===e.field&&(p==="asc"?t="desc":p==="desc"?t=null:t="asc"),ne(t?e.field:null),oe(t);},j=S==="server"||!c||!p?y:[...y].sort((e,t)=>{let a=v.find(r=>r.field===c),d=a?.valueGetter?a.valueGetter({row:e,value:e[c]}):e[c],o=a?.valueGetter?a.valueGetter({row:t,value:t[c]}):t[c];return d==null&&(d=""),o==null&&(o=""),typeof d=="string"&&typeof o=="string"?p==="asc"?d.localeCompare(o):o.localeCompare(d):p==="asc"?d>o?1:d<o?-1:0:d<o?1:d>o?-1:0}),w=S==="server"?X??y.length:y.length,D=M&&S==="client"?j.slice(x*f,(x+1)*f):j,m=D.map(_),B=m.length>0&&m.every(e=>s.includes(e)),ge=m.length>0&&m.some(e=>s.includes(e))&&!B,fe=e=>{if(e.target.checked){let t=m.filter(a=>!s.includes(a));k([...s,...t]);}else {let t=s.filter(a=>!m.includes(a));k(t);}},ue=e=>{let t=s.includes(e);k(t?s.filter(a=>a!==e):[...s,e]);},pe=e=>{W||I(e-1),N&&N(e-1);},me=e=>{let t=parseInt(e.target.value,10);O||F(t),G&&G(t);},he=w===0?0:x*f+1,xe=Math.min(w,(x+1)*f),V=Math.ceil(w/f),Y=e=>{let t={};return e.width?(t.width=`${e.width}px`,t.minWidth=`${e.width}px`):e.minWidth&&(t.minWidth=`${e.minWidth}px`),e.flex&&(t.flex=e.flex),t};return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("style",{dangerouslySetInnerHTML:{__html:ye}}),jsxRuntime.jsxs("div",{ref:ae,className:chunkDDGBDWFC_js.a("ui-datagrid",`ui-datagrid--${P}`,u.root,ie),style:{height:ee,...chunkTYTCGH2C_js.a(te),...H.style},...H,children:[jsxRuntime.jsxs("div",{className:chunkDDGBDWFC_js.a("ui-datagrid-main"),children:[Z&&jsxRuntime.jsx("div",{className:"ui-datagrid-loading-overlay",children:jsxRuntime.jsx("div",{className:"ui-datagrid-spinner"})}),jsxRuntime.jsxs("table",{className:chunkDDGBDWFC_js.a("ui-datagrid-table",u.table),children:[jsxRuntime.jsx("thead",{className:chunkDDGBDWFC_js.a("ui-datagrid-thead",u.header),children:jsxRuntime.jsxs("tr",{className:"ui-datagrid-tr",children:[z&&jsxRuntime.jsx("th",{className:"ui-datagrid-th ui-datagrid-cell--checkbox",children:jsxRuntime.jsx(chunkCGUBPQGJ_js.d,{size:"small",checked:B,indeterminate:ge,onChange:fe})}),v.map(e=>{let t=e.sortable!==false,a=c===e.field,d=e.headerAlign?`ui-datagrid-cell--align-${e.headerAlign}`:e.align?`ui-datagrid-cell--align-${e.align}`:"";return jsxRuntime.jsx("th",{onClick:()=>ce(e),className:chunkDDGBDWFC_js.a("ui-datagrid-th",t&&"ui-datagrid-th--sortable",d),style:Y(e),children:jsxRuntime.jsxs("div",{className:"ui-datagrid-th-content",children:[jsxRuntime.jsx("span",{children:e.headerName??e.field}),t&&jsxRuntime.jsx("span",{className:chunkDDGBDWFC_js.a("ui-datagrid-th-sort-icon",a&&"ui-datagrid-th-sort-icon--active"),style:{transform:a&&p==="desc"?"rotate(180deg)":void 0},children:jsxRuntime.jsxs("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",children:[jsxRuntime.jsx("line",{x1:"12",y1:"19",x2:"12",y2:"5"}),jsxRuntime.jsx("polyline",{points:"5 12 12 5 19 12"})]})})]})},e.field)})]})}),jsxRuntime.jsx("tbody",{children:D.length===0?jsxRuntime.jsx("tr",{className:"ui-datagrid-tr",children:jsxRuntime.jsx("td",{colSpan:v.length+(z?1:0),className:"ui-datagrid-td",style:{textAlign:"center",padding:"32px 0",color:"#64748b"},children:"No rows to display"})}):D.map((e,t)=>{let a=_(e),d=s.includes(a),o=$?$({row:e}):"";return jsxRuntime.jsxs("tr",{className:chunkDDGBDWFC_js.a("ui-datagrid-tr",d&&"ui-datagrid-tr--selected",o,u.row),children:[z&&jsxRuntime.jsx("td",{className:"ui-datagrid-td ui-datagrid-cell--checkbox",children:jsxRuntime.jsx(chunkCGUBPQGJ_js.d,{size:"small",checked:d,onChange:()=>ue(a)})}),v.map(r=>{let be=r.align?`ui-datagrid-cell--align-${r.align}`:"",C=r.valueGetter?r.valueGetter({row:e,value:e[r.field]}):e[r.field];return jsxRuntime.jsx("td",{className:chunkDDGBDWFC_js.a("ui-datagrid-td",be,u.cell),style:Y(r),children:r.renderCell?r.renderCell({value:C,row:e,field:r.field,id:a}):C!=null?String(C):""},r.field)})]},a||t)})})]})]}),M&&jsxRuntime.jsxs("div",{className:chunkDDGBDWFC_js.a("ui-datagrid-footer",u.footer),children:[jsxRuntime.jsx("div",{className:"ui-datagrid-footer-left",children:jsxRuntime.jsxs("div",{className:"ui-datagrid-rows-per-page",children:[jsxRuntime.jsx("span",{children:"Rows per page:"}),jsxRuntime.jsx("select",{value:f,onChange:me,className:"ui-datagrid-select",children:U.map(e=>jsxRuntime.jsx("option",{value:e,children:e},e))})]})}),jsxRuntime.jsxs("div",{className:"ui-datagrid-footer-right",children:[jsxRuntime.jsxs("span",{className:"ui-datagrid-info",children:[he,"-",xe," of ",w]}),V>1&&jsxRuntime.jsx("div",{className:"ui-datagrid-footer-pagination",children:jsxRuntime.jsx(chunkHZF4MXSO_js.a,{count:V,page:x+1,onChange:(e,t)=>pe(t),size:"small",shape:"rounded"})})]})]})]})]})});K.displayName="DataGrid";var ke=K;exports.a=K;exports.b=ke;//# sourceMappingURL=chunk-MINO7ZUA.js.map
233
+ //# sourceMappingURL=chunk-MINO7ZUA.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/DataGrid/DataGrid.tsx"],"names":["STYLES","DataGrid","forwardRef","columns","rows","getRowId","pageProp","defaultPage","pageSizeProp","pageSizeOptions","pagination","paginationMode","rowCountProp","onPageChange","onPageSizeChange","checkboxSelection","rowSelectionModel","onRowSelectionModelChange","loading","density","getRowClassName","height","sx","classes","className","props","ref","pageState","setPageState","useState","isPageControlled","page","pageSizeState","setPageSizeState","isPageSizeControlled","pageSize","sortField","setSortField","sortOrder","setSortOrder","selectionModelInternal","setSelectionModelInternal","selectionModel","useEffect","updateSelection","newSelection","getRowIdValue","row","handleSortClick","col","nextOrder","sortedRows","a","b","c","valA","valB","totalRowsCount","paginatedRows","paginatedRowIds","isAllSelected","id","isSomeSelected","handleSelectAllChange","toAdd","remaining","handleRowSelectChange","rowId","isSelected","handlePageChange","newPage","handlePageSizeChange","newSize","fromIndex","toIndex","totalPages","getColStyle","style","jsxs","Fragment","jsx","cn","handleSx","Checkbox","isColSortable","isSorted","alignClass","index","rowCustomClass","value","opt","Pagination","_","p","DataGrid_default"],"mappings":"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","file":"chunk-UMANLRMH.js","sourcesContent":["'use client';\n\nimport { forwardRef, useState, useEffect, ChangeEvent, CSSProperties } from 'react';\nimport { cn } from '../../utils/cn';\nimport { handleSx } from '../../utils/handleSx';\nimport { Checkbox } from '../Checkbox/Checkbox';\nimport { Pagination } from '../Pagination/Pagination';\nimport { DataGridProps, GridRowId, GridColDef, GridRowModel } from './DataGrid.types';\n\nconst STYLES = `\n /* DataGrid Root */\n .ui-datagrid {\n display: flex;\n flex-direction: column;\n position: relative;\n border: 1px solid #e2e8f0;\n border-radius: 8px;\n background-color: #ffffff;\n font-family: inherit;\n box-sizing: border-box;\n overflow: hidden;\n }\n\n /* Main scroll area */\n .ui-datagrid-main {\n flex: 1 1 auto;\n position: relative;\n overflow: auto;\n width: 100%;\n }\n\n /* Table structure */\n .ui-datagrid-table {\n width: 100%;\n border-collapse: collapse;\n border-spacing: 0;\n text-align: left;\n table-layout: auto;\n }\n\n /* Table Headers */\n .ui-datagrid-thead {\n background-color: #f8fafc;\n position: sticky;\n top: 0;\n z-index: 3;\n border-bottom: 1px solid #e2e8f0;\n }\n\n .ui-datagrid-th {\n padding: 12px 16px;\n font-size: 0.875rem;\n font-weight: 600;\n color: #475569;\n user-select: none;\n box-sizing: border-box;\n white-space: nowrap;\n border-bottom: 1px solid #e2e8f0;\n background-color: #f8fafc;\n transition: background-color 150ms;\n }\n\n .ui-datagrid-th--sortable {\n cursor: pointer;\n }\n\n .ui-datagrid-th--sortable:hover {\n background-color: #f1f5f9;\n }\n\n .ui-datagrid-th-content {\n display: flex;\n align-items: center;\n gap: 8px;\n }\n\n .ui-datagrid-th-sort-icon {\n display: inline-flex;\n align-items: center;\n color: #94a3b8;\n transition: color 150ms, transform 150ms;\n }\n\n .ui-datagrid-th-sort-icon--active {\n color: #3b82f6;\n }\n\n /* Row & Cells styling */\n .ui-datagrid-tr {\n border-bottom: 1px solid #e2e8f0;\n transition: background-color 150ms;\n }\n\n .ui-datagrid-tr:last-child {\n border-bottom: none;\n }\n\n .ui-datagrid-tr:hover {\n background-color: #f8fafc;\n }\n\n .ui-datagrid-tr--selected {\n background-color: rgba(59, 130, 246, 0.04);\n }\n\n .ui-datagrid-tr--selected:hover {\n background-color: rgba(59, 130, 246, 0.08);\n }\n\n .ui-datagrid-td {\n padding: 12px 16px;\n font-size: 0.875rem;\n color: #0f172a;\n box-sizing: border-box;\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n }\n\n /* Density support */\n .ui-datagrid--compact .ui-datagrid-th {\n padding: 8px 12px;\n font-size: 0.8125rem;\n }\n .ui-datagrid--compact .ui-datagrid-td {\n padding: 6px 12px;\n font-size: 0.8125rem;\n }\n\n .ui-datagrid--comfortable .ui-datagrid-th {\n padding: 16px 20px;\n font-size: 0.9375rem;\n }\n .ui-datagrid--comfortable .ui-datagrid-td {\n padding: 16px 20px;\n font-size: 0.9375rem;\n }\n\n /* Centered and aligned cell styles */\n .ui-datagrid-cell--align-center {\n text-align: center;\n }\n .ui-datagrid-cell--align-right {\n text-align: right;\n }\n\n .ui-datagrid-cell--checkbox {\n width: 48px;\n padding: 0;\n text-align: center;\n vertical-align: middle;\n }\n\n .ui-datagrid-cell--checkbox .ui-checkbox {\n vertical-align: middle;\n }\n\n /* Loading State glassmorphism overlay */\n .ui-datagrid-loading-overlay {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-color: rgba(255, 255, 255, 0.55);\n z-index: 10;\n display: flex;\n align-items: center;\n justify-content: center;\n backdrop-filter: blur(1px);\n }\n\n .ui-datagrid-spinner {\n width: 40px;\n height: 40px;\n border: 3px solid #e2e8f0;\n border-top-color: #3b82f6;\n border-radius: 50%;\n animation: ui-datagrid-spin 1s linear infinite;\n }\n\n @keyframes ui-datagrid-spin {\n to {\n transform: rotate(360deg);\n }\n }\n\n /* Footer & Pagination styles */\n .ui-datagrid-footer {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: space-between;\n padding: 12px 16px;\n border-top: 1px solid #e2e8f0;\n background-color: #ffffff;\n gap: 16px;\n font-size: 0.875rem;\n color: #475569;\n box-sizing: border-box;\n }\n\n .ui-datagrid-footer-left {\n display: flex;\n align-items: center;\n gap: 16px;\n }\n\n .ui-datagrid-rows-per-page {\n display: flex;\n align-items: center;\n gap: 8px;\n }\n\n .ui-datagrid-select {\n padding: 4px 8px;\n border: 1px solid #cbd5e1;\n border-radius: 4px;\n background-color: #ffffff;\n color: #475569;\n font-family: inherit;\n font-size: 0.875rem;\n cursor: pointer;\n outline: none;\n transition: border-color 150ms;\n }\n\n .ui-datagrid-select:focus {\n border-color: #3b82f6;\n }\n\n .ui-datagrid-footer-right {\n display: flex;\n align-items: center;\n gap: 16px;\n }\n\n .ui-datagrid-info {\n font-weight: 500;\n }\n`;\n\nexport const DataGrid = forwardRef<HTMLDivElement, DataGridProps>(\n (\n {\n columns,\n rows = [],\n getRowId,\n page: pageProp,\n defaultPage = 0,\n pageSize: pageSizeProp = 10,\n pageSizeOptions = [5, 10, 25, 50],\n pagination = true,\n paginationMode = 'client',\n rowCount: rowCountProp,\n onPageChange,\n onPageSizeChange,\n checkboxSelection = false,\n rowSelectionModel,\n onRowSelectionModelChange,\n loading = false,\n density = 'standard',\n getRowClassName,\n height,\n sx,\n classes = {},\n className,\n ...props\n },\n ref\n ) => {\n // Page state (0-indexed internally to match MUI)\n const [pageState, setPageState] = useState(defaultPage);\n const isPageControlled = pageProp !== undefined && onPageChange !== undefined;\n const page = isPageControlled ? pageProp : pageState;\n\n // PageSize state\n const [pageSizeState, setPageSizeState] = useState(pageSizeProp !== undefined ? pageSizeProp : 10);\n const isPageSizeControlled = pageSizeProp !== undefined && onPageSizeChange !== undefined;\n const pageSize = isPageSizeControlled ? pageSizeProp : pageSizeState;\n\n // Client-side Sorting state\n const [sortField, setSortField] = useState<string | null>(null);\n const [sortOrder, setSortOrder] = useState<'asc' | 'desc' | null>(null);\n\n // Row selection state\n const [selectionModelInternal, setSelectionModelInternal] = useState<GridRowId[]>([]);\n const selectionModel = rowSelectionModel !== undefined ? rowSelectionModel : selectionModelInternal;\n\n // Sync props to state if parent updates them\n useEffect(() => {\n if (pageProp !== undefined) {\n setPageState(pageProp);\n }\n }, [pageProp]);\n\n useEffect(() => {\n if (pageSizeProp !== undefined) {\n setPageSizeState(pageSizeProp);\n }\n }, [pageSizeProp]);\n\n // Reset page if page size changes or rows filter\n useEffect(() => {\n setPageState(0);\n }, [pageSize]);\n\n // Handle Selection Change helper\n const updateSelection = (newSelection: GridRowId[]) => {\n if (rowSelectionModel === undefined) {\n setSelectionModelInternal(newSelection);\n }\n if (onRowSelectionModelChange) {\n onRowSelectionModelChange(newSelection);\n }\n };\n\n // Row ID helper\n const getRowIdValue = (row: GridRowModel): GridRowId => {\n if (getRowId) return getRowId(row);\n return row.id !== undefined ? row.id : '';\n };\n\n // Client-side sorting logic\n const handleSortClick = (col: GridColDef) => {\n if (col.sortable === false) return;\n\n let nextOrder: 'asc' | 'desc' | null = 'asc';\n if (sortField === col.field) {\n if (sortOrder === 'asc') nextOrder = 'desc';\n else if (sortOrder === 'desc') nextOrder = null;\n else nextOrder = 'asc';\n }\n\n setSortField(nextOrder ? col.field : null);\n setSortOrder(nextOrder);\n };\n\n // Compute sorted rows (only if client-side pagination/sorting)\n const getSortedRows = () => {\n if (paginationMode === 'server' || !sortField || !sortOrder) {\n return rows;\n }\n\n return [...rows].sort((a, b) => {\n const col = columns.find((c) => c.field === sortField);\n let valA = col?.valueGetter ? col.valueGetter({ row: a, value: a[sortField] }) : a[sortField];\n let valB = col?.valueGetter ? col.valueGetter({ row: b, value: b[sortField] }) : b[sortField];\n\n if (valA == null) valA = '';\n if (valB == null) valB = '';\n\n if (typeof valA === 'string' && typeof valB === 'string') {\n return sortOrder === 'asc' ? valA.localeCompare(valB) : valB.localeCompare(valA);\n }\n\n return sortOrder === 'asc'\n ? valA > valB ? 1 : valA < valB ? -1 : 0\n : valA < valB ? 1 : valA > valB ? -1 : 0;\n });\n };\n\n const sortedRows = getSortedRows();\n\n // Compute total rows count\n const totalRowsCount = paginationMode === 'server' ? (rowCountProp ?? rows.length) : rows.length;\n\n // Slice rows for client pagination\n const paginatedRows =\n pagination && paginationMode === 'client'\n ? sortedRows.slice(page * pageSize, (page + 1) * pageSize)\n : sortedRows;\n\n // Checkbox helper states\n const paginatedRowIds = paginatedRows.map(getRowIdValue);\n const isAllSelected = paginatedRowIds.length > 0 && paginatedRowIds.every((id) => selectionModel.includes(id));\n const isSomeSelected =\n paginatedRowIds.length > 0 && paginatedRowIds.some((id) => selectionModel.includes(id)) && !isAllSelected;\n\n const handleSelectAllChange = (e: ChangeEvent<HTMLInputElement>) => {\n if (e.target.checked) {\n const toAdd = paginatedRowIds.filter((id) => !selectionModel.includes(id));\n updateSelection([...selectionModel, ...toAdd]);\n } else {\n const remaining = selectionModel.filter((id) => !paginatedRowIds.includes(id));\n updateSelection(remaining);\n }\n };\n\n const handleRowSelectChange = (rowId: GridRowId) => {\n const isSelected = selectionModel.includes(rowId);\n if (isSelected) {\n updateSelection(selectionModel.filter((id) => id !== rowId));\n } else {\n updateSelection([...selectionModel, rowId]);\n }\n };\n\n const handlePageChange = (newPage: number) => {\n if (!isPageControlled) {\n setPageState(newPage - 1);\n }\n if (onPageChange) {\n onPageChange(newPage - 1);\n }\n };\n\n const handlePageSizeChange = (e: ChangeEvent<HTMLSelectElement>) => {\n const newSize = parseInt(e.target.value, 10);\n if (!isPageSizeControlled) {\n setPageSizeState(newSize);\n }\n if (onPageSizeChange) {\n onPageSizeChange(newSize);\n }\n };\n\n // Calculate ranges for paging footer (e.g. 1-10 of 100)\n const fromIndex = totalRowsCount === 0 ? 0 : page * pageSize + 1;\n const toIndex = Math.min(totalRowsCount, (page + 1) * pageSize);\n\n // Total Page count for Pagination component\n const totalPages = Math.ceil(totalRowsCount / pageSize);\n\n // Custom inline column widths\n const getColStyle = (col: GridColDef): CSSProperties => {\n const style: CSSProperties = {};\n if (col.width) {\n style.width = `${col.width}px`;\n style.minWidth = `${col.width}px`;\n } else if (col.minWidth) {\n style.minWidth = `${col.minWidth}px`;\n }\n if (col.flex) {\n style.flex = col.flex;\n }\n return style;\n };\n\n return (\n <>\n <style dangerouslySetInnerHTML={{ __html: STYLES }} />\n <div\n ref={ref}\n className={cn(\n 'ui-datagrid',\n `ui-datagrid--${density}`,\n classes.root,\n className\n )}\n style={{\n height,\n ...handleSx(sx),\n ...props.style,\n }}\n {...props}\n >\n {/* Main Scrollable Grid Content */}\n <div className={cn('ui-datagrid-main')}>\n {/* Loading Glass Overlay */}\n {loading && (\n <div className=\"ui-datagrid-loading-overlay\">\n <div className=\"ui-datagrid-spinner\" />\n </div>\n )}\n\n <table className={cn('ui-datagrid-table', classes.table)}>\n <thead className={cn('ui-datagrid-thead', classes.header)}>\n <tr className=\"ui-datagrid-tr\">\n {/* Select All Checkbox Cell */}\n {checkboxSelection && (\n <th className=\"ui-datagrid-th ui-datagrid-cell--checkbox\">\n <Checkbox\n size=\"small\"\n checked={isAllSelected}\n indeterminate={isSomeSelected}\n onChange={handleSelectAllChange}\n />\n </th>\n )}\n\n {/* Header Columns */}\n {columns.map((col) => {\n const isColSortable = col.sortable !== false;\n const isSorted = sortField === col.field;\n const alignClass = col.headerAlign ? `ui-datagrid-cell--align-${col.headerAlign}` : (col.align ? `ui-datagrid-cell--align-${col.align}` : '');\n\n return (\n <th\n key={col.field}\n onClick={() => handleSortClick(col)}\n className={cn(\n 'ui-datagrid-th',\n isColSortable && 'ui-datagrid-th--sortable',\n alignClass\n )}\n style={getColStyle(col)}\n >\n <div className=\"ui-datagrid-th-content\">\n <span>{col.headerName ?? col.field}</span>\n {isColSortable && (\n <span\n className={cn(\n 'ui-datagrid-th-sort-icon',\n isSorted && 'ui-datagrid-th-sort-icon--active'\n )}\n style={{\n transform: isSorted && sortOrder === 'desc' ? 'rotate(180deg)' : undefined,\n }}\n >\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <line x1=\"12\" y1=\"19\" x2=\"12\" y2=\"5\"></line>\n <polyline points=\"5 12 12 5 19 12\"></polyline>\n </svg>\n </span>\n )}\n </div>\n </th>\n );\n })}\n </tr>\n </thead>\n <tbody>\n {paginatedRows.length === 0 ? (\n <tr className=\"ui-datagrid-tr\">\n <td\n colSpan={columns.length + (checkboxSelection ? 1 : 0)}\n className=\"ui-datagrid-td\"\n style={{ textAlign: 'center', padding: '32px 0', color: '#64748b' }}\n >\n No rows to display\n </td>\n </tr>\n ) : (\n paginatedRows.map((row, index) => {\n const rowId = getRowIdValue(row);\n const isSelected = selectionModel.includes(rowId);\n const rowCustomClass = getRowClassName ? getRowClassName({ row }) : '';\n\n return (\n <tr\n key={rowId || index}\n className={cn(\n 'ui-datagrid-tr',\n isSelected && 'ui-datagrid-tr--selected',\n rowCustomClass,\n classes.row\n )}\n >\n {/* Row Checkbox Cell */}\n {checkboxSelection && (\n <td className=\"ui-datagrid-td ui-datagrid-cell--checkbox\">\n <Checkbox\n size=\"small\"\n checked={isSelected}\n onChange={() => handleRowSelectChange(rowId)}\n />\n </td>\n )}\n\n {/* Cell Columns */}\n {columns.map((col) => {\n const alignClass = col.align ? `ui-datagrid-cell--align-${col.align}` : '';\n const value = col.valueGetter\n ? col.valueGetter({ row, value: row[col.field] })\n : row[col.field];\n\n return (\n <td\n key={col.field}\n className={cn('ui-datagrid-td', alignClass, classes.cell)}\n style={getColStyle(col)}\n >\n {col.renderCell\n ? col.renderCell({ value, row, field: col.field, id: rowId })\n : (value !== undefined && value !== null ? String(value) : '')}\n </td>\n );\n })}\n </tr>\n );\n })\n )}\n </tbody>\n </table>\n </div>\n\n {/* Footer controls (Rows Per Page & Pagination switcher) */}\n {pagination && (\n <div className={cn('ui-datagrid-footer', classes.footer)}>\n <div className=\"ui-datagrid-footer-left\">\n <div className=\"ui-datagrid-rows-per-page\">\n <span>Rows per page:</span>\n <select\n value={pageSize}\n onChange={handlePageSizeChange}\n className=\"ui-datagrid-select\"\n >\n {pageSizeOptions.map((opt) => (\n <option key={opt} value={opt}>\n {opt}\n </option>\n ))}\n </select>\n </div>\n </div>\n\n <div className=\"ui-datagrid-footer-right\">\n <span className=\"ui-datagrid-info\">\n {fromIndex}-{toIndex} of {totalRowsCount}\n </span>\n\n {totalPages > 1 && (\n <div className=\"ui-datagrid-footer-pagination\">\n <Pagination\n count={totalPages}\n page={page + 1}\n onChange={(_, p) => handlePageChange(p)}\n size=\"small\"\n shape=\"rounded\"\n />\n </div>\n )}\n </div>\n </div>\n )}\n </div>\n </>\n );\n }\n);\n\nDataGrid.displayName = 'DataGrid';\n\nexport default DataGrid;\n"]}
1
+ {"version":3,"sources":["../src/components/DataGrid/DataGrid.tsx"],"names":["STYLES","DataGrid","forwardRef","columns","rows","getRowId","pageProp","defaultPage","pageSizeProp","pageSizeOptions","pagination","paginationMode","rowCountProp","onPageChange","onPageSizeChange","checkboxSelection","rowSelectionModel","onRowSelectionModelChange","loading","density","getRowClassName","height","sx","classes","className","props","ref","pageState","setPageState","useState","isPageControlled","page","pageSizeState","setPageSizeState","isPageSizeControlled","pageSize","sortField","setSortField","sortOrder","setSortOrder","selectionModelInternal","setSelectionModelInternal","selectionModel","useEffect","updateSelection","newSelection","getRowIdValue","row","handleSortClick","col","nextOrder","sortedRows","a","b","c","valA","valB","totalRowsCount","paginatedRows","paginatedRowIds","isAllSelected","id","isSomeSelected","handleSelectAllChange","toAdd","remaining","handleRowSelectChange","rowId","isSelected","handlePageChange","newPage","handlePageSizeChange","newSize","fromIndex","toIndex","totalPages","getColStyle","style","jsxs","Fragment","jsx","cn","handleSx","Checkbox","isColSortable","isSorted","alignClass","index","rowCustomClass","value","opt","Pagination","_","p","DataGrid_default"],"mappings":"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","file":"chunk-MINO7ZUA.js","sourcesContent":["'use client';\n\nimport { forwardRef, useState, useEffect, ChangeEvent, CSSProperties } from 'react';\nimport { cn } from '../../utils/cn';\nimport { handleSx } from '../../utils/handleSx';\nimport { Checkbox } from '../Checkbox/Checkbox';\nimport { Pagination } from '../Pagination/Pagination';\nimport { DataGridProps, GridRowId, GridColDef, GridRowModel } from './DataGrid.types';\n\nconst STYLES = `\n /* DataGrid Root */\n .ui-datagrid {\n display: flex;\n flex-direction: column;\n position: relative;\n border: 1px solid #e2e8f0;\n border-radius: 8px;\n background-color: #ffffff;\n font-family: inherit;\n box-sizing: border-box;\n overflow: hidden;\n }\n\n /* Main scroll area */\n .ui-datagrid-main {\n flex: 1 1 auto;\n position: relative;\n overflow: auto;\n width: 100%;\n }\n\n /* Table structure */\n .ui-datagrid-table {\n width: 100%;\n border-collapse: collapse;\n border-spacing: 0;\n text-align: left;\n table-layout: auto;\n }\n\n /* Table Headers */\n .ui-datagrid-thead {\n background-color: #f8fafc;\n position: sticky;\n top: 0;\n z-index: 3;\n border-bottom: 1px solid #e2e8f0;\n }\n\n .ui-datagrid-th {\n padding: 12px 16px;\n font-size: 0.875rem;\n font-weight: 600;\n color: #475569;\n user-select: none;\n box-sizing: border-box;\n white-space: nowrap;\n border-bottom: 1px solid #e2e8f0;\n background-color: #f8fafc;\n transition: background-color 150ms;\n }\n\n .ui-datagrid-th--sortable {\n cursor: pointer;\n }\n\n .ui-datagrid-th--sortable:hover {\n background-color: #f1f5f9;\n }\n\n .ui-datagrid-th-content {\n display: flex;\n align-items: center;\n gap: 8px;\n }\n\n .ui-datagrid-th-sort-icon {\n display: inline-flex;\n align-items: center;\n color: #94a3b8;\n transition: color 150ms, transform 150ms;\n }\n\n .ui-datagrid-th-sort-icon--active {\n color: #3b82f6;\n }\n\n /* Row & Cells styling */\n .ui-datagrid-tr {\n border-bottom: 1px solid #e2e8f0;\n transition: background-color 150ms;\n }\n\n .ui-datagrid-tr:last-child {\n border-bottom: none;\n }\n\n .ui-datagrid-tr:hover {\n background-color: #f8fafc;\n }\n\n .ui-datagrid-tr--selected {\n background-color: rgba(59, 130, 246, 0.04);\n }\n\n .ui-datagrid-tr--selected:hover {\n background-color: rgba(59, 130, 246, 0.08);\n }\n\n .ui-datagrid-td {\n padding: 12px 16px;\n font-size: 0.875rem;\n color: #0f172a;\n box-sizing: border-box;\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n }\n\n /* Density support */\n .ui-datagrid--compact .ui-datagrid-th {\n padding: 8px 12px;\n font-size: 0.8125rem;\n }\n .ui-datagrid--compact .ui-datagrid-td {\n padding: 6px 12px;\n font-size: 0.8125rem;\n }\n\n .ui-datagrid--comfortable .ui-datagrid-th {\n padding: 16px 20px;\n font-size: 0.9375rem;\n }\n .ui-datagrid--comfortable .ui-datagrid-td {\n padding: 16px 20px;\n font-size: 0.9375rem;\n }\n\n /* Centered and aligned cell styles */\n .ui-datagrid-cell--align-center {\n text-align: center;\n }\n .ui-datagrid-cell--align-right {\n text-align: right;\n }\n\n .ui-datagrid-cell--checkbox {\n width: 48px;\n padding: 0;\n text-align: center;\n vertical-align: middle;\n }\n\n .ui-datagrid-cell--checkbox .ui-checkbox {\n vertical-align: middle;\n }\n\n /* Loading State glassmorphism overlay */\n .ui-datagrid-loading-overlay {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-color: rgba(255, 255, 255, 0.55);\n z-index: 10;\n display: flex;\n align-items: center;\n justify-content: center;\n backdrop-filter: blur(1px);\n }\n\n .ui-datagrid-spinner {\n width: 40px;\n height: 40px;\n border: 3px solid #e2e8f0;\n border-top-color: #3b82f6;\n border-radius: 50%;\n animation: ui-datagrid-spin 1s linear infinite;\n }\n\n @keyframes ui-datagrid-spin {\n to {\n transform: rotate(360deg);\n }\n }\n\n /* Footer & Pagination styles */\n .ui-datagrid-footer {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: space-between;\n padding: 12px 16px;\n border-top: 1px solid #e2e8f0;\n background-color: #ffffff;\n gap: 16px;\n font-size: 0.875rem;\n color: #475569;\n box-sizing: border-box;\n }\n\n .ui-datagrid-footer-left {\n display: flex;\n align-items: center;\n gap: 16px;\n }\n\n .ui-datagrid-rows-per-page {\n display: flex;\n align-items: center;\n gap: 8px;\n }\n\n .ui-datagrid-select {\n padding: 4px 8px;\n border: 1px solid #cbd5e1;\n border-radius: 4px;\n background-color: #ffffff;\n color: #475569;\n font-family: inherit;\n font-size: 0.875rem;\n cursor: pointer;\n outline: none;\n transition: border-color 150ms;\n }\n\n .ui-datagrid-select:focus {\n border-color: #3b82f6;\n }\n\n .ui-datagrid-footer-right {\n display: flex;\n align-items: center;\n gap: 16px;\n }\n\n .ui-datagrid-info {\n font-weight: 500;\n }\n`;\n\nexport const DataGrid = forwardRef<HTMLDivElement, DataGridProps>(\n (\n {\n columns,\n rows = [],\n getRowId,\n page: pageProp,\n defaultPage = 0,\n pageSize: pageSizeProp = 10,\n pageSizeOptions = [5, 10, 25, 50],\n pagination = true,\n paginationMode = 'client',\n rowCount: rowCountProp,\n onPageChange,\n onPageSizeChange,\n checkboxSelection = false,\n rowSelectionModel,\n onRowSelectionModelChange,\n loading = false,\n density = 'standard',\n getRowClassName,\n height,\n sx,\n classes = {},\n className,\n ...props\n },\n ref\n ) => {\n // Page state (0-indexed internally to match MUI)\n const [pageState, setPageState] = useState(defaultPage);\n const isPageControlled = pageProp !== undefined && onPageChange !== undefined;\n const page = isPageControlled ? pageProp : pageState;\n\n // PageSize state\n const [pageSizeState, setPageSizeState] = useState(pageSizeProp !== undefined ? pageSizeProp : 10);\n const isPageSizeControlled = pageSizeProp !== undefined && onPageSizeChange !== undefined;\n const pageSize = isPageSizeControlled ? pageSizeProp : pageSizeState;\n\n // Client-side Sorting state\n const [sortField, setSortField] = useState<string | null>(null);\n const [sortOrder, setSortOrder] = useState<'asc' | 'desc' | null>(null);\n\n // Row selection state\n const [selectionModelInternal, setSelectionModelInternal] = useState<GridRowId[]>([]);\n const selectionModel = rowSelectionModel !== undefined ? rowSelectionModel : selectionModelInternal;\n\n // Sync props to state if parent updates them\n useEffect(() => {\n if (pageProp !== undefined) {\n setPageState(pageProp);\n }\n }, [pageProp]);\n\n useEffect(() => {\n if (pageSizeProp !== undefined) {\n setPageSizeState(pageSizeProp);\n }\n }, [pageSizeProp]);\n\n // Reset page if page size changes or rows filter\n useEffect(() => {\n setPageState(0);\n }, [pageSize]);\n\n // Handle Selection Change helper\n const updateSelection = (newSelection: GridRowId[]) => {\n if (rowSelectionModel === undefined) {\n setSelectionModelInternal(newSelection);\n }\n if (onRowSelectionModelChange) {\n onRowSelectionModelChange(newSelection);\n }\n };\n\n // Row ID helper\n const getRowIdValue = (row: GridRowModel): GridRowId => {\n if (getRowId) return getRowId(row);\n return row.id !== undefined ? row.id : '';\n };\n\n // Client-side sorting logic\n const handleSortClick = (col: GridColDef) => {\n if (col.sortable === false) return;\n\n let nextOrder: 'asc' | 'desc' | null = 'asc';\n if (sortField === col.field) {\n if (sortOrder === 'asc') nextOrder = 'desc';\n else if (sortOrder === 'desc') nextOrder = null;\n else nextOrder = 'asc';\n }\n\n setSortField(nextOrder ? col.field : null);\n setSortOrder(nextOrder);\n };\n\n // Compute sorted rows (only if client-side pagination/sorting)\n const getSortedRows = () => {\n if (paginationMode === 'server' || !sortField || !sortOrder) {\n return rows;\n }\n\n return [...rows].sort((a, b) => {\n const col = columns.find((c) => c.field === sortField);\n let valA = col?.valueGetter ? col.valueGetter({ row: a, value: a[sortField] }) : a[sortField];\n let valB = col?.valueGetter ? col.valueGetter({ row: b, value: b[sortField] }) : b[sortField];\n\n if (valA == null) valA = '';\n if (valB == null) valB = '';\n\n if (typeof valA === 'string' && typeof valB === 'string') {\n return sortOrder === 'asc' ? valA.localeCompare(valB) : valB.localeCompare(valA);\n }\n\n return sortOrder === 'asc'\n ? valA > valB ? 1 : valA < valB ? -1 : 0\n : valA < valB ? 1 : valA > valB ? -1 : 0;\n });\n };\n\n const sortedRows = getSortedRows();\n\n // Compute total rows count\n const totalRowsCount = paginationMode === 'server' ? (rowCountProp ?? rows.length) : rows.length;\n\n // Slice rows for client pagination\n const paginatedRows =\n pagination && paginationMode === 'client'\n ? sortedRows.slice(page * pageSize, (page + 1) * pageSize)\n : sortedRows;\n\n // Checkbox helper states\n const paginatedRowIds = paginatedRows.map(getRowIdValue);\n const isAllSelected = paginatedRowIds.length > 0 && paginatedRowIds.every((id) => selectionModel.includes(id));\n const isSomeSelected =\n paginatedRowIds.length > 0 && paginatedRowIds.some((id) => selectionModel.includes(id)) && !isAllSelected;\n\n const handleSelectAllChange = (e: ChangeEvent<HTMLInputElement>) => {\n if (e.target.checked) {\n const toAdd = paginatedRowIds.filter((id) => !selectionModel.includes(id));\n updateSelection([...selectionModel, ...toAdd]);\n } else {\n const remaining = selectionModel.filter((id) => !paginatedRowIds.includes(id));\n updateSelection(remaining);\n }\n };\n\n const handleRowSelectChange = (rowId: GridRowId) => {\n const isSelected = selectionModel.includes(rowId);\n if (isSelected) {\n updateSelection(selectionModel.filter((id) => id !== rowId));\n } else {\n updateSelection([...selectionModel, rowId]);\n }\n };\n\n const handlePageChange = (newPage: number) => {\n if (!isPageControlled) {\n setPageState(newPage - 1);\n }\n if (onPageChange) {\n onPageChange(newPage - 1);\n }\n };\n\n const handlePageSizeChange = (e: ChangeEvent<HTMLSelectElement>) => {\n const newSize = parseInt(e.target.value, 10);\n if (!isPageSizeControlled) {\n setPageSizeState(newSize);\n }\n if (onPageSizeChange) {\n onPageSizeChange(newSize);\n }\n };\n\n // Calculate ranges for paging footer (e.g. 1-10 of 100)\n const fromIndex = totalRowsCount === 0 ? 0 : page * pageSize + 1;\n const toIndex = Math.min(totalRowsCount, (page + 1) * pageSize);\n\n // Total Page count for Pagination component\n const totalPages = Math.ceil(totalRowsCount / pageSize);\n\n // Custom inline column widths\n const getColStyle = (col: GridColDef): CSSProperties => {\n const style: CSSProperties = {};\n if (col.width) {\n style.width = `${col.width}px`;\n style.minWidth = `${col.width}px`;\n } else if (col.minWidth) {\n style.minWidth = `${col.minWidth}px`;\n }\n if (col.flex) {\n style.flex = col.flex;\n }\n return style;\n };\n\n return (\n <>\n <style dangerouslySetInnerHTML={{ __html: STYLES }} />\n <div\n ref={ref}\n className={cn(\n 'ui-datagrid',\n `ui-datagrid--${density}`,\n classes.root,\n className\n )}\n style={{\n height,\n ...handleSx(sx),\n ...props.style,\n }}\n {...props}\n >\n {/* Main Scrollable Grid Content */}\n <div className={cn('ui-datagrid-main')}>\n {/* Loading Glass Overlay */}\n {loading && (\n <div className=\"ui-datagrid-loading-overlay\">\n <div className=\"ui-datagrid-spinner\" />\n </div>\n )}\n\n <table className={cn('ui-datagrid-table', classes.table)}>\n <thead className={cn('ui-datagrid-thead', classes.header)}>\n <tr className=\"ui-datagrid-tr\">\n {/* Select All Checkbox Cell */}\n {checkboxSelection && (\n <th className=\"ui-datagrid-th ui-datagrid-cell--checkbox\">\n <Checkbox\n size=\"small\"\n checked={isAllSelected}\n indeterminate={isSomeSelected}\n onChange={handleSelectAllChange}\n />\n </th>\n )}\n\n {/* Header Columns */}\n {columns.map((col) => {\n const isColSortable = col.sortable !== false;\n const isSorted = sortField === col.field;\n const alignClass = col.headerAlign ? `ui-datagrid-cell--align-${col.headerAlign}` : (col.align ? `ui-datagrid-cell--align-${col.align}` : '');\n\n return (\n <th\n key={col.field}\n onClick={() => handleSortClick(col)}\n className={cn(\n 'ui-datagrid-th',\n isColSortable && 'ui-datagrid-th--sortable',\n alignClass\n )}\n style={getColStyle(col)}\n >\n <div className=\"ui-datagrid-th-content\">\n <span>{col.headerName ?? col.field}</span>\n {isColSortable && (\n <span\n className={cn(\n 'ui-datagrid-th-sort-icon',\n isSorted && 'ui-datagrid-th-sort-icon--active'\n )}\n style={{\n transform: isSorted && sortOrder === 'desc' ? 'rotate(180deg)' : undefined,\n }}\n >\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <line x1=\"12\" y1=\"19\" x2=\"12\" y2=\"5\"></line>\n <polyline points=\"5 12 12 5 19 12\"></polyline>\n </svg>\n </span>\n )}\n </div>\n </th>\n );\n })}\n </tr>\n </thead>\n <tbody>\n {paginatedRows.length === 0 ? (\n <tr className=\"ui-datagrid-tr\">\n <td\n colSpan={columns.length + (checkboxSelection ? 1 : 0)}\n className=\"ui-datagrid-td\"\n style={{ textAlign: 'center', padding: '32px 0', color: '#64748b' }}\n >\n No rows to display\n </td>\n </tr>\n ) : (\n paginatedRows.map((row, index) => {\n const rowId = getRowIdValue(row);\n const isSelected = selectionModel.includes(rowId);\n const rowCustomClass = getRowClassName ? getRowClassName({ row }) : '';\n\n return (\n <tr\n key={rowId || index}\n className={cn(\n 'ui-datagrid-tr',\n isSelected && 'ui-datagrid-tr--selected',\n rowCustomClass,\n classes.row\n )}\n >\n {/* Row Checkbox Cell */}\n {checkboxSelection && (\n <td className=\"ui-datagrid-td ui-datagrid-cell--checkbox\">\n <Checkbox\n size=\"small\"\n checked={isSelected}\n onChange={() => handleRowSelectChange(rowId)}\n />\n </td>\n )}\n\n {/* Cell Columns */}\n {columns.map((col) => {\n const alignClass = col.align ? `ui-datagrid-cell--align-${col.align}` : '';\n const value = col.valueGetter\n ? col.valueGetter({ row, value: row[col.field] })\n : row[col.field];\n\n return (\n <td\n key={col.field}\n className={cn('ui-datagrid-td', alignClass, classes.cell)}\n style={getColStyle(col)}\n >\n {col.renderCell\n ? col.renderCell({ value, row, field: col.field, id: rowId })\n : (value !== undefined && value !== null ? String(value) : '')}\n </td>\n );\n })}\n </tr>\n );\n })\n )}\n </tbody>\n </table>\n </div>\n\n {/* Footer controls (Rows Per Page & Pagination switcher) */}\n {pagination && (\n <div className={cn('ui-datagrid-footer', classes.footer)}>\n <div className=\"ui-datagrid-footer-left\">\n <div className=\"ui-datagrid-rows-per-page\">\n <span>Rows per page:</span>\n <select\n value={pageSize}\n onChange={handlePageSizeChange}\n className=\"ui-datagrid-select\"\n >\n {pageSizeOptions.map((opt) => (\n <option key={opt} value={opt}>\n {opt}\n </option>\n ))}\n </select>\n </div>\n </div>\n\n <div className=\"ui-datagrid-footer-right\">\n <span className=\"ui-datagrid-info\">\n {fromIndex}-{toIndex} of {totalRowsCount}\n </span>\n\n {totalPages > 1 && (\n <div className=\"ui-datagrid-footer-pagination\">\n <Pagination\n count={totalPages}\n page={page + 1}\n onChange={(_, p) => handlePageChange(p)}\n size=\"small\"\n shape=\"rounded\"\n />\n </div>\n )}\n </div>\n </div>\n )}\n </div>\n </>\n );\n }\n);\n\nDataGrid.displayName = 'DataGrid';\n\nexport default DataGrid;\n"]}