dhanasekar-ui 1.1.3 → 1.2.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.
Files changed (113) hide show
  1. package/dist/chunk-2BM7TRDS.js +105 -0
  2. package/dist/chunk-2BM7TRDS.js.map +1 -0
  3. package/dist/chunk-2TXYJ7YE.js +201 -0
  4. package/dist/chunk-2TXYJ7YE.js.map +1 -0
  5. package/dist/chunk-3RAQQWLW.js +351 -0
  6. package/dist/chunk-3RAQQWLW.js.map +1 -0
  7. package/dist/chunk-6SVKDKK7.mjs +351 -0
  8. package/dist/chunk-6SVKDKK7.mjs.map +1 -0
  9. package/dist/chunk-BM36E6BY.js +85 -0
  10. package/dist/chunk-BM36E6BY.js.map +1 -0
  11. package/dist/chunk-BQFCZZDK.js +52 -0
  12. package/dist/chunk-BQFCZZDK.js.map +1 -0
  13. package/dist/chunk-CJ2DPBHE.js +93 -0
  14. package/dist/chunk-CJ2DPBHE.js.map +1 -0
  15. package/dist/chunk-EHI64N43.mjs +52 -0
  16. package/dist/chunk-EHI64N43.mjs.map +1 -0
  17. package/dist/chunk-GNMGJBBO.mjs +201 -0
  18. package/dist/chunk-GNMGJBBO.mjs.map +1 -0
  19. package/dist/chunk-H2LTPKLL.js +119 -0
  20. package/dist/chunk-H2LTPKLL.js.map +1 -0
  21. package/dist/chunk-ICWNP5NA.mjs +105 -0
  22. package/dist/chunk-ICWNP5NA.mjs.map +1 -0
  23. package/dist/chunk-RB4QTTZ3.mjs +116 -0
  24. package/dist/chunk-RB4QTTZ3.mjs.map +1 -0
  25. package/dist/chunk-RW2NNPXC.mjs +119 -0
  26. package/dist/chunk-RW2NNPXC.mjs.map +1 -0
  27. package/dist/chunk-SHZ3M7US.mjs +104 -0
  28. package/dist/chunk-SHZ3M7US.mjs.map +1 -0
  29. package/dist/chunk-UBWTBUO2.js +116 -0
  30. package/dist/chunk-UBWTBUO2.js.map +1 -0
  31. package/dist/chunk-YM6W6FK6.mjs +85 -0
  32. package/dist/chunk-YM6W6FK6.mjs.map +1 -0
  33. package/dist/chunk-YRYAP2N7.js +104 -0
  34. package/dist/chunk-YRYAP2N7.js.map +1 -0
  35. package/dist/{chunk-LUU3CQHI.js → chunk-ZEMR63S4.js} +2 -2
  36. package/dist/{chunk-LUU3CQHI.js.map → chunk-ZEMR63S4.js.map} +1 -1
  37. package/dist/chunk-ZUAS66IF.mjs +93 -0
  38. package/dist/chunk-ZUAS66IF.mjs.map +1 -0
  39. package/dist/{chunk-AKPICVLO.mjs → chunk-ZY5AHZYZ.mjs} +2 -2
  40. package/dist/{chunk-AKPICVLO.mjs.map → chunk-ZY5AHZYZ.mjs.map} +1 -1
  41. package/dist/components/Avatar/index.d.mts +65 -2
  42. package/dist/components/Avatar/index.d.ts +65 -2
  43. package/dist/components/Avatar/index.js +1 -1
  44. package/dist/components/Avatar/index.mjs +1 -1
  45. package/dist/components/Badge/index.d.mts +88 -2
  46. package/dist/components/Badge/index.d.ts +88 -2
  47. package/dist/components/Badge/index.js +1 -1
  48. package/dist/components/Badge/index.mjs +1 -1
  49. package/dist/components/Card/index.d.mts +103 -2
  50. package/dist/components/Card/index.d.ts +103 -2
  51. package/dist/components/Card/index.js +1 -1
  52. package/dist/components/Card/index.mjs +1 -1
  53. package/dist/components/Checkbox/index.d.mts +109 -6
  54. package/dist/components/Checkbox/index.d.ts +109 -6
  55. package/dist/components/Checkbox/index.js +1 -1
  56. package/dist/components/Checkbox/index.mjs +1 -1
  57. package/dist/components/ConfirmationDialog/index.d.mts +30 -0
  58. package/dist/components/ConfirmationDialog/index.d.ts +30 -0
  59. package/dist/components/ConfirmationDialog/index.js +2 -0
  60. package/dist/components/ConfirmationDialog/index.js.map +1 -0
  61. package/dist/components/ConfirmationDialog/index.mjs +2 -0
  62. package/dist/components/ConfirmationDialog/index.mjs.map +1 -0
  63. package/dist/components/DateFilter/index.d.mts +26 -0
  64. package/dist/components/DateFilter/index.d.ts +26 -0
  65. package/dist/components/DateFilter/index.js +2 -0
  66. package/dist/components/DateFilter/index.js.map +1 -0
  67. package/dist/components/DateFilter/index.mjs +2 -0
  68. package/dist/components/DateFilter/index.mjs.map +1 -0
  69. package/dist/components/FileUploadField/index.js +1 -1
  70. package/dist/components/FileUploadField/index.mjs +1 -1
  71. package/dist/components/FormLayout/index.d.mts +50 -0
  72. package/dist/components/FormLayout/index.d.ts +50 -0
  73. package/dist/components/FormLayout/index.js +2 -0
  74. package/dist/components/FormLayout/index.js.map +1 -0
  75. package/dist/components/FormLayout/index.mjs +2 -0
  76. package/dist/components/FormLayout/index.mjs.map +1 -0
  77. package/dist/components/Modal/index.d.mts +23 -7
  78. package/dist/components/Modal/index.d.ts +23 -7
  79. package/dist/components/Modal/index.js +1 -1
  80. package/dist/components/Modal/index.mjs +1 -1
  81. package/dist/components/Tooltip/index.d.mts +30 -7
  82. package/dist/components/Tooltip/index.d.ts +30 -7
  83. package/dist/components/Tooltip/index.js +1 -1
  84. package/dist/components/Tooltip/index.mjs +1 -1
  85. package/dist/index.d.mts +10 -6
  86. package/dist/index.d.ts +10 -6
  87. package/dist/index.js +1 -1
  88. package/dist/index.mjs +1 -1
  89. package/package.json +13 -1
  90. package/dist/chunk-6CTAGKRH.js +0 -2
  91. package/dist/chunk-6CTAGKRH.js.map +0 -1
  92. package/dist/chunk-6S5MGYMQ.mjs +0 -2
  93. package/dist/chunk-6S5MGYMQ.mjs.map +0 -1
  94. package/dist/chunk-B3QF3KQL.js +0 -2
  95. package/dist/chunk-B3QF3KQL.js.map +0 -1
  96. package/dist/chunk-CBHX2QZA.mjs +0 -2
  97. package/dist/chunk-CBHX2QZA.mjs.map +0 -1
  98. package/dist/chunk-DVU5JMBP.js +0 -2
  99. package/dist/chunk-DVU5JMBP.js.map +0 -1
  100. package/dist/chunk-HNKQZLUA.mjs +0 -2
  101. package/dist/chunk-HNKQZLUA.mjs.map +0 -1
  102. package/dist/chunk-MYC7PW6C.js +0 -2
  103. package/dist/chunk-MYC7PW6C.js.map +0 -1
  104. package/dist/chunk-OTDTXBFF.mjs +0 -2
  105. package/dist/chunk-OTDTXBFF.mjs.map +0 -1
  106. package/dist/chunk-RRZTNQ5T.mjs +0 -2
  107. package/dist/chunk-RRZTNQ5T.mjs.map +0 -1
  108. package/dist/chunk-VIUZPAJZ.js +0 -2
  109. package/dist/chunk-VIUZPAJZ.js.map +0 -1
  110. package/dist/chunk-WGPJEQGU.mjs +0 -2
  111. package/dist/chunk-WGPJEQGU.mjs.map +0 -1
  112. package/dist/chunk-X7EUJD7E.js +0 -2
  113. package/dist/chunk-X7EUJD7E.js.map +0 -1
@@ -0,0 +1,351 @@
1
+ 'use strict';var react=require('react'),jsxRuntime=require('react/jsx-runtime');var D=`
2
+ :root {
3
+ --fl-primary: #3b82f6;
4
+ --fl-primary-dark: #2563eb;
5
+ --fl-primary-light: #eff6ff;
6
+ --fl-text-main: #1e293b;
7
+ --fl-text-secondary: #64748b;
8
+ --fl-bg-main: #ffffff;
9
+ --fl-bg-secondary: #f8fafc;
10
+ --fl-border: #e2e8f0;
11
+ --fl-error: #ef4444;
12
+ --fl-success: #10b981;
13
+ --fl-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
14
+ --fl-radius: 12px;
15
+ }
16
+
17
+ .fl-container {
18
+ display: flex;
19
+ flex-direction: column;
20
+ min-height: 80vh;
21
+ font-family: 'Inter', system-ui, -apple-system, sans-serif;
22
+ color: var(--fl-text-main);
23
+ width: 100%;
24
+ margin: 0 auto;
25
+ background: var(--fl-bg-main);
26
+ position: relative;
27
+ }
28
+
29
+ /* Header */
30
+ .fl-header {
31
+ display: flex;
32
+ justify-content: space-between;
33
+ align-items: center;
34
+ padding: 24px;
35
+ border-bottom: 1px solid var(--fl-border);
36
+ background: rgba(255, 255, 255, 0.8);
37
+ backdrop-filter: blur(8px);
38
+ position: sticky;
39
+ top: 0;
40
+ z-index: 10;
41
+ }
42
+
43
+ .fl-header-left {
44
+ display: flex;
45
+ align-items: center;
46
+ gap: 16px;
47
+ }
48
+
49
+ .fl-back-btn {
50
+ width: 40px;
51
+ height: 40px;
52
+ border-radius: 10px;
53
+ border: none;
54
+ background: var(--fl-primary-light);
55
+ color: var(--fl-primary);
56
+ cursor: pointer;
57
+ display: flex;
58
+ align-items: center;
59
+ justify-content: center;
60
+ transition: all 0.2s ease;
61
+ }
62
+
63
+ .fl-back-btn:hover {
64
+ background: var(--fl-primary);
65
+ color: white;
66
+ transform: translateX(-2px);
67
+ }
68
+
69
+ .fl-title-group h1 {
70
+ margin: 0;
71
+ font-size: 20px;
72
+ font-weight: 700;
73
+ color: var(--fl-text-main);
74
+ }
75
+
76
+ .fl-title-group p {
77
+ margin: 4px 0 0 0;
78
+ font-size: 14px;
79
+ color: var(--fl-text-secondary);
80
+ }
81
+
82
+ .fl-header-right {
83
+ display: flex;
84
+ align-items: center;
85
+ gap: 12px;
86
+ }
87
+
88
+ /* Layout Toggle */
89
+ .fl-layout-toggle {
90
+ width: 40px;
91
+ height: 40px;
92
+ border-radius: 10px;
93
+ border: 1px solid var(--fl-border);
94
+ background: white;
95
+ color: var(--fl-primary);
96
+ cursor: pointer;
97
+ display: flex;
98
+ align-items: center;
99
+ justify-content: center;
100
+ transition: all 0.2s ease;
101
+ }
102
+
103
+ .fl-layout-toggle:hover {
104
+ border-color: var(--fl-primary);
105
+ background: var(--fl-primary-light);
106
+ }
107
+
108
+ /* Stepper */
109
+ .fl-stepper-container {
110
+ padding: 32px 24px;
111
+ }
112
+
113
+ .fl-stepper {
114
+ display: flex;
115
+ justify-content: space-between;
116
+ position: relative;
117
+ margin-bottom: 32px;
118
+ }
119
+
120
+ .fl-step {
121
+ display: flex;
122
+ flex-direction: column;
123
+ align-items: center;
124
+ z-index: 3;
125
+ flex: 1;
126
+ cursor: pointer;
127
+ position: relative;
128
+ }
129
+
130
+ .fl-step:not(:last-child)::after {
131
+ content: '';
132
+ position: absolute;
133
+ top: 20px;
134
+ left: calc(50% + 24px);
135
+ right: calc(-50% + 24px);
136
+ height: 3px;
137
+ background: var(--fl-border);
138
+ z-index: -1;
139
+ transition: background 0.3s ease;
140
+ }
141
+
142
+ .fl-step.completed:not(:last-child)::after {
143
+ background: var(--fl-primary);
144
+ }
145
+
146
+
147
+ .fl-step-icon {
148
+ width: 42px;
149
+ height: 42px;
150
+ border-radius: 50%;
151
+ background: white;
152
+ border: 3px solid var(--fl-border);
153
+ display: flex;
154
+ align-items: center;
155
+ justify-content: center;
156
+ font-weight: 600;
157
+ font-size: 14px;
158
+ color: var(--fl-text-secondary);
159
+ transition: all 0.3s ease;
160
+ margin-bottom: 8px;
161
+ box-shadow: 0 0 0 4px white;
162
+ }
163
+
164
+ .fl-step.active .fl-step-icon {
165
+ border-color: var(--fl-primary);
166
+ color: var(--fl-primary);
167
+ transform: scale(1.1);
168
+ box-shadow: 0 0 0 4px white, 0 4px 12px rgba(59, 130, 246, 0.3);
169
+ }
170
+
171
+ .fl-step.completed .fl-step-icon {
172
+ background: var(--fl-primary);
173
+ border-color: var(--fl-primary);
174
+ color: white;
175
+ }
176
+
177
+ .fl-step.error .fl-step-icon {
178
+ border-color: var(--fl-error);
179
+ color: var(--fl-error);
180
+ }
181
+
182
+ .fl-step-label {
183
+ font-size: 13px;
184
+ font-weight: 500;
185
+ color: var(--fl-text-secondary);
186
+ transition: all 0.2s ease;
187
+ }
188
+
189
+ .fl-step.active .fl-step-label {
190
+ color: var(--fl-primary);
191
+ font-weight: 600;
192
+ }
193
+
194
+ /* Accordion */
195
+ .fl-accordion-container {
196
+ padding: 24px;
197
+ display: flex;
198
+ flex-direction: column;
199
+ gap: 12px;
200
+ }
201
+
202
+ .fl-accordion-item {
203
+ border: 1px solid var(--fl-border);
204
+ border-radius: var(--fl-radius);
205
+ overflow: hidden;
206
+ transition: all 0.3s ease;
207
+ }
208
+
209
+ .fl-accordion-item.active {
210
+ border-color: var(--fl-primary);
211
+ box-shadow: var(--fl-shadow);
212
+ }
213
+
214
+ .fl-accordion-item.error {
215
+ border-color: var(--fl-error);
216
+ }
217
+
218
+ .fl-accordion-header {
219
+ padding: 16px 20px;
220
+ background: var(--fl-bg-secondary);
221
+ display: flex;
222
+ justify-content: space-between;
223
+ align-items: center;
224
+ cursor: pointer;
225
+ transition: background 0.2s ease;
226
+ }
227
+
228
+ .fl-accordion-header:hover {
229
+ background: #f1f5f9;
230
+ }
231
+
232
+ .fl-accordion-title {
233
+ display: flex;
234
+ align-items: center;
235
+ gap: 12px;
236
+ font-weight: 600;
237
+ }
238
+
239
+ .fl-accordion-icon {
240
+ color: var(--fl-primary);
241
+ font-size: 18px;
242
+ }
243
+
244
+ .fl-accordion-content {
245
+ padding: 20px;
246
+ background: white;
247
+ border-top: 1px solid var(--fl-border);
248
+ display: none;
249
+ animation: slideDown 0.3s ease-out;
250
+ }
251
+
252
+ .fl-accordion-item.active .fl-accordion-content {
253
+ display: block;
254
+ }
255
+
256
+ @keyframes slideDown {
257
+ from { opacity: 0; transform: translateY(-10px); }
258
+ to { opacity: 1; transform: translateY(0); }
259
+ }
260
+
261
+ /* Content Area */
262
+ .fl-content {
263
+ flex: 1;
264
+ padding: 0 24px 100px 24px;
265
+ }
266
+
267
+ /* Footer */
268
+ .fl-footer {
269
+ padding: 20px 24px;
270
+ background: rgba(255, 255, 255, 0.9);
271
+ backdrop-filter: blur(8px);
272
+ border-top: 1px solid var(--fl-border);
273
+ display: flex;
274
+ justify-content: space-between;
275
+ align-items: center;
276
+ position: sticky;
277
+ bottom: 0;
278
+ width: 100%;
279
+ box-sizing: border-box;
280
+ z-index: 10;
281
+ }
282
+
283
+ .fl-btn-group {
284
+ display: flex;
285
+ gap: 12px;
286
+ }
287
+
288
+ .fl-btn {
289
+ padding: 10px 20px;
290
+ border-radius: 8px;
291
+ font-size: 14px;
292
+ font-weight: 600;
293
+ cursor: pointer;
294
+ transition: all 0.2s ease;
295
+ display: flex;
296
+ align-items: center;
297
+ gap: 8px;
298
+ border: 1px solid transparent;
299
+ }
300
+
301
+ .fl-btn:disabled {
302
+ opacity: 0.6;
303
+ cursor: not-allowed;
304
+ }
305
+
306
+ .fl-btn-primary {
307
+ background: var(--fl-primary);
308
+ color: white;
309
+ }
310
+
311
+ .fl-btn-primary:hover:not(:disabled) {
312
+ background: var(--fl-primary-dark);
313
+ transform: translateY(-1px);
314
+ box-shadow: 0 4px 12px rgba(59, 130, 246, 0.3);
315
+ }
316
+
317
+ .fl-btn-outlined {
318
+ background: transparent;
319
+ border-color: var(--fl-border);
320
+ color: var(--fl-text-secondary);
321
+ }
322
+
323
+ .fl-btn-outlined:hover:not(:disabled) {
324
+ background: var(--fl-bg-secondary);
325
+ border-color: var(--fl-text-secondary);
326
+ }
327
+
328
+ .fl-loader {
329
+ width: 16px;
330
+ height: 16px;
331
+ border: 2px solid rgba(255, 255, 255, 0.3);
332
+ border-top-color: white;
333
+ border-radius: 50%;
334
+ animation: spin 0.8s linear infinite;
335
+ }
336
+
337
+ @keyframes spin {
338
+ to { transform: rotate(360deg); }
339
+ }
340
+
341
+ /* Responsive */
342
+ @media (max-width: 640px) {
343
+ .fl-header { padding: 16px; }
344
+ .fl-title-group h1 { font-size: 18px; }
345
+ .fl-stepper-container { padding: 24px 12px; }
346
+ .fl-step-label { display: none; }
347
+ .fl-footer { padding: 16px; }
348
+ }
349
+ `,M=({title:f,mode:i,onCancel:k,onSubmit:$,children:d,steps:o=[],validateStep:x,loading:l=false,layoutType:F="stepper",onSaveDraft:E,onApprove:z,hideSubmitButton:w=false,hideCancelButton:L=false,showbutton:V=true,errors:N,extraHeaderActions:I,onBack:S})=>{let[n,p]=react.useState(0),[b,g]=react.useState(false),[m,u]=react.useState(null),[s,U]=react.useState(F);react.useEffect(()=>{let r="tabler-icons-cdn";if(!document.getElementById(r)){let t=document.createElement("link");t.id=r,t.rel="stylesheet",t.href="https://cdn.jsdelivr.net/npm/@tabler/icons-webfont@latest/dist/tabler-icons.min.css",document.head.appendChild(t);}},[]),react.useEffect(()=>{m!==null&&N&&o.length>0&&((o[m]?.fields??[]).some(c=>N[c])||u(null));},[N,m,o]);let Y=()=>{S?S():k();},j=o.length>0&&n===o.length-1,v=async()=>{if(s==="accordion"&&x){g(true);let r=false;for(let t=0;t<o.length;t++)if(!await x(t)){u(t),p(t),r=true;break}if(g(false),r)return;$(),u(null);}else {if(x){g(true);let r=await x(n);if(g(false),!r){u(n);return}}u(null),j||o.length===0?$():p(r=>r+1);}},R=()=>p(r=>r-1),T=()=>{U(s==="stepper"?"accordion":"stepper");},B=()=>typeof d=="function"?d(n):d;return jsxRuntime.jsxs("div",{className:"fl-container",children:[jsxRuntime.jsx("style",{dangerouslySetInnerHTML:{__html:D}}),jsxRuntime.jsxs("header",{className:"fl-header",children:[jsxRuntime.jsxs("div",{className:"fl-header-left",children:[jsxRuntime.jsx("button",{className:"fl-back-btn",onClick:Y,title:"Go Back",children:jsxRuntime.jsx("i",{className:"ti ti-arrow-left"})}),jsxRuntime.jsxs("div",{className:"fl-title-group",children:[jsxRuntime.jsx("h1",{children:i==="add"?`Add ${f}`:i==="view"?`View ${f}`:`Edit ${f}`}),jsxRuntime.jsx("p",{children:i==="add"?`Fill out the details below to add a new ${f.toLowerCase()}.`:`Update the details below to edit the existing ${f.toLowerCase()}.`})]})]}),jsxRuntime.jsxs("div",{className:"fl-header-right",children:[E&&jsxRuntime.jsxs("button",{className:"fl-btn fl-btn-primary",onClick:E,disabled:l,children:["Draft ",l&&jsxRuntime.jsx("div",{className:"fl-loader"})]}),z&&jsxRuntime.jsxs("button",{className:"fl-btn fl-btn-primary",onClick:z,disabled:l,children:["Approve ",l&&jsxRuntime.jsx("div",{className:"fl-loader"})]}),I,o.length>0&&jsxRuntime.jsx("button",{className:"fl-layout-toggle",onClick:T,title:`Switch to ${s==="stepper"?"Accordion":"Stepper"} view`,children:jsxRuntime.jsx("i",{className:s==="stepper"?"ti ti-list-details":"ti ti-list-numbers"})})]})]}),o.length>0&&jsxRuntime.jsx("div",{className:"fl-stepper-container",children:s==="stepper"?jsxRuntime.jsx("div",{className:"fl-stepper",children:o.map((r,t)=>{let c=n===t,C=n>t;return jsxRuntime.jsxs("div",{className:`fl-step ${c?"active":""} ${C?"completed":""} ${m===t?"error":""}`,onClick:()=>!b&&p(t),children:[jsxRuntime.jsx("div",{className:"fl-step-icon",children:C?jsxRuntime.jsx("i",{className:"ti ti-check"}):r.icon?jsxRuntime.jsx("i",{className:`ti ${r.icon}`}):t+1}),jsxRuntime.jsx("span",{className:"fl-step-label",children:r.label})]},t)})}):jsxRuntime.jsx("div",{className:"fl-accordion-container",children:o.map((r,t)=>{let c=n===t;return jsxRuntime.jsxs("div",{className:`fl-accordion-item ${c?"active":""} ${m===t?"error":""}`,children:[jsxRuntime.jsxs("div",{className:"fl-accordion-header",onClick:()=>p(t),children:[jsxRuntime.jsxs("div",{className:"fl-accordion-title",children:[jsxRuntime.jsx("i",{className:`ti ${r.icon||"ti-circle-number-"+(t+1)} fl-accordion-icon`}),r.label]}),jsxRuntime.jsx("i",{className:`ti ti-chevron-${c?"up":"down"}`})]}),jsxRuntime.jsx("div",{className:"fl-accordion-content",children:typeof d=="function"?d(t):d})]},t)})})}),(o.length===0||s==="stepper")&&jsxRuntime.jsx("main",{className:"fl-content",children:B()}),jsxRuntime.jsxs("footer",{className:"fl-footer",children:[jsxRuntime.jsx("div",{children:s==="stepper"&&o.length>0&&jsxRuntime.jsx("button",{className:"fl-btn fl-btn-outlined",onClick:R,disabled:l||n===0,children:"Back"})}),jsxRuntime.jsx("div",{className:"fl-btn-group",children:s==="accordion"?jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[!L&&jsxRuntime.jsx("button",{className:"fl-btn fl-btn-outlined",onClick:k,disabled:l,children:"Cancel"}),i!=="view"&&!w&&jsxRuntime.jsxs("button",{className:"fl-btn fl-btn-primary",onClick:v,disabled:l||b,children:[i==="add"?"Submit":"Update",l&&jsxRuntime.jsx("div",{className:"fl-loader"})]})]}):o.length>0?jsxRuntime.jsx(jsxRuntime.Fragment,{children:j?jsxRuntime.jsx(jsxRuntime.Fragment,{children:i!=="view"&&!w&&jsxRuntime.jsxs("button",{className:"fl-btn fl-btn-primary",onClick:v,disabled:l||b,children:[i==="add"?"Submit":"Update",l&&jsxRuntime.jsx("div",{className:"fl-loader"})]})}):jsxRuntime.jsx("button",{className:"fl-btn fl-btn-primary",onClick:v,disabled:b,children:b?"Validating...":"Next"})}):V?jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[!L&&jsxRuntime.jsx("button",{className:"fl-btn fl-btn-outlined",onClick:k,disabled:l,children:i==="view"?"Back":"Cancel"}),i!=="view"&&!w&&jsxRuntime.jsxs("button",{className:"fl-btn fl-btn-primary",onClick:v,disabled:l,children:[i==="add"?"Submit":"Update",l&&jsxRuntime.jsx("div",{className:"fl-loader"})]})]}):null})]})]})};
350
+ exports.a=M;//# sourceMappingURL=chunk-3RAQQWLW.js.map
351
+ //# sourceMappingURL=chunk-3RAQQWLW.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/FormLayout/FormLayout.tsx"],"names":["STYLES","FormLayout","title","mode","onCancel","onSubmit","children","steps","validateStep","loading","layoutType","onSaveDraft","onApprove","hideSubmitButton","hideCancelButton","showbutton","errors","extraHeaderActions","onBack","activeStep","setActiveStep","useState","validating","setValidating","errorStep","setErrorStep","layout","setLayout","useEffect","cdnId","link","field","handleBackNavigation","isLastStep","handleNext","hasErrors","i","isValid","prev","handleBack","toggleLayout","renderContent","jsxs","jsx","step","index","isActive","isCompleted","Fragment"],"mappings":"oFAKMA,CAAAA,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;AAA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","file":"chunk-3RAQQWLW.js","sourcesContent":["'use client';\n\nimport React, { useState, useEffect, ReactNode } from 'react';\nimport { FormLayoutProps } from './FormLayout.types';\n\nconst STYLES = `\n :root {\n --fl-primary: #3b82f6;\n --fl-primary-dark: #2563eb;\n --fl-primary-light: #eff6ff;\n --fl-text-main: #1e293b;\n --fl-text-secondary: #64748b;\n --fl-bg-main: #ffffff;\n --fl-bg-secondary: #f8fafc;\n --fl-border: #e2e8f0;\n --fl-error: #ef4444;\n --fl-success: #10b981;\n --fl-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);\n --fl-radius: 12px;\n }\n\n .fl-container {\n display: flex;\n flex-direction: column;\n min-height: 80vh;\n font-family: 'Inter', system-ui, -apple-system, sans-serif;\n color: var(--fl-text-main);\n width: 100%;\n margin: 0 auto;\n background: var(--fl-bg-main);\n position: relative;\n }\n\n /* Header */\n .fl-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 24px;\n border-bottom: 1px solid var(--fl-border);\n background: rgba(255, 255, 255, 0.8);\n backdrop-filter: blur(8px);\n position: sticky;\n top: 0;\n z-index: 10;\n }\n\n .fl-header-left {\n display: flex;\n align-items: center;\n gap: 16px;\n }\n\n .fl-back-btn {\n width: 40px;\n height: 40px;\n border-radius: 10px;\n border: none;\n background: var(--fl-primary-light);\n color: var(--fl-primary);\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: all 0.2s ease;\n }\n\n .fl-back-btn:hover {\n background: var(--fl-primary);\n color: white;\n transform: translateX(-2px);\n }\n\n .fl-title-group h1 {\n margin: 0;\n font-size: 20px;\n font-weight: 700;\n color: var(--fl-text-main);\n }\n\n .fl-title-group p {\n margin: 4px 0 0 0;\n font-size: 14px;\n color: var(--fl-text-secondary);\n }\n\n .fl-header-right {\n display: flex;\n align-items: center;\n gap: 12px;\n }\n\n /* Layout Toggle */\n .fl-layout-toggle {\n width: 40px;\n height: 40px;\n border-radius: 10px;\n border: 1px solid var(--fl-border);\n background: white;\n color: var(--fl-primary);\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: all 0.2s ease;\n }\n\n .fl-layout-toggle:hover {\n border-color: var(--fl-primary);\n background: var(--fl-primary-light);\n }\n\n /* Stepper */\n .fl-stepper-container {\n padding: 32px 24px;\n }\n\n .fl-stepper {\n display: flex;\n justify-content: space-between;\n position: relative;\n margin-bottom: 32px;\n }\n\n .fl-step {\n display: flex;\n flex-direction: column;\n align-items: center;\n z-index: 3;\n flex: 1;\n cursor: pointer;\n position: relative;\n }\n\n .fl-step:not(:last-child)::after {\n content: '';\n position: absolute;\n top: 20px;\n left: calc(50% + 24px);\n right: calc(-50% + 24px);\n height: 3px;\n background: var(--fl-border);\n z-index: -1;\n transition: background 0.3s ease;\n }\n\n .fl-step.completed:not(:last-child)::after {\n background: var(--fl-primary);\n }\n\n\n .fl-step-icon {\n width: 42px;\n height: 42px;\n border-radius: 50%;\n background: white;\n border: 3px solid var(--fl-border);\n display: flex;\n align-items: center;\n justify-content: center;\n font-weight: 600;\n font-size: 14px;\n color: var(--fl-text-secondary);\n transition: all 0.3s ease;\n margin-bottom: 8px;\n box-shadow: 0 0 0 4px white;\n }\n\n .fl-step.active .fl-step-icon {\n border-color: var(--fl-primary);\n color: var(--fl-primary);\n transform: scale(1.1);\n box-shadow: 0 0 0 4px white, 0 4px 12px rgba(59, 130, 246, 0.3);\n }\n\n .fl-step.completed .fl-step-icon {\n background: var(--fl-primary);\n border-color: var(--fl-primary);\n color: white;\n }\n\n .fl-step.error .fl-step-icon {\n border-color: var(--fl-error);\n color: var(--fl-error);\n }\n\n .fl-step-label {\n font-size: 13px;\n font-weight: 500;\n color: var(--fl-text-secondary);\n transition: all 0.2s ease;\n }\n\n .fl-step.active .fl-step-label {\n color: var(--fl-primary);\n font-weight: 600;\n }\n\n /* Accordion */\n .fl-accordion-container {\n padding: 24px;\n display: flex;\n flex-direction: column;\n gap: 12px;\n }\n\n .fl-accordion-item {\n border: 1px solid var(--fl-border);\n border-radius: var(--fl-radius);\n overflow: hidden;\n transition: all 0.3s ease;\n }\n\n .fl-accordion-item.active {\n border-color: var(--fl-primary);\n box-shadow: var(--fl-shadow);\n }\n\n .fl-accordion-item.error {\n border-color: var(--fl-error);\n }\n\n .fl-accordion-header {\n padding: 16px 20px;\n background: var(--fl-bg-secondary);\n display: flex;\n justify-content: space-between;\n align-items: center;\n cursor: pointer;\n transition: background 0.2s ease;\n }\n\n .fl-accordion-header:hover {\n background: #f1f5f9;\n }\n\n .fl-accordion-title {\n display: flex;\n align-items: center;\n gap: 12px;\n font-weight: 600;\n }\n\n .fl-accordion-icon {\n color: var(--fl-primary);\n font-size: 18px;\n }\n\n .fl-accordion-content {\n padding: 20px;\n background: white;\n border-top: 1px solid var(--fl-border);\n display: none;\n animation: slideDown 0.3s ease-out;\n }\n\n .fl-accordion-item.active .fl-accordion-content {\n display: block;\n }\n\n @keyframes slideDown {\n from { opacity: 0; transform: translateY(-10px); }\n to { opacity: 1; transform: translateY(0); }\n }\n\n /* Content Area */\n .fl-content {\n flex: 1;\n padding: 0 24px 100px 24px;\n }\n\n /* Footer */\n .fl-footer {\n padding: 20px 24px;\n background: rgba(255, 255, 255, 0.9);\n backdrop-filter: blur(8px);\n border-top: 1px solid var(--fl-border);\n display: flex;\n justify-content: space-between;\n align-items: center;\n position: sticky;\n bottom: 0;\n width: 100%;\n box-sizing: border-box;\n z-index: 10;\n }\n\n .fl-btn-group {\n display: flex;\n gap: 12px;\n }\n\n .fl-btn {\n padding: 10px 20px;\n border-radius: 8px;\n font-size: 14px;\n font-weight: 600;\n cursor: pointer;\n transition: all 0.2s ease;\n display: flex;\n align-items: center;\n gap: 8px;\n border: 1px solid transparent;\n }\n\n .fl-btn:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n }\n\n .fl-btn-primary {\n background: var(--fl-primary);\n color: white;\n }\n\n .fl-btn-primary:hover:not(:disabled) {\n background: var(--fl-primary-dark);\n transform: translateY(-1px);\n box-shadow: 0 4px 12px rgba(59, 130, 246, 0.3);\n }\n\n .fl-btn-outlined {\n background: transparent;\n border-color: var(--fl-border);\n color: var(--fl-text-secondary);\n }\n\n .fl-btn-outlined:hover:not(:disabled) {\n background: var(--fl-bg-secondary);\n border-color: var(--fl-text-secondary);\n }\n\n .fl-loader {\n width: 16px;\n height: 16px;\n border: 2px solid rgba(255, 255, 255, 0.3);\n border-top-color: white;\n border-radius: 50%;\n animation: spin 0.8s linear infinite;\n }\n\n @keyframes spin {\n to { transform: rotate(360deg); }\n }\n\n /* Responsive */\n @media (max-width: 640px) {\n .fl-header { padding: 16px; }\n .fl-title-group h1 { font-size: 18px; }\n .fl-stepper-container { padding: 24px 12px; }\n .fl-step-label { display: none; }\n .fl-footer { padding: 16px; }\n }\n`;\n\nexport const FormLayout = ({\n title,\n mode,\n onCancel,\n onSubmit,\n children,\n steps = [],\n validateStep,\n loading = false,\n layoutType = 'stepper',\n onSaveDraft,\n onApprove,\n hideSubmitButton = false,\n hideCancelButton = false,\n showbutton = true,\n errors,\n extraHeaderActions,\n onBack\n}: FormLayoutProps) => {\n const [activeStep, setActiveStep] = useState<number>(0);\n const [validating, setValidating] = useState<boolean>(false);\n const [errorStep, setErrorStep] = useState<number | null>(null);\n const [layout, setLayout] = useState(layoutType);\n\n // Inject Tabler Icons CDN\n useEffect(() => {\n const cdnId = 'tabler-icons-cdn';\n if (!document.getElementById(cdnId)) {\n const link = document.createElement('link');\n link.id = cdnId;\n link.rel = 'stylesheet';\n link.href = 'https://cdn.jsdelivr.net/npm/@tabler/icons-webfont@latest/dist/tabler-icons.min.css';\n document.head.appendChild(link);\n }\n }, []);\n\n // Update error step based on external errors prop\n useEffect(() => {\n if (errorStep !== null && errors && steps.length > 0) {\n const stepFields = steps[errorStep]?.fields ?? [];\n const hasError = stepFields.some((field: string) => errors[field]);\n if (!hasError) {\n setErrorStep(null);\n }\n }\n }, [errors, errorStep, steps]);\n\n const handleBackNavigation = () => {\n if (onBack) onBack();\n else onCancel();\n };\n\n const isLastStep = steps.length > 0 && activeStep === steps.length - 1;\n\n const handleNext = async () => {\n if (layout === 'accordion' && validateStep) {\n setValidating(true);\n let hasErrors = false;\n for (let i = 0; i < steps.length; i++) {\n const isValid = await validateStep(i);\n if (!isValid) {\n setErrorStep(i);\n setActiveStep(i);\n hasErrors = true;\n break;\n }\n }\n setValidating(false);\n if (hasErrors) return;\n onSubmit();\n setErrorStep(null);\n } else {\n if (validateStep) {\n setValidating(true);\n const isValid = await validateStep(activeStep);\n setValidating(false);\n if (!isValid) {\n setErrorStep(activeStep);\n return;\n }\n }\n setErrorStep(null);\n if (isLastStep || steps.length === 0) {\n onSubmit();\n } else {\n setActiveStep((prev) => prev + 1);\n }\n }\n };\n\n const handleBack = () => setActiveStep((prev) => prev - 1);\n\n const toggleLayout = () => {\n setLayout(layout === 'stepper' ? 'accordion' : 'stepper');\n };\n\n const renderContent = () => {\n if (typeof children === 'function') {\n return children(activeStep);\n }\n return children;\n };\n\n return (\n <div className=\"fl-container\">\n <style dangerouslySetInnerHTML={{ __html: STYLES }} />\n \n {/* Header */}\n <header className=\"fl-header\">\n <div className=\"fl-header-left\">\n <button className=\"fl-back-btn\" onClick={handleBackNavigation} title=\"Go Back\">\n <i className=\"ti ti-arrow-left\"></i>\n </button>\n <div className=\"fl-title-group\">\n <h1>{mode === 'add' ? `Add ${title}` : mode === 'view' ? `View ${title}` : `Edit ${title}`}</h1>\n <p>\n {mode === 'add'\n ? `Fill out the details below to add a new ${title.toLowerCase()}.`\n : `Update the details below to edit the existing ${title.toLowerCase()}.`}\n </p>\n </div>\n </div>\n \n <div className=\"fl-header-right\">\n {onSaveDraft && (\n <button className=\"fl-btn fl-btn-primary\" onClick={onSaveDraft} disabled={loading}>\n Draft {loading && <div className=\"fl-loader\" />}\n </button>\n )}\n \n {onApprove && (\n <button className=\"fl-btn fl-btn-primary\" onClick={onApprove} disabled={loading}>\n Approve {loading && <div className=\"fl-loader\" />}\n </button>\n )}\n\n {extraHeaderActions}\n\n {steps.length > 0 && (\n <button className=\"fl-layout-toggle\" onClick={toggleLayout} title={`Switch to ${layout === 'stepper' ? 'Accordion' : 'Stepper'} view`}>\n <i className={layout === 'stepper' ? 'ti ti-list-details' : 'ti ti-list-numbers'}></i>\n </button>\n )}\n </div>\n </header>\n\n {/* Steps Visualization */}\n {steps.length > 0 && (\n <div className=\"fl-stepper-container\">\n {layout === 'stepper' ? (\n <div className=\"fl-stepper\">\n {steps.map((step, index) => {\n const isActive = activeStep === index;\n const isCompleted = activeStep > index;\n const hasError = errorStep === index;\n \n return (\n <div \n key={index} \n className={`fl-step ${isActive ? 'active' : ''} ${isCompleted ? 'completed' : ''} ${hasError ? 'error' : ''}`}\n onClick={() => !validating && setActiveStep(index)}\n >\n <div className=\"fl-step-icon\">\n {isCompleted ? <i className=\"ti ti-check\"></i> : (step.icon ? <i className={`ti ${step.icon}`}></i> : index + 1)}\n </div>\n <span className=\"fl-step-label\">{step.label}</span>\n </div>\n );\n })}\n </div>\n ) : (\n <div className=\"fl-accordion-container\">\n {steps.map((step, index) => {\n const isActive = activeStep === index;\n const hasError = errorStep === index;\n \n return (\n <div key={index} className={`fl-accordion-item ${isActive ? 'active' : ''} ${hasError ? 'error' : ''}`}>\n <div className=\"fl-accordion-header\" onClick={() => setActiveStep(index)}>\n <div className=\"fl-accordion-title\">\n <i className={`ti ${step.icon || 'ti-circle-number-' + (index + 1)} fl-accordion-icon`}></i>\n {step.label}\n </div>\n <i className={`ti ti-chevron-${isActive ? 'up' : 'down'}`}></i>\n </div>\n <div className=\"fl-accordion-content\">\n {typeof children === 'function' ? children(index) : children}\n </div>\n </div>\n );\n })}\n </div>\n )}\n </div>\n )}\n\n {/* Main Content Area (for Stepper or No-steps layout) */}\n {(steps.length === 0 || layout === 'stepper') && (\n <main className=\"fl-content\">\n {renderContent()}\n </main>\n )}\n\n {/* Footer Buttons */}\n <footer className=\"fl-footer\">\n <div>\n {layout === 'stepper' && steps.length > 0 && (\n <button className=\"fl-btn fl-btn-outlined\" onClick={handleBack} disabled={loading || activeStep === 0}>\n Back\n </button>\n )}\n </div>\n \n <div className=\"fl-btn-group\">\n {layout === 'accordion' ? (\n <>\n {!hideCancelButton && (\n <button className=\"fl-btn fl-btn-outlined\" onClick={onCancel} disabled={loading}>\n Cancel\n </button>\n )}\n {mode !== 'view' && !hideSubmitButton && (\n <button className=\"fl-btn fl-btn-primary\" onClick={handleNext} disabled={loading || validating}>\n {mode === 'add' ? 'Submit' : 'Update'}\n {loading && <div className=\"fl-loader\" />}\n </button>\n )}\n </>\n ) : steps.length > 0 ? (\n <>\n {isLastStep ? (\n <>\n {mode !== 'view' && !hideSubmitButton && (\n <button className=\"fl-btn fl-btn-primary\" onClick={handleNext} disabled={loading || validating}>\n {mode === 'add' ? 'Submit' : 'Update'}\n {loading && <div className=\"fl-loader\" />}\n </button>\n )}\n </>\n ) : (\n <button className=\"fl-btn fl-btn-primary\" onClick={handleNext} disabled={validating}>\n {validating ? 'Validating...' : 'Next'}\n </button>\n )}\n </>\n ) : showbutton ? (\n <>\n {!hideCancelButton && (\n <button className=\"fl-btn fl-btn-outlined\" onClick={onCancel} disabled={loading}>\n {mode === 'view' ? 'Back' : 'Cancel'}\n </button>\n )}\n {mode !== 'view' && !hideSubmitButton && (\n <button className=\"fl-btn fl-btn-primary\" onClick={handleNext} disabled={loading}>\n {mode === 'add' ? 'Submit' : 'Update'}\n {loading && <div className=\"fl-loader\" />}\n </button>\n )}\n </>\n ) : null}\n </div>\n </footer>\n </div>\n );\n};\n"]}