@customafk/lunas-ui 0.2.64 → 0.2.66

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 (772) hide show
  1. package/dist/FeatureDeveloping-zuTTDIh_.d.cts +41 -0
  2. package/dist/FeatureDeveloping-zuTTDIh_.d.mts +41 -0
  3. package/dist/FeatureFixing-DYQlgHPk.d.cts +41 -0
  4. package/dist/FeatureFixing-DYQlgHPk.d.mts +41 -0
  5. package/dist/LoginPage-vMXvwtxf.d.cts +53 -0
  6. package/dist/LoginPage-vMXvwtxf.d.mts +53 -0
  7. package/dist/NotAuthorized-CZIQ6EaA.d.cts +41 -0
  8. package/dist/NotAuthorized-CZIQ6EaA.d.mts +41 -0
  9. package/dist/NotFound-CRSKxhV8.d.cts +41 -0
  10. package/dist/NotFound-CRSKxhV8.d.mts +41 -0
  11. package/dist/RegisterPage-BBtpEzvL.d.cts +50 -0
  12. package/dist/RegisterPage-BBtpEzvL.d.mts +50 -0
  13. package/dist/VerifyEmailPage-CsmIeYLu.d.cts +62 -0
  14. package/dist/VerifyEmailPage-CsmIeYLu.d.mts +62 -0
  15. package/dist/action-submit-42PxGLsR.cjs +2 -0
  16. package/dist/action-submit-42PxGLsR.cjs.map +1 -0
  17. package/dist/action-submit-SviPJW3i.mjs +2 -0
  18. package/dist/action-submit-SviPJW3i.mjs.map +1 -0
  19. package/dist/actions-form-Bo46j_dH.cjs +2 -0
  20. package/dist/actions-form-Bo46j_dH.cjs.map +1 -0
  21. package/dist/actions-form-QdAsKwcQ.mjs +2 -0
  22. package/dist/actions-form-QdAsKwcQ.mjs.map +1 -0
  23. package/dist/activity-heatmap-chart-DufvFndI.mjs +2 -0
  24. package/dist/activity-heatmap-chart-DufvFndI.mjs.map +1 -0
  25. package/dist/activity-heatmap-chart-gDcvIAK_.cjs +2 -0
  26. package/dist/activity-heatmap-chart-gDcvIAK_.cjs.map +1 -0
  27. package/dist/add-new-DkBwXh0Q.d.cts +16 -0
  28. package/dist/add-new-DkBwXh0Q.d.mts +16 -0
  29. package/dist/alert-dialog-Cdhz7jSj.d.cts +88 -0
  30. package/dist/alert-dialog-Cdhz7jSj.d.mts +88 -0
  31. package/dist/analysis-panel-DzsZKA9l.cjs +2 -0
  32. package/dist/analysis-panel-DzsZKA9l.cjs.map +1 -0
  33. package/dist/analysis-panel-ikcRtzG9.mjs +2 -0
  34. package/dist/analysis-panel-ikcRtzG9.mjs.map +1 -0
  35. package/dist/aspect-ratio-huscluwJ.d.cts +22 -0
  36. package/dist/aspect-ratio-huscluwJ.d.mts +22 -0
  37. package/dist/avatar-BpeFwSkQ.d.cts +33 -0
  38. package/dist/avatar-BpeFwSkQ.d.mts +33 -0
  39. package/dist/avatar-name-display-BrpnTqa_.mjs +2 -0
  40. package/dist/avatar-name-display-BrpnTqa_.mjs.map +1 -0
  41. package/dist/avatar-name-display-CLi1DJUs.cjs +2 -0
  42. package/dist/avatar-name-display-CLi1DJUs.cjs.map +1 -0
  43. package/dist/{badge-D0InQSvM.d.cts → badge-MRT40pxM.d.cts} +3 -3
  44. package/dist/{badge-D0InQSvM.d.mts → badge-MRT40pxM.d.mts} +3 -3
  45. package/dist/badge-display-9WXwgQgH.cjs +2 -0
  46. package/dist/badge-display-9WXwgQgH.cjs.map +1 -0
  47. package/dist/badge-display-Dx-dITLB.mjs +2 -0
  48. package/dist/badge-display-Dx-dITLB.mjs.map +1 -0
  49. package/dist/boolean-display-OVCtvzI1.mjs +2 -0
  50. package/dist/boolean-display-OVCtvzI1.mjs.map +1 -0
  51. package/dist/boolean-display-pmzYS-ND.cjs +2 -0
  52. package/dist/boolean-display-pmzYS-ND.cjs.map +1 -0
  53. package/dist/breadcrumb-CSpScKZm.d.cts +69 -0
  54. package/dist/breadcrumb-CSpScKZm.d.mts +69 -0
  55. package/dist/{button-DIqm3YRo.d.cts → button-Bk4Y6_9I.d.cts} +3 -3
  56. package/dist/{button-DIqm3YRo.d.mts → button-Bk4Y6_9I.d.mts} +3 -3
  57. package/dist/button-group-Cd5m5G3p.d.mts +48 -0
  58. package/dist/button-group-CiKhLVCg.d.cts +48 -0
  59. package/dist/calendar-DPKt7D3w.d.mts +43 -0
  60. package/dist/calendar-stv2bJv0.d.cts +43 -0
  61. package/dist/candlestick-chart-CiBiCU3y.mjs +2 -0
  62. package/dist/candlestick-chart-CiBiCU3y.mjs.map +1 -0
  63. package/dist/candlestick-chart-CqmRkfXj.cjs +2 -0
  64. package/dist/candlestick-chart-CqmRkfXj.cjs.map +1 -0
  65. package/dist/card-DOnx7RKz.d.cts +60 -0
  66. package/dist/card-DOnx7RKz.d.mts +60 -0
  67. package/dist/card-form-BR5kDTzB.cjs +2 -0
  68. package/dist/card-form-BR5kDTzB.cjs.map +1 -0
  69. package/dist/card-form-D9fNO-6F.mjs +2 -0
  70. package/dist/card-form-D9fNO-6F.mjs.map +1 -0
  71. package/dist/cards/grid-product-card.d.cts +2 -30
  72. package/dist/cards/grid-product-card.d.mts +2 -30
  73. package/dist/cards/product-card.d.cts +2 -30
  74. package/dist/cards/product-card.d.mts +2 -30
  75. package/dist/cards/simple-card.d.cts +2 -29
  76. package/dist/cards/simple-card.d.mts +2 -29
  77. package/dist/carousel-CV3IZ96x.d.mts +70 -0
  78. package/dist/carousel-c2XuzmYN.d.cts +70 -0
  79. package/dist/chart-sYFksFMk.d.cts +80 -0
  80. package/dist/chart-sYFksFMk.d.mts +80 -0
  81. package/dist/checkbox-XfLNnG0S.d.cts +24 -0
  82. package/dist/checkbox-XfLNnG0S.d.mts +24 -0
  83. package/dist/checkbox-field-B1vCz-Wf.cjs +2 -0
  84. package/dist/checkbox-field-B1vCz-Wf.cjs.map +1 -0
  85. package/dist/checkbox-field-FqCe38_D.mjs +2 -0
  86. package/dist/checkbox-field-FqCe38_D.mjs.map +1 -0
  87. package/dist/{cms-layout-SubgSF72.cjs → cms-layout-CGGJqbr0.cjs} +2 -2
  88. package/dist/{cms-layout-SubgSF72.cjs.map → cms-layout-CGGJqbr0.cjs.map} +1 -1
  89. package/dist/{cms-layout-CuF5ahpj.mjs → cms-layout-ePySxIQN.mjs} +2 -2
  90. package/dist/{cms-layout-CuF5ahpj.mjs.map → cms-layout-ePySxIQN.mjs.map} +1 -1
  91. package/dist/collapsible-liIHmFuw.d.cts +32 -0
  92. package/dist/collapsible-liIHmFuw.d.mts +32 -0
  93. package/dist/combobox-field-D6fiCcvU.mjs +2 -0
  94. package/dist/combobox-field-D6fiCcvU.mjs.map +1 -0
  95. package/dist/combobox-field-DLpH6J9H.cjs +2 -0
  96. package/dist/combobox-field-DLpH6J9H.cjs.map +1 -0
  97. package/dist/command-Bb6SneVI.d.mts +87 -0
  98. package/dist/command-CHSJVU9o.d.cts +87 -0
  99. package/dist/confirm-dialog-B8Vu0z8S.d.cts +142 -0
  100. package/dist/confirm-dialog-B8Vu0z8S.d.mts +142 -0
  101. package/dist/container-form-BdsEX0NH.mjs +2 -0
  102. package/dist/container-form-BdsEX0NH.mjs.map +1 -0
  103. package/dist/container-form-CxxUYctk.cjs +2 -0
  104. package/dist/container-form-CxxUYctk.cjs.map +1 -0
  105. package/dist/context-menu-BOlGSuep.d.cts +123 -0
  106. package/dist/context-menu-BOlGSuep.d.mts +123 -0
  107. package/dist/conversion-funnel-chart-CW_zDfKS.mjs +2 -0
  108. package/dist/conversion-funnel-chart-CW_zDfKS.mjs.map +1 -0
  109. package/dist/conversion-funnel-chart-r2m2QbiQ.cjs +2 -0
  110. package/dist/conversion-funnel-chart-r2m2QbiQ.cjs.map +1 -0
  111. package/dist/correlation-scatter-chart-Djtt7NU7.mjs +2 -0
  112. package/dist/correlation-scatter-chart-Djtt7NU7.mjs.map +1 -0
  113. package/dist/correlation-scatter-chart-HF48YUIB.cjs +2 -0
  114. package/dist/correlation-scatter-chart-HF48YUIB.cjs.map +1 -0
  115. package/dist/country-C8QijcHF.d.mts +21 -0
  116. package/dist/country-CJIaO0I7.d.cts +21 -0
  117. package/dist/currency-display-B91H66HM.cjs +2 -0
  118. package/dist/currency-display-B91H66HM.cjs.map +1 -0
  119. package/dist/currency-display-BN1i8jnU.mjs +2 -0
  120. package/dist/currency-display-BN1i8jnU.mjs.map +1 -0
  121. package/dist/data-display/country.d.cts +2 -21
  122. package/dist/data-display/country.d.mts +2 -21
  123. package/dist/data-display/data-list.d.cts +2 -38
  124. package/dist/data-display/data-list.d.mts +2 -38
  125. package/dist/data-display/date-tooltip.d.cts +2 -18
  126. package/dist/data-display/date-tooltip.d.mts +2 -18
  127. package/dist/data-display/date.d.cts +2 -39
  128. package/dist/data-display/date.d.mts +2 -39
  129. package/dist/data-display/empty.d.cts +2 -19
  130. package/dist/data-display/empty.d.mts +2 -19
  131. package/dist/data-display/name.d.cts +2 -18
  132. package/dist/data-display/name.d.mts +2 -18
  133. package/dist/data-display/phone-number.d.cts +2 -18
  134. package/dist/data-display/phone-number.d.mts +2 -18
  135. package/dist/data-display/role-badge.d.cts +2 -21
  136. package/dist/data-display/role-badge.d.mts +2 -21
  137. package/dist/data-display/statistic.d.cts +2 -45
  138. package/dist/data-display/statistic.d.mts +2 -45
  139. package/dist/data-display/user.d.cts +2 -20
  140. package/dist/data-display/user.d.mts +2 -20
  141. package/dist/data-list-Cg510z2m.d.cts +38 -0
  142. package/dist/data-list-Cg510z2m.d.mts +38 -0
  143. package/dist/date-KANPBbN4.d.cts +39 -0
  144. package/dist/date-KANPBbN4.d.mts +39 -0
  145. package/dist/date-display-BWtvWDHK.mjs +2 -0
  146. package/dist/date-display-BWtvWDHK.mjs.map +1 -0
  147. package/dist/date-display-odcC9NcB.cjs +2 -0
  148. package/dist/date-display-odcC9NcB.cjs.map +1 -0
  149. package/dist/date-field-Cxbrc0Vl.mjs +2 -0
  150. package/dist/date-field-Cxbrc0Vl.mjs.map +1 -0
  151. package/dist/date-field-RvEB9F1r.cjs +2 -0
  152. package/dist/date-field-RvEB9F1r.cjs.map +1 -0
  153. package/dist/date-tooltip-DptxGOj_.d.cts +18 -0
  154. package/dist/date-tooltip-DptxGOj_.d.mts +18 -0
  155. package/dist/description-display-BubAcFan.mjs +2 -0
  156. package/dist/description-display-BubAcFan.mjs.map +1 -0
  157. package/dist/description-display-CKe0j3q-.cjs +2 -0
  158. package/dist/description-display-CKe0j3q-.cjs.map +1 -0
  159. package/dist/dialog-form-C0W5C0u9.mjs +2 -0
  160. package/dist/dialog-form-C0W5C0u9.mjs.map +1 -0
  161. package/dist/dialog-form-CkNCwzWG.cjs +2 -0
  162. package/dist/dialog-form-CkNCwzWG.cjs.map +1 -0
  163. package/dist/dialogs/confirm-dialog.cjs +1 -1
  164. package/dist/dialogs/confirm-dialog.cjs.map +1 -1
  165. package/dist/dialogs/confirm-dialog.d.cts +2 -142
  166. package/dist/dialogs/confirm-dialog.d.mts +2 -142
  167. package/dist/dialogs/confirm-dialog.mjs +1 -1
  168. package/dist/dialogs/confirm-dialog.mjs.map +1 -1
  169. package/dist/dialogs/detail-dialog/components/sidebar.cjs +1 -1
  170. package/dist/dialogs/detail-dialog/components/sidebar.cjs.map +1 -1
  171. package/dist/dialogs/detail-dialog/components/sidebar.d.cts +50 -38
  172. package/dist/dialogs/detail-dialog/components/sidebar.d.mts +50 -38
  173. package/dist/dialogs/detail-dialog/components/sidebar.mjs +1 -1
  174. package/dist/dialogs/detail-dialog/components/sidebar.mjs.map +1 -1
  175. package/dist/dialogs/detail-dialog/index.cjs +1 -1
  176. package/dist/dialogs/detail-dialog/index.cjs.map +1 -1
  177. package/dist/dialogs/detail-dialog/index.d.cts +2 -36
  178. package/dist/dialogs/detail-dialog/index.d.mts +2 -36
  179. package/dist/dialogs/detail-dialog/index.mjs +1 -1
  180. package/dist/dialogs/detail-dialog/index.mjs.map +1 -1
  181. package/dist/dialogs/error-dialog.d.cts +2 -22
  182. package/dist/dialogs/error-dialog.d.mts +2 -22
  183. package/dist/dialogs/loading-dialog.d.cts +2 -19
  184. package/dist/dialogs/loading-dialog.d.mts +2 -19
  185. package/dist/donut-chart-CsPPKy0G.cjs +2 -0
  186. package/dist/donut-chart-CsPPKy0G.cjs.map +1 -0
  187. package/dist/donut-chart-eKZjuzW0.mjs +2 -0
  188. package/dist/donut-chart-eKZjuzW0.mjs.map +1 -0
  189. package/dist/drawer-Dwx99ff3.d.cts +70 -0
  190. package/dist/drawer-Dwx99ff3.d.mts +70 -0
  191. package/dist/dropdown-menu-CcMccVns.d.cts +125 -0
  192. package/dist/dropdown-menu-CcMccVns.d.mts +125 -0
  193. package/dist/edit-button-0_FLZoT3.cjs +2 -0
  194. package/dist/edit-button-0_FLZoT3.cjs.map +1 -0
  195. package/dist/edit-button-DmMFMzG0.mjs +2 -0
  196. package/dist/edit-button-DmMFMzG0.mjs.map +1 -0
  197. package/dist/edit-qfS5kOtM.d.cts +16 -0
  198. package/dist/edit-qfS5kOtM.d.mts +16 -0
  199. package/dist/email-display-BLt60GQ1.cjs +2 -0
  200. package/dist/email-display-BLt60GQ1.cjs.map +1 -0
  201. package/dist/email-display-CMme47S9.mjs +2 -0
  202. package/dist/email-display-CMme47S9.mjs.map +1 -0
  203. package/dist/email-field-BErx3liY.cjs +2 -0
  204. package/dist/email-field-BErx3liY.cjs.map +1 -0
  205. package/dist/email-field-BtcdBWL4.mjs +2 -0
  206. package/dist/email-field-BtcdBWL4.mjs.map +1 -0
  207. package/dist/empty-CaNJjp05.d.cts +65 -0
  208. package/dist/empty-CaNJjp05.d.mts +65 -0
  209. package/dist/empty-ClQptIZH.d.cts +19 -0
  210. package/dist/empty-ClQptIZH.d.mts +19 -0
  211. package/dist/error-dialog-D4jOPhmw.d.cts +22 -0
  212. package/dist/error-dialog-D4jOPhmw.d.mts +22 -0
  213. package/dist/features/charts/index.cjs +1 -1
  214. package/dist/features/charts/index.cjs.map +1 -1
  215. package/dist/features/charts/index.d.cts +2 -904
  216. package/dist/features/charts/index.d.mts +2 -904
  217. package/dist/features/charts/index.mjs +1 -1
  218. package/dist/features/charts/index.mjs.map +1 -1
  219. package/dist/features/descriptions/index.cjs +1 -1
  220. package/dist/features/descriptions/index.cjs.map +1 -1
  221. package/dist/features/descriptions/index.d.cts +2 -231
  222. package/dist/features/descriptions/index.d.mts +2 -231
  223. package/dist/features/descriptions/index.mjs +1 -1
  224. package/dist/features/descriptions/index.mjs.map +1 -1
  225. package/dist/features/search-modal/index.d.cts +2 -14
  226. package/dist/features/search-modal/index.d.mts +2 -14
  227. package/dist/features/tables/index.cjs +1 -1
  228. package/dist/features/tables/index.d.cts +2 -2
  229. package/dist/features/tables/index.d.mts +2 -2
  230. package/dist/features/tables/index.mjs +1 -1
  231. package/dist/features/tanstack-form/index.cjs +1 -1
  232. package/dist/features/tanstack-form/index.d.cts +1 -1
  233. package/dist/features/tanstack-form/index.d.mts +1 -1
  234. package/dist/features/tanstack-form/index.mjs +1 -1
  235. package/dist/features/text-editor/index.cjs +1 -1
  236. package/dist/features/text-editor/index.d.cts +1 -1
  237. package/dist/features/text-editor/index.d.mts +1 -1
  238. package/dist/features/text-editor/index.mjs +1 -1
  239. package/dist/field-BKyUqvzh.mjs +2 -0
  240. package/dist/field-BKyUqvzh.mjs.map +1 -0
  241. package/dist/field-BV5twmKA.cjs +2 -0
  242. package/dist/field-BV5twmKA.cjs.map +1 -0
  243. package/dist/file-uploader-U64lH0zG.d.cts +101 -0
  244. package/dist/file-uploader-U64lH0zG.d.mts +101 -0
  245. package/dist/filter-CMzD5h0M.mjs +2 -0
  246. package/dist/filter-CMzD5h0M.mjs.map +1 -0
  247. package/dist/filter-Cmg6SHMu.cjs +2 -0
  248. package/dist/filter-Cmg6SHMu.cjs.map +1 -0
  249. package/dist/flex-CT71VV-I.d.cts +114 -0
  250. package/dist/flex-CT71VV-I.d.mts +114 -0
  251. package/dist/form-CMP15S4r.d.cts +109 -0
  252. package/dist/form-CMP15S4r.d.mts +109 -0
  253. package/dist/gain-loss-bar-chart-Dz1oAj8H.mjs +2 -0
  254. package/dist/gain-loss-bar-chart-Dz1oAj8H.mjs.map +1 -0
  255. package/dist/gain-loss-bar-chart-FUzN7DxF.cjs +2 -0
  256. package/dist/gain-loss-bar-chart-FUzN7DxF.cjs.map +1 -0
  257. package/dist/google-Bl-jBW8L.d.cts +48 -0
  258. package/dist/google-Bl-jBW8L.d.mts +48 -0
  259. package/dist/grid-i7Oz2Izf.d.cts +19 -0
  260. package/dist/grid-i7Oz2Izf.d.mts +19 -0
  261. package/dist/grid-product-card-bpADqDOQ.d.cts +30 -0
  262. package/dist/grid-product-card-bpADqDOQ.d.mts +30 -0
  263. package/dist/group-field-0kStiX8n.cjs +2 -0
  264. package/dist/group-field-0kStiX8n.cjs.map +1 -0
  265. package/dist/group-field-bviEXmo4.mjs +2 -0
  266. package/dist/group-field-bviEXmo4.mjs.map +1 -0
  267. package/dist/hover-card-Prwm-0Q4.d.cts +35 -0
  268. package/dist/hover-card-Prwm-0Q4.d.mts +35 -0
  269. package/dist/image-Cln0r7Eb.d.cts +27 -0
  270. package/dist/image-Cln0r7Eb.d.mts +27 -0
  271. package/dist/{index-CGpGIM1H.d.cts → index-BRE7tL8d.d.cts} +121 -500
  272. package/dist/index-C2HFO3a9.d.mts +231 -0
  273. package/dist/index-C9eXmnvk.d.cts +36 -0
  274. package/dist/index-C9eXmnvk.d.mts +36 -0
  275. package/dist/index-CBntsHIg.d.cts +520 -0
  276. package/dist/index-CBntsHIg.d.mts +520 -0
  277. package/dist/{index-DOaKN0wJ.d.cts → index-D9bKlLiM.d.cts} +2 -22
  278. package/dist/{index-DOaKN0wJ.d.mts → index-D9bKlLiM.d.mts} +2 -22
  279. package/dist/{index-C2KjuFXQ.d.cts → index-DDROD2y9.d.cts} +596 -1117
  280. package/dist/{index-C2KjuFXQ.d.mts → index-DDROD2y9.d.mts} +596 -1117
  281. package/dist/index-DJiiPHPf.d.cts +59 -0
  282. package/dist/index-DJiiPHPf.d.mts +59 -0
  283. package/dist/index-DtIL69PB.d.cts +14 -0
  284. package/dist/index-DtIL69PB.d.mts +14 -0
  285. package/dist/{index-DueBB0rP.d.mts → index-DvoLzsh0.d.mts} +121 -500
  286. package/dist/index-fZChR7MS.d.cts +231 -0
  287. package/dist/index.cjs +1 -1
  288. package/dist/index.d.cts +92 -92
  289. package/dist/index.d.mts +92 -92
  290. package/dist/index.mjs +1 -1
  291. package/dist/indexed-performance-line-chart-CT79KOM6.cjs +2 -0
  292. package/dist/indexed-performance-line-chart-CT79KOM6.cjs.map +1 -0
  293. package/dist/indexed-performance-line-chart-D7F-rIMv.mjs +2 -0
  294. package/dist/indexed-performance-line-chart-D7F-rIMv.mjs.map +1 -0
  295. package/dist/{input-BJMvABEL.d.cts → input-BieGEIDf.d.cts} +2 -2
  296. package/dist/{input-BJMvABEL.d.mts → input-BieGEIDf.d.mts} +2 -2
  297. package/dist/input-otp-6hJfhBHX.d.cts +56 -0
  298. package/dist/input-otp-6hJfhBHX.d.mts +56 -0
  299. package/dist/item-DTR2f2CX.d.cts +99 -0
  300. package/dist/item-cIhkI3ZI.d.mts +99 -0
  301. package/dist/label-DPG_GY7h.d.cts +22 -0
  302. package/dist/label-DPG_GY7h.d.mts +22 -0
  303. package/dist/layouts/cms-layout/index.cjs +1 -1
  304. package/dist/layouts/cms-layout/index.mjs +1 -1
  305. package/dist/layouts/flex.d.cts +2 -114
  306. package/dist/layouts/flex.d.mts +2 -114
  307. package/dist/layouts/grid.d.cts +2 -19
  308. package/dist/layouts/grid.d.mts +2 -19
  309. package/dist/layouts/payment-layout/index.cjs +1 -1
  310. package/dist/layouts/payment-layout/index.d.cts +2 -59
  311. package/dist/layouts/payment-layout/index.d.mts +2 -59
  312. package/dist/layouts/payment-layout/index.mjs +1 -1
  313. package/dist/list-display-BuRCso6J.mjs +2 -0
  314. package/dist/list-display-BuRCso6J.mjs.map +1 -0
  315. package/dist/list-display-DEU6yFa9.cjs +2 -0
  316. package/dist/list-display-DEU6yFa9.cjs.map +1 -0
  317. package/dist/loading-dialog-C73EJx9s.d.cts +19 -0
  318. package/dist/loading-dialog-C73EJx9s.d.mts +19 -0
  319. package/dist/menubar-CFrn3S96.d.cts +133 -0
  320. package/dist/menubar-CFrn3S96.d.mts +133 -0
  321. package/dist/metric-radar-chart-6LTGQHsL.mjs +2 -0
  322. package/dist/metric-radar-chart-6LTGQHsL.mjs.map +1 -0
  323. package/dist/metric-radar-chart-DwgbXgJX.cjs +2 -0
  324. package/dist/metric-radar-chart-DwgbXgJX.cjs.map +1 -0
  325. package/dist/mirrored-bar-chart-BT7AYPJB.mjs +2 -0
  326. package/dist/mirrored-bar-chart-BT7AYPJB.mjs.map +1 -0
  327. package/dist/mirrored-bar-chart-BwjtExjh.cjs +2 -0
  328. package/dist/mirrored-bar-chart-BwjtExjh.cjs.map +1 -0
  329. package/dist/more-button-BKBcXz6E.mjs +2 -0
  330. package/dist/more-button-BKBcXz6E.mjs.map +1 -0
  331. package/dist/more-button-RYvZgYiu.cjs +2 -0
  332. package/dist/more-button-RYvZgYiu.cjs.map +1 -0
  333. package/dist/multi-select-BbiKgAYs.d.cts +116 -0
  334. package/dist/multi-select-BoBHt_Z9.d.mts +116 -0
  335. package/dist/name-7aoM5rAW.d.cts +18 -0
  336. package/dist/name-7aoM5rAW.d.mts +18 -0
  337. package/dist/name-display-B6X52ip_.cjs +2 -0
  338. package/dist/name-display-B6X52ip_.cjs.map +1 -0
  339. package/dist/name-display-DXMZ8Lug.mjs +2 -0
  340. package/dist/name-display-DXMZ8Lug.mjs.map +1 -0
  341. package/dist/navigation-menu-B1BY9Zll.d.cts +73 -0
  342. package/dist/navigation-menu-B1BY9Zll.d.mts +73 -0
  343. package/dist/number-field-BjVjf6s4.mjs +2 -0
  344. package/dist/number-field-BjVjf6s4.mjs.map +1 -0
  345. package/dist/number-field-DmKh7bbY.cjs +2 -0
  346. package/dist/number-field-DmKh7bbY.cjs.map +1 -0
  347. package/dist/number-input-CqkegUWs.mjs +2 -0
  348. package/dist/number-input-CqkegUWs.mjs.map +1 -0
  349. package/dist/number-input-kTh9zzr7.cjs +2 -0
  350. package/dist/number-input-kTh9zzr7.cjs.map +1 -0
  351. package/dist/orders-bar-chart-9RmtP6In.cjs +2 -0
  352. package/dist/orders-bar-chart-9RmtP6In.cjs.map +1 -0
  353. package/dist/orders-bar-chart-DQhJGmwY.mjs +2 -0
  354. package/dist/orders-bar-chart-DQhJGmwY.mjs.map +1 -0
  355. package/dist/pages/FeatureDeveloping.d.cts +2 -41
  356. package/dist/pages/FeatureDeveloping.d.mts +2 -41
  357. package/dist/pages/FeatureFixing.d.cts +2 -41
  358. package/dist/pages/FeatureFixing.d.mts +2 -41
  359. package/dist/pages/LoginPage.cjs +1 -1
  360. package/dist/pages/LoginPage.cjs.map +1 -1
  361. package/dist/pages/LoginPage.d.cts +2 -53
  362. package/dist/pages/LoginPage.d.mts +2 -53
  363. package/dist/pages/LoginPage.mjs +1 -1
  364. package/dist/pages/LoginPage.mjs.map +1 -1
  365. package/dist/pages/NotAuthorized.d.cts +2 -41
  366. package/dist/pages/NotAuthorized.d.mts +2 -41
  367. package/dist/pages/NotFound.d.cts +2 -41
  368. package/dist/pages/NotFound.d.mts +2 -41
  369. package/dist/pages/RegisterPage.cjs +1 -1
  370. package/dist/pages/RegisterPage.cjs.map +1 -1
  371. package/dist/pages/RegisterPage.d.cts +2 -50
  372. package/dist/pages/RegisterPage.d.mts +2 -50
  373. package/dist/pages/RegisterPage.mjs +1 -1
  374. package/dist/pages/RegisterPage.mjs.map +1 -1
  375. package/dist/pages/VerifyEmailPage.d.cts +2 -62
  376. package/dist/pages/VerifyEmailPage.d.mts +2 -62
  377. package/dist/pagination-B2fyP0J2.d.cts +64 -0
  378. package/dist/pagination-DY0PBCnI.d.mts +64 -0
  379. package/dist/paragraph-BTmvVS1S.d.mts +46 -0
  380. package/dist/paragraph-DbYYv0A0.d.cts +46 -0
  381. package/dist/password-field-C5FsQUa8.mjs +2 -0
  382. package/dist/password-field-C5FsQUa8.mjs.map +1 -0
  383. package/dist/password-field-gHYDiXWY.cjs +2 -0
  384. package/dist/password-field-gHYDiXWY.cjs.map +1 -0
  385. package/dist/payment-layout-Cb-Q8KD2.cjs +2 -0
  386. package/dist/{payment-layout-BLrXT-oc.cjs.map → payment-layout-Cb-Q8KD2.cjs.map} +1 -1
  387. package/dist/{payment-layout-Dsz6wYT1.mjs → payment-layout-DS5CEH1h.mjs} +2 -2
  388. package/dist/{payment-layout-Dsz6wYT1.mjs.map → payment-layout-DS5CEH1h.mjs.map} +1 -1
  389. package/dist/permalink-CZ3g9daG.mjs +2 -0
  390. package/dist/permalink-CZ3g9daG.mjs.map +1 -0
  391. package/dist/permalink-DeeEKhfc.cjs +2 -0
  392. package/dist/permalink-DeeEKhfc.cjs.map +1 -0
  393. package/dist/phone-number-6b_pkGI1.d.cts +18 -0
  394. package/dist/phone-number-6b_pkGI1.d.mts +18 -0
  395. package/dist/phone-number-C43z68gT.mjs +2 -0
  396. package/dist/phone-number-C43z68gT.mjs.map +1 -0
  397. package/dist/phone-number-DhThJwd6.cjs +2 -0
  398. package/dist/phone-number-DhThJwd6.cjs.map +1 -0
  399. package/dist/popover-CdOCi0xg.d.cts +50 -0
  400. package/dist/popover-CdOCi0xg.d.mts +50 -0
  401. package/dist/popover-form-B2taDBAh.mjs +2 -0
  402. package/dist/popover-form-B2taDBAh.mjs.map +1 -0
  403. package/dist/popover-form-_hQQpfAB.cjs +2 -0
  404. package/dist/popover-form-_hQQpfAB.cjs.map +1 -0
  405. package/dist/portfolio-allocation-treemap-Bn0X4wb6.cjs +2 -0
  406. package/dist/portfolio-allocation-treemap-Bn0X4wb6.cjs.map +1 -0
  407. package/dist/portfolio-allocation-treemap-Cb9Kidrl.mjs +2 -0
  408. package/dist/portfolio-allocation-treemap-Cb9Kidrl.mjs.map +1 -0
  409. package/dist/price-range-area-chart-BW6RQb_9.cjs +2 -0
  410. package/dist/price-range-area-chart-BW6RQb_9.cjs.map +1 -0
  411. package/dist/price-range-area-chart-Dy01mhWJ.mjs +2 -0
  412. package/dist/price-range-area-chart-Dy01mhWJ.mjs.map +1 -0
  413. package/dist/product-card-CvXLXbpV.d.cts +30 -0
  414. package/dist/product-card-CvXLXbpV.d.mts +30 -0
  415. package/dist/progress-Bp-5keO8.d.cts +21 -0
  416. package/dist/progress-Bp-5keO8.d.mts +21 -0
  417. package/dist/progress-display-Bp0xVhln.cjs +2 -0
  418. package/dist/progress-display-Bp0xVhln.cjs.map +1 -0
  419. package/dist/progress-display-DYj7vAe9.mjs +2 -0
  420. package/dist/progress-display-DYj7vAe9.mjs.map +1 -0
  421. package/dist/radio-group-field-McpjpLW-.cjs +2 -0
  422. package/dist/radio-group-field-McpjpLW-.cjs.map +1 -0
  423. package/dist/radio-group-field-ZqMrf9Dx.mjs +2 -0
  424. package/dist/radio-group-field-ZqMrf9Dx.mjs.map +1 -0
  425. package/dist/radio-group-ycQQrPGn.d.cts +35 -0
  426. package/dist/radio-group-ycQQrPGn.d.mts +35 -0
  427. package/dist/refresh-BiyrZAXL.d.cts +16 -0
  428. package/dist/refresh-BiyrZAXL.d.mts +16 -0
  429. package/dist/remove-button-B3qFw-M5.cjs +2 -0
  430. package/dist/remove-button-B3qFw-M5.cjs.map +1 -0
  431. package/dist/remove-button-Db5oSj4h.mjs +2 -0
  432. package/dist/remove-button-Db5oSj4h.mjs.map +1 -0
  433. package/dist/{resizable-BLfxHCf4.d.cts → resizable-CAyWR1At.d.cts} +2 -2
  434. package/dist/{resizable-BLfxHCf4.d.mts → resizable-CAyWR1At.d.mts} +2 -2
  435. package/dist/revenue-area-chart-BwzeTRzD.mjs +2 -0
  436. package/dist/revenue-area-chart-BwzeTRzD.mjs.map +1 -0
  437. package/dist/revenue-area-chart-w2FZCl_7.cjs +2 -0
  438. package/dist/revenue-area-chart-w2FZCl_7.cjs.map +1 -0
  439. package/dist/revenue-orders-composed-chart-BttOWYGt.cjs +2 -0
  440. package/dist/revenue-orders-composed-chart-BttOWYGt.cjs.map +1 -0
  441. package/dist/revenue-orders-composed-chart-DwkbWZSX.mjs +2 -0
  442. package/dist/revenue-orders-composed-chart-DwkbWZSX.mjs.map +1 -0
  443. package/dist/role-badge-Bl4Rimpk.d.mts +21 -0
  444. package/dist/role-badge-IdZW0tsN.d.cts +21 -0
  445. package/dist/sales-target-radial-chart-BFLxBT2m.mjs +2 -0
  446. package/dist/sales-target-radial-chart-BFLxBT2m.mjs.map +1 -0
  447. package/dist/sales-target-radial-chart-BoxSk7hW.cjs +2 -0
  448. package/dist/sales-target-radial-chart-BoxSk7hW.cjs.map +1 -0
  449. package/dist/sankey-flow-chart-CDUqIRMZ.cjs +2 -0
  450. package/dist/sankey-flow-chart-CDUqIRMZ.cjs.map +1 -0
  451. package/dist/sankey-flow-chart-bQ3Dffet.mjs +2 -0
  452. package/dist/sankey-flow-chart-bQ3Dffet.mjs.map +1 -0
  453. package/dist/scroll-area-PbkqIAaH.d.cts +35 -0
  454. package/dist/scroll-area-PbkqIAaH.d.mts +35 -0
  455. package/dist/search-input-Bq4enQzR.d.cts +27 -0
  456. package/dist/search-input-D51_mAY-.d.mts +27 -0
  457. package/dist/section-form-B9iTs2we.cjs +2 -0
  458. package/dist/section-form-B9iTs2we.cjs.map +1 -0
  459. package/dist/section-form-B_AZr7jZ.mjs +2 -0
  460. package/dist/section-form-B_AZr7jZ.mjs.map +1 -0
  461. package/dist/select-B5j4WvPM.d.cts +74 -0
  462. package/dist/select-B5j4WvPM.d.mts +74 -0
  463. package/dist/select-field-DG8sQ5iN.cjs +2 -0
  464. package/dist/select-field-DG8sQ5iN.cjs.map +1 -0
  465. package/dist/select-field-Kq5iQCRQ.mjs +2 -0
  466. package/dist/select-field-Kq5iQCRQ.mjs.map +1 -0
  467. package/dist/separator-BlNAFSJv.mjs +2 -0
  468. package/dist/separator-BlNAFSJv.mjs.map +1 -0
  469. package/dist/separator-D6_fMJtM.d.cts +32 -0
  470. package/dist/separator-D6_fMJtM.d.mts +32 -0
  471. package/dist/separator-sBz__BXC.cjs +2 -0
  472. package/dist/separator-sBz__BXC.cjs.map +1 -0
  473. package/dist/sheet-cHLLSvvt.d.cts +66 -0
  474. package/dist/sheet-cHLLSvvt.d.mts +66 -0
  475. package/dist/sidebar-core-Bh0dZXsm.mjs +2 -0
  476. package/dist/sidebar-core-Bh0dZXsm.mjs.map +1 -0
  477. package/dist/sidebar-core-DQE6ymo4.cjs +2 -0
  478. package/dist/sidebar-core-DQE6ymo4.cjs.map +1 -0
  479. package/dist/simple-array-field-4paKpxXk.cjs +2 -0
  480. package/dist/simple-array-field-4paKpxXk.cjs.map +1 -0
  481. package/dist/simple-array-field-C5XdemXa.mjs +2 -0
  482. package/dist/simple-array-field-C5XdemXa.mjs.map +1 -0
  483. package/dist/simple-boolean-field-B9T_fHk9.cjs +2 -0
  484. package/dist/simple-boolean-field-B9T_fHk9.cjs.map +1 -0
  485. package/dist/simple-boolean-field-DpJ-fSQk.mjs +2 -0
  486. package/dist/simple-boolean-field-DpJ-fSQk.mjs.map +1 -0
  487. package/dist/simple-card-6P377r4A.d.cts +29 -0
  488. package/dist/simple-card-6P377r4A.d.mts +29 -0
  489. package/dist/simple-combobox-field-Ch4SBHCH.mjs +2 -0
  490. package/dist/simple-combobox-field-Ch4SBHCH.mjs.map +1 -0
  491. package/dist/simple-combobox-field-ChMKk7xp.cjs +2 -0
  492. package/dist/simple-combobox-field-ChMKk7xp.cjs.map +1 -0
  493. package/dist/simple-date-field-BGGlsHzG.cjs +2 -0
  494. package/dist/simple-date-field-BGGlsHzG.cjs.map +1 -0
  495. package/dist/simple-date-field-CVKqIrEs.mjs +2 -0
  496. package/dist/simple-date-field-CVKqIrEs.mjs.map +1 -0
  497. package/dist/simple-email-field-98w0846B.mjs +2 -0
  498. package/dist/simple-email-field-98w0846B.mjs.map +1 -0
  499. package/dist/simple-email-field-DYqCWprP.cjs +2 -0
  500. package/dist/simple-email-field-DYqCWprP.cjs.map +1 -0
  501. package/dist/simple-number-field-otvv2xq-.cjs +2 -0
  502. package/dist/simple-number-field-otvv2xq-.cjs.map +1 -0
  503. package/dist/simple-number-field-zF3oqS8d.mjs +2 -0
  504. package/dist/simple-number-field-zF3oqS8d.mjs.map +1 -0
  505. package/dist/simple-password-field-CuC10c70.mjs +2 -0
  506. package/dist/simple-password-field-CuC10c70.mjs.map +1 -0
  507. package/dist/simple-password-field-D2UMmghM.cjs +2 -0
  508. package/dist/simple-password-field-D2UMmghM.cjs.map +1 -0
  509. package/dist/simple-radio-group-field-C2DDfIUs.cjs +2 -0
  510. package/dist/simple-radio-group-field-C2DDfIUs.cjs.map +1 -0
  511. package/dist/simple-radio-group-field-CfziNlLf.mjs +2 -0
  512. package/dist/simple-radio-group-field-CfziNlLf.mjs.map +1 -0
  513. package/dist/simple-select-field-CeNnXUHN.cjs +2 -0
  514. package/dist/simple-select-field-CeNnXUHN.cjs.map +1 -0
  515. package/dist/simple-select-field-DIaxhi1-.mjs +2 -0
  516. package/dist/simple-select-field-DIaxhi1-.mjs.map +1 -0
  517. package/dist/simple-text-field-D8jyznSd.mjs +2 -0
  518. package/dist/simple-text-field-D8jyznSd.mjs.map +1 -0
  519. package/dist/simple-text-field-LYWVIAfQ.cjs +2 -0
  520. package/dist/simple-text-field-LYWVIAfQ.cjs.map +1 -0
  521. package/dist/simple-textarea-field-DcEvaizE.cjs +2 -0
  522. package/dist/simple-textarea-field-DcEvaizE.cjs.map +1 -0
  523. package/dist/simple-textarea-field-p9qX_n7m.mjs +2 -0
  524. package/dist/simple-textarea-field-p9qX_n7m.mjs.map +1 -0
  525. package/dist/skeleton-Ct4sYEKk.d.cts +24 -0
  526. package/dist/skeleton-Ct4sYEKk.d.mts +24 -0
  527. package/dist/slider-DwR1MhR8.d.cts +24 -0
  528. package/dist/slider-DwR1MhR8.d.mts +24 -0
  529. package/dist/sonner-B6LxJMYT.d.mts +22 -0
  530. package/dist/sonner-BcNgR0GP.d.cts +22 -0
  531. package/dist/sparkline-chart-TbGzakUl.mjs +2 -0
  532. package/dist/sparkline-chart-TbGzakUl.mjs.map +1 -0
  533. package/dist/sparkline-chart-sPqaJHep.cjs +2 -0
  534. package/dist/sparkline-chart-sPqaJHep.cjs.map +1 -0
  535. package/dist/spinner-CXuqcoB5.d.cts +22 -0
  536. package/dist/spinner-CXuqcoB5.d.mts +22 -0
  537. package/dist/stacked-area-chart-DyxY96_l.cjs +2 -0
  538. package/dist/stacked-area-chart-DyxY96_l.cjs.map +1 -0
  539. package/dist/stacked-area-chart-UIWIxTmq.mjs +2 -0
  540. package/dist/stacked-area-chart-UIWIxTmq.mjs.map +1 -0
  541. package/dist/statistic-8zBJMdRa.d.cts +45 -0
  542. package/dist/statistic-8zBJMdRa.d.mts +45 -0
  543. package/dist/statistic-BUGIRhL9.cjs +2 -0
  544. package/dist/statistic-BUGIRhL9.cjs.map +1 -0
  545. package/dist/statistic-Ug9Zgi3N.mjs +2 -0
  546. package/dist/statistic-Ug9Zgi3N.mjs.map +1 -0
  547. package/dist/status-display-B-6KKttX.mjs +2 -0
  548. package/dist/status-display-B-6KKttX.mjs.map +1 -0
  549. package/dist/status-display-DkI9UwAu.cjs +2 -0
  550. package/dist/status-display-DkI9UwAu.cjs.map +1 -0
  551. package/dist/submit-button-CGBaPzE9.mjs +2 -0
  552. package/dist/submit-button-CGBaPzE9.mjs.map +1 -0
  553. package/dist/submit-button-CvINfld5.cjs +2 -0
  554. package/dist/submit-button-CvINfld5.cjs.map +1 -0
  555. package/dist/summary-bar-CZHeAORf.mjs +2 -0
  556. package/dist/summary-bar-CZHeAORf.mjs.map +1 -0
  557. package/dist/summary-bar-DTFVpBZn.cjs +2 -0
  558. package/dist/summary-bar-DTFVpBZn.cjs.map +1 -0
  559. package/dist/switch-9v4AYqJb.d.cts +24 -0
  560. package/dist/switch-9v4AYqJb.d.mts +24 -0
  561. package/dist/switch-field-CIoNsRWN.mjs +2 -0
  562. package/dist/switch-field-CIoNsRWN.mjs.map +1 -0
  563. package/dist/switch-field-n6a5SaEM.cjs +2 -0
  564. package/dist/switch-field-n6a5SaEM.cjs.map +1 -0
  565. package/dist/systems/google.d.cts +2 -48
  566. package/dist/systems/google.d.mts +2 -48
  567. package/dist/table-Dg2D0v87.d.cts +70 -0
  568. package/dist/table-Dg2D0v87.d.mts +70 -0
  569. package/dist/tables-7aC9WFs9.cjs +2 -0
  570. package/dist/tables-7aC9WFs9.cjs.map +1 -0
  571. package/dist/tables-UikqnT9q.mjs +2 -0
  572. package/dist/tables-UikqnT9q.mjs.map +1 -0
  573. package/dist/tabs-CJ6qZcFU.d.cts +42 -0
  574. package/dist/tabs-CJ6qZcFU.d.mts +42 -0
  575. package/dist/tanstack-form-CNrZQZhn.cjs +2 -0
  576. package/dist/tanstack-form-CNrZQZhn.cjs.map +1 -0
  577. package/dist/tanstack-form-PC9YNeeo.mjs +2 -0
  578. package/dist/tanstack-form-PC9YNeeo.mjs.map +1 -0
  579. package/dist/text-editor-BYE2-G5K.mjs +2 -0
  580. package/dist/text-editor-BYE2-G5K.mjs.map +1 -0
  581. package/dist/text-editor-CfQk5dIx.cjs +2 -0
  582. package/dist/text-editor-CfQk5dIx.cjs.map +1 -0
  583. package/dist/text-editor-field-fso-sw29.mjs +2 -0
  584. package/dist/text-editor-field-fso-sw29.mjs.map +1 -0
  585. package/dist/text-editor-field-gas5r-xy.cjs +2 -0
  586. package/dist/text-editor-field-gas5r-xy.cjs.map +1 -0
  587. package/dist/text-field-B67oTV62.mjs +2 -0
  588. package/dist/text-field-B67oTV62.mjs.map +1 -0
  589. package/dist/text-field-BMo-8rsq.cjs +2 -0
  590. package/dist/text-field-BMo-8rsq.cjs.map +1 -0
  591. package/dist/textarea-C8ZIZh-y.d.cts +26 -0
  592. package/dist/textarea-C8ZIZh-y.d.mts +26 -0
  593. package/dist/textarea-field-BUGcITwp.cjs +2 -0
  594. package/dist/textarea-field-BUGcITwp.cjs.map +1 -0
  595. package/dist/textarea-field-D70rGYIk.mjs +2 -0
  596. package/dist/textarea-field-D70rGYIk.mjs.map +1 -0
  597. package/dist/title-BT9guhSU.d.cts +41 -0
  598. package/dist/title-BT9guhSU.d.mts +41 -0
  599. package/dist/title-field-84EnHPvl.mjs +2 -0
  600. package/dist/title-field-84EnHPvl.mjs.map +1 -0
  601. package/dist/title-field-CKxwzMOM.cjs +2 -0
  602. package/dist/title-field-CKxwzMOM.cjs.map +1 -0
  603. package/dist/toggle-Bh4EazxT.d.cts +30 -0
  604. package/dist/toggle-Bh4EazxT.d.mts +30 -0
  605. package/dist/toggle-button-DNLtfjJC.mjs +2 -0
  606. package/dist/toggle-button-DNLtfjJC.mjs.map +1 -0
  607. package/dist/toggle-button-Dq78v8cH.cjs +2 -0
  608. package/dist/toggle-button-Dq78v8cH.cjs.map +1 -0
  609. package/dist/toggle-group-BpqkL1ds.d.cts +37 -0
  610. package/dist/toggle-group-DzNE38v5.d.mts +37 -0
  611. package/dist/tooltip-B-yLj6pe.mjs +4 -0
  612. package/dist/tooltip-B-yLj6pe.mjs.map +1 -0
  613. package/dist/tooltip-D4U-RhIu.d.cts +53 -0
  614. package/dist/tooltip-D4U-RhIu.d.mts +53 -0
  615. package/dist/tooltip-octglTPf.cjs +4 -0
  616. package/dist/tooltip-octglTPf.cjs.map +1 -0
  617. package/dist/top-products-bar-chart-5EJFSkeo.cjs +2 -0
  618. package/dist/top-products-bar-chart-5EJFSkeo.cjs.map +1 -0
  619. package/dist/top-products-bar-chart-CKYaOGWT.mjs +2 -0
  620. package/dist/top-products-bar-chart-CKYaOGWT.mjs.map +1 -0
  621. package/dist/trash-BfWSqlL4.d.cts +16 -0
  622. package/dist/trash-BfWSqlL4.d.mts +16 -0
  623. package/dist/typography/paragraph.d.cts +2 -46
  624. package/dist/typography/paragraph.d.mts +2 -46
  625. package/dist/typography/title.d.cts +2 -41
  626. package/dist/typography/title.d.mts +2 -41
  627. package/dist/ui/alert-dialog.d.cts +2 -88
  628. package/dist/ui/alert-dialog.d.mts +2 -88
  629. package/dist/ui/aspect-ratio.d.cts +2 -22
  630. package/dist/ui/aspect-ratio.d.mts +2 -22
  631. package/dist/ui/avatar.d.cts +2 -33
  632. package/dist/ui/avatar.d.mts +2 -33
  633. package/dist/ui/badge.cjs +1 -1
  634. package/dist/ui/badge.cjs.map +1 -1
  635. package/dist/ui/badge.d.cts +1 -1
  636. package/dist/ui/badge.d.mts +1 -1
  637. package/dist/ui/badge.mjs +1 -1
  638. package/dist/ui/badge.mjs.map +1 -1
  639. package/dist/ui/breadcrumb.d.cts +2 -69
  640. package/dist/ui/breadcrumb.d.mts +2 -69
  641. package/dist/ui/button-group.d.cts +2 -48
  642. package/dist/ui/button-group.d.mts +2 -48
  643. package/dist/ui/button.d.cts +1 -1
  644. package/dist/ui/button.d.mts +1 -1
  645. package/dist/ui/buttons/add-new.d.cts +2 -16
  646. package/dist/ui/buttons/add-new.d.mts +2 -16
  647. package/dist/ui/buttons/edit.d.cts +2 -16
  648. package/dist/ui/buttons/edit.d.mts +2 -16
  649. package/dist/ui/buttons/refresh.d.cts +2 -16
  650. package/dist/ui/buttons/refresh.d.mts +2 -16
  651. package/dist/ui/buttons/trash.d.cts +2 -16
  652. package/dist/ui/buttons/trash.d.mts +2 -16
  653. package/dist/ui/buttons/upload-image.d.cts +2 -23
  654. package/dist/ui/buttons/upload-image.d.mts +2 -23
  655. package/dist/ui/calendar.d.cts +2 -43
  656. package/dist/ui/calendar.d.mts +2 -43
  657. package/dist/ui/card.d.cts +2 -60
  658. package/dist/ui/card.d.mts +2 -60
  659. package/dist/ui/carousel.d.cts +2 -70
  660. package/dist/ui/carousel.d.mts +2 -70
  661. package/dist/ui/chart.d.cts +2 -80
  662. package/dist/ui/chart.d.mts +2 -80
  663. package/dist/ui/checkbox.d.cts +2 -24
  664. package/dist/ui/checkbox.d.mts +2 -24
  665. package/dist/ui/collapsible.d.cts +2 -32
  666. package/dist/ui/collapsible.d.mts +2 -32
  667. package/dist/ui/command.d.cts +2 -87
  668. package/dist/ui/command.d.mts +2 -87
  669. package/dist/ui/context-menu.d.cts +2 -123
  670. package/dist/ui/context-menu.d.mts +2 -123
  671. package/dist/ui/drawer.d.cts +2 -70
  672. package/dist/ui/drawer.d.mts +2 -70
  673. package/dist/ui/dropdown-menu.d.cts +2 -125
  674. package/dist/ui/dropdown-menu.d.mts +2 -125
  675. package/dist/ui/empty.d.cts +2 -65
  676. package/dist/ui/empty.d.mts +2 -65
  677. package/dist/ui/field.d.cts +1 -1
  678. package/dist/ui/field.d.mts +1 -1
  679. package/dist/ui/file-uploader.d.cts +2 -101
  680. package/dist/ui/file-uploader.d.mts +2 -101
  681. package/dist/ui/form.d.cts +2 -109
  682. package/dist/ui/form.d.mts +2 -109
  683. package/dist/ui/hover-card.d.cts +2 -35
  684. package/dist/ui/hover-card.d.mts +2 -35
  685. package/dist/ui/image.d.cts +2 -27
  686. package/dist/ui/image.d.mts +2 -27
  687. package/dist/ui/input-otp.d.cts +2 -56
  688. package/dist/ui/input-otp.d.mts +2 -56
  689. package/dist/ui/input.d.cts +1 -1
  690. package/dist/ui/input.d.mts +1 -1
  691. package/dist/ui/inputs/search-input.d.cts +2 -27
  692. package/dist/ui/inputs/search-input.d.mts +2 -27
  693. package/dist/ui/item.d.cts +2 -99
  694. package/dist/ui/item.d.mts +2 -99
  695. package/dist/ui/label.d.cts +2 -22
  696. package/dist/ui/label.d.mts +2 -22
  697. package/dist/ui/menubar.d.cts +2 -133
  698. package/dist/ui/menubar.d.mts +2 -133
  699. package/dist/ui/multi-select.d.cts +2 -116
  700. package/dist/ui/multi-select.d.mts +2 -116
  701. package/dist/ui/navigation-menu.d.cts +2 -73
  702. package/dist/ui/navigation-menu.d.mts +2 -73
  703. package/dist/ui/pagination.d.cts +2 -64
  704. package/dist/ui/pagination.d.mts +2 -64
  705. package/dist/ui/popover.d.cts +2 -50
  706. package/dist/ui/popover.d.mts +2 -50
  707. package/dist/ui/progress.d.cts +2 -21
  708. package/dist/ui/progress.d.mts +2 -21
  709. package/dist/ui/radio-group.d.cts +2 -35
  710. package/dist/ui/radio-group.d.mts +2 -35
  711. package/dist/ui/resizable.d.cts +1 -1
  712. package/dist/ui/resizable.d.mts +1 -1
  713. package/dist/ui/scroll-area.d.cts +2 -35
  714. package/dist/ui/scroll-area.d.mts +2 -35
  715. package/dist/ui/select.d.cts +2 -74
  716. package/dist/ui/select.d.mts +2 -74
  717. package/dist/ui/separator.d.cts +2 -32
  718. package/dist/ui/separator.d.mts +2 -32
  719. package/dist/ui/sheet.d.cts +2 -66
  720. package/dist/ui/sheet.d.mts +2 -66
  721. package/dist/ui/skeleton.d.cts +2 -24
  722. package/dist/ui/skeleton.d.mts +2 -24
  723. package/dist/ui/slider.d.cts +2 -24
  724. package/dist/ui/slider.d.mts +2 -24
  725. package/dist/ui/sonner.d.cts +2 -22
  726. package/dist/ui/sonner.d.mts +2 -22
  727. package/dist/ui/spinner.d.cts +2 -22
  728. package/dist/ui/spinner.d.mts +2 -22
  729. package/dist/ui/switch.d.cts +2 -24
  730. package/dist/ui/switch.d.mts +2 -24
  731. package/dist/ui/table.d.cts +2 -70
  732. package/dist/ui/table.d.mts +2 -70
  733. package/dist/ui/tabs.d.cts +2 -42
  734. package/dist/ui/tabs.d.mts +2 -42
  735. package/dist/ui/textarea.d.cts +2 -26
  736. package/dist/ui/textarea.d.mts +2 -26
  737. package/dist/ui/toggle-group.d.cts +2 -37
  738. package/dist/ui/toggle-group.d.mts +2 -37
  739. package/dist/ui/toggle.d.cts +2 -30
  740. package/dist/ui/toggle.d.mts +2 -30
  741. package/dist/ui/tooltip.d.cts +2 -53
  742. package/dist/ui/tooltip.d.mts +2 -53
  743. package/dist/upload-image-D4VZU3IA.d.cts +23 -0
  744. package/dist/upload-image-D4VZU3IA.d.mts +23 -0
  745. package/dist/user-BymzvsYp.mjs +2 -0
  746. package/dist/user-BymzvsYp.mjs.map +1 -0
  747. package/dist/user-CvesQf42.d.cts +20 -0
  748. package/dist/user-CvesQf42.d.mts +20 -0
  749. package/dist/user-Dn53Fu5q.cjs +2 -0
  750. package/dist/user-Dn53Fu5q.cjs.map +1 -0
  751. package/dist/volume-bar-chart-BRpC_8-X.mjs +2 -0
  752. package/dist/volume-bar-chart-BRpC_8-X.mjs.map +1 -0
  753. package/dist/volume-bar-chart-CRxZPZIn.cjs +2 -0
  754. package/dist/volume-bar-chart-CRxZPZIn.cjs.map +1 -0
  755. package/dist/waterfall-chart-CTB2f5eh.cjs +2 -0
  756. package/dist/waterfall-chart-CTB2f5eh.cjs.map +1 -0
  757. package/dist/waterfall-chart-DwetaJFJ.mjs +2 -0
  758. package/dist/waterfall-chart-DwetaJFJ.mjs.map +1 -0
  759. package/package.json +1 -5
  760. package/dist/payment-layout-BLrXT-oc.cjs +0 -2
  761. package/dist/tables-B0Jl8Osc.cjs +0 -4
  762. package/dist/tables-B0Jl8Osc.cjs.map +0 -1
  763. package/dist/tables-Cylalxey.mjs +0 -4
  764. package/dist/tables-Cylalxey.mjs.map +0 -1
  765. package/dist/tanstack-form-BMVn8ai_.cjs +0 -2
  766. package/dist/tanstack-form-BMVn8ai_.cjs.map +0 -1
  767. package/dist/tanstack-form-DTCgWGCA.mjs +0 -2
  768. package/dist/tanstack-form-DTCgWGCA.mjs.map +0 -1
  769. package/dist/text-editor-BQtIXOpM.mjs +0 -2
  770. package/dist/text-editor-BQtIXOpM.mjs.map +0 -1
  771. package/dist/text-editor-DJYQXXtP.cjs +0 -2
  772. package/dist/text-editor-DJYQXXtP.cjs.map +0 -1
@@ -0,0 +1,74 @@
1
+ import { Select } from "radix-ui";
2
+
3
+ //#region packages/components/ui/select.d.ts
4
+ /**
5
+ * Accessible dropdown select built on Radix UI's Select primitives, composed from `Select`, `SelectTrigger`, `SelectContent`, and `SelectItem`.
6
+ *
7
+ * @example
8
+ * ```tsx
9
+ * import {
10
+ * Select, SelectTrigger, SelectValue,
11
+ * SelectContent, SelectItem,
12
+ * } from '@customafk/lunas-ui/ui/select';
13
+ *
14
+ * <Select>
15
+ * <SelectTrigger>
16
+ * <SelectValue placeholder="Pick a fruit" />
17
+ * </SelectTrigger>
18
+ * <SelectContent>
19
+ * <SelectItem value="apple">Apple</SelectItem>
20
+ * <SelectItem value="banana">Banana</SelectItem>
21
+ * </SelectContent>
22
+ * </Select>
23
+ * ```
24
+ */
25
+ declare function Select$1({
26
+ ...props
27
+ }: React.ComponentProps<typeof Select.Root>): import("react").JSX.Element;
28
+ /** Groups related `SelectItem` elements with an optional `SelectLabel` header. */
29
+ declare function SelectGroup({
30
+ ...props
31
+ }: React.ComponentProps<typeof Select.Group>): import("react").JSX.Element;
32
+ /** Renders the currently selected value (or a placeholder) inside `SelectTrigger`. */
33
+ declare function SelectValue({
34
+ ...props
35
+ }: React.ComponentProps<typeof Select.Value>): import("react").JSX.Element;
36
+ /**
37
+ * The button that opens the select dropdown; renders the current value and a chevron icon.
38
+ *
39
+ * @param size - `'default'` (standard padding) or `'sm'` (compact).
40
+ */
41
+ declare function SelectTrigger({
42
+ className,
43
+ size,
44
+ children,
45
+ ...props
46
+ }: React.ComponentProps<typeof Select.Trigger> & {
47
+ /** Controls the trigger's padding — `'default'` or `'sm'`. */size?: 'sm' | 'default';
48
+ }): import("react").JSX.Element;
49
+ /** Floating dropdown panel that renders inside a portal with enter/exit animations. */
50
+ declare function SelectContent({
51
+ className,
52
+ children,
53
+ position,
54
+ ...props
55
+ }: React.ComponentProps<typeof Select.Content>): import("react").JSX.Element;
56
+ /** Non-interactive label displayed above a `SelectGroup` to describe its options. */
57
+ declare function SelectLabel({
58
+ className,
59
+ ...props
60
+ }: React.ComponentProps<typeof Select.Label>): import("react").JSX.Element;
61
+ /** A selectable option within `SelectContent`; shows a check icon when chosen. */
62
+ declare function SelectItem({
63
+ className,
64
+ children,
65
+ ...props
66
+ }: React.ComponentProps<typeof Select.Item>): import("react").JSX.Element;
67
+ /** Thin horizontal rule used to visually separate groups of `SelectItem` elements. */
68
+ declare function SelectSeparator({
69
+ className,
70
+ ...props
71
+ }: React.ComponentProps<typeof Select.Separator>): import("react").JSX.Element;
72
+ //#endregion
73
+ export { SelectLabel as a, SelectValue as c, SelectItem as i, SelectContent as n, SelectSeparator as o, SelectGroup as r, SelectTrigger as s, Select$1 as t };
74
+ //# sourceMappingURL=select-B5j4WvPM.d.mts.map
@@ -0,0 +1,2 @@
1
+ const e=require("./ui/dialog.cjs"),t=require("./tanstack-form-CNrZQZhn.cjs"),n=require("./ui/select.cjs"),r=require("./field-BV5twmKA.cjs");let i=require("lucide-react"),a=require("react"),o=require("@customafk/react-toolkit/utils"),s=require("react/jsx-runtime"),c=require("radix-ui"),l=require("@customafk/react-toolkit/hooks/useMobile"),u=require("@tanstack/react-form");const d=(0,a.memo)(({label:d,description:f,placeholder:p,orientation:m=`responsive`,tooltip:h,options:g,helperText:_,clearable:v=!1,required:y=!1,disabled:b=!1,showErrorMessage:x=!0})=>{let S=(0,a.useId)(),C=t.G(),w=(0,l.useIsMobile)(),[T,E]=(0,a.useState)(!1),D=(0,u.useStore)(C.form.store,({isSubmitting:e})=>e),O=b||D,k=C.state.meta.isDirty||C.state.meta.isTouched,A=k&&!C.state.meta.isValid,j=y&&C.state.value===null,M=v&&!!C.state.value&&!O,N=g.find(e=>e.value===C.state.value)?.label,P=()=>{C.handleChange(null),C.handleBlur()};return(0,s.jsxs)(r.FieldGroup,{className:`gap-y-4 px-4`,children:[(0,s.jsxs)(r.Field,{orientation:m,"data-invalid":A,children:[(0,s.jsxs)(r.FieldContent,{children:[(0,s.jsxs)(r.FieldLabel,{htmlFor:C.name,"aria-required":j,children:[d,h&&(0,s.jsx)(r.FieldTooltip,{tooltip:h})]}),(0,s.jsx)(r.FieldDescription,{children:f})]}),(0,s.jsxs)(r.FieldContentMain,{className:`flex flex-col`,children:[w?(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)(`button`,{id:C.name,type:`button`,disabled:O,"aria-invalid":A?`true`:void 0,"aria-describedby":S,onBlur:C.handleBlur,onClick:()=>E(!0),className:(0,o.cn)(`flex w-full items-center justify-between`,`outline-1 outline-border -outline-offset-1`,`gap-2 rounded bg-transparent px-3 py-2`,`shadow-input transition-all cursor-pointer whitespace-nowrap text-sm`,`focus-visible:outline-primary-strong focus-visible:ring-4 focus-visible:ring-primary-weak`,`disabled:cursor-not-allowed disabled:opacity-50`,A&&`outline-danger bg-danger-bg-subtle ring-danger-weak`,!C.state.value&&`text-text-positive-muted`),children:[(0,s.jsx)(`span`,{className:`line-clamp-1`,children:N??p}),(0,s.jsx)(i.ChevronDownIcon,{size:16,className:`shrink-0 opacity-50`})]}),(0,s.jsx)(e.Dialog,{open:T,onOpenChange:e=>{E(e),e||C.handleBlur()},children:(0,s.jsxs)(e.DialogPortal,{children:[(0,s.jsx)(e.DialogOverlay,{}),(0,s.jsxs)(c.Dialog.Content,{onOpenAutoFocus:e=>e.preventDefault(),className:(0,o.cn)(`fixed inset-x-0 bottom-0 z-50`,`flex flex-col bg-background rounded-t-2xl outline-none`,`max-h-[80dvh] shadow-[0_-4px_24px_rgba(0,0,0,0.08)]`,`data-[state=open]:animate-in data-[state=open]:slide-in-from-bottom data-[state=open]:fade-in-0`,`data-[state=closed]:animate-out data-[state=closed]:slide-out-to-bottom data-[state=closed]:fade-out-0`,`duration-300`),children:[(0,s.jsxs)(`div`,{className:`flex items-center justify-between px-4 py-3 border-b border-border shrink-0`,children:[(0,s.jsx)(`span`,{className:`font-semibold text-sm text-text-positive`,children:d??p??`Chọn một tùy chọn`}),(0,s.jsx)(e.DialogClose,{asChild:!0,children:(0,s.jsx)(`button`,{type:`button`,"aria-label":`Đóng`,className:`flex size-7 items-center justify-center rounded-md text-text-positive-weak transition-colors hover:bg-muted-muted hover:text-text-positive`,children:(0,s.jsx)(i.XIcon,{size:16})})})]}),(0,s.jsxs)(`div`,{className:`flex flex-col overflow-y-auto`,children:[M&&(0,s.jsx)(e.DialogClose,{asChild:!0,children:(0,s.jsxs)(`button`,{type:`button`,className:`flex w-full items-center gap-x-2 px-4 py-3 text-left text-sm text-danger-strong transition-colors hover:bg-danger-bg-subtle`,onClick:P,children:[(0,s.jsx)(i.XIcon,{size:14}),`Xóa lựa chọn`]})}),g.length>0?g.map(t=>(0,s.jsx)(e.DialogClose,{asChild:!0,children:(0,s.jsx)(`button`,{type:`button`,className:(0,o.cn)(`flex w-full items-center px-4 py-3 text-left text-sm transition-colors`,`hover:bg-muted-muted active:bg-muted-muted`,C.state.value===t.value&&`bg-primary-bg-subtle font-medium text-primary`),onClick:()=>{C.handleChange(t.value),C.handleBlur()},children:t.label})},t.value)):(0,s.jsxs)(`div`,{className:`flex items-center justify-center gap-x-2 px-4 py-8 text-center text-sm text-text-positive-weak`,children:[(0,s.jsx)(i.PackagePlusIcon,{strokeWidth:1}),`Không có tùy chọn`]})]}),(0,s.jsx)(`div`,{className:`shrink-0 h-safe-bottom`})]})]})})]}):(0,s.jsxs)(`div`,{className:`relative`,children:[(0,s.jsxs)(n.Select,{value:C.state.value??``,disabled:O,onValueChange:C.handleChange,children:[(0,s.jsx)(n.SelectTrigger,{"aria-invalid":A?`true`:void 0,"aria-describedby":S,onBlur:C.handleBlur,children:(0,s.jsx)(n.SelectValue,{placeholder:p})}),(0,s.jsx)(n.SelectContent,{children:g.length>0?g.map(e=>(0,s.jsx)(n.SelectItem,{value:e.value,children:e.label},e.value)):(0,s.jsxs)(`div`,{className:`flex items-center justify-center gap-x-2 rounded border border-border bg-muted-muted px-4 py-6.5 text-center text-sm text-text-positive-weak`,children:[(0,s.jsx)(i.PackagePlusIcon,{strokeWidth:1}),`No options available`]})})]}),M&&(0,s.jsx)(`button`,{type:`button`,"aria-label":`Xóa lựa chọn`,className:`absolute right-7 top-1/2 -translate-y-1/2 flex size-4 cursor-pointer items-center justify-center rounded-md text-text-positive-weak outline-none transition-[color,transform] hover:text-text-positive focus-visible:text-primary-strong focus-visible:[&>svg]:scale-125 [&>svg]:size-3.5 [&>svg]:transition-transform`,onClick:P,children:(0,s.jsx)(i.XIcon,{"aria-hidden":`true`})})]}),k&&x&&(0,s.jsx)(r.FieldError,{id:S,className:`mt-1`,errors:C.state.meta.errors}),(0,s.jsx)(r.FieldNote,{isShow:!!_,children:_})]})]}),(0,s.jsx)(r.FieldSeparator,{})]})});d.displayName=`SelectField`,exports.SelectField=d;
2
+ //# sourceMappingURL=select-field-DG8sQ5iN.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"select-field-DG8sQ5iN.cjs","names":["useTanStackFieldContext","FieldGroup","Field","FieldContent","FieldLabel","FieldTooltip","FieldDescription","FieldContentMain","ChevronDownIcon","Dialog","DialogPortal","DialogOverlay","RadixDialog","DialogClose","XIcon","PackagePlusIcon","Select","SelectTrigger","SelectValue","SelectContent","SelectItem","FieldError","FieldNote","FieldSeparator"],"sources":["../packages/components/features/tanstack-form/components/fields/select-field.tsx"],"sourcesContent":["'use client';\n\nimport { memo, useId, useState } from 'react';\n\nimport { useStore } from '@tanstack/react-form';\n\nimport { ChevronDownIcon, PackagePlusIcon, XIcon } from 'lucide-react';\n\nimport { useIsMobile } from '@customafk/react-toolkit/hooks/useMobile';\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Dialog as RadixDialog } from 'radix-ui';\n\nimport { Dialog, DialogClose, DialogOverlay, DialogPortal } from '@/components/ui/dialog';\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select';\n\nimport { useTanStackFieldContext } from '../form-context';\nimport {\n Field,\n FieldContent,\n FieldContentMain,\n FieldDescription,\n FieldError,\n FieldGroup,\n FieldLabel,\n FieldNote,\n FieldSeparator,\n FieldTooltip,\n} from '../ui/field';\n\nimport type { SelectFieldProps as Props } from '../../types';\n\nexport const SelectField = memo<Props>(\n ({\n label,\n description,\n placeholder,\n orientation = 'responsive',\n tooltip,\n options,\n helperText,\n clearable = false,\n required = false,\n disabled = false,\n showErrorMessage = true,\n }) => {\n const errorId = useId();\n const field = useTanStackFieldContext<string | null>();\n const isMobile = useIsMobile();\n const [dialogOpen, setDialogOpen] = useState(false);\n\n const isSubmitting = useStore(field.form.store, ({ isSubmitting }) => isSubmitting);\n const isDisabled = disabled || isSubmitting;\n\n const _touched = field.state.meta.isDirty || field.state.meta.isTouched;\n const _invalid = _touched && !field.state.meta.isValid;\n const _isEmpty = required && field.state.value === null;\n const _showClear = clearable && !!field.state.value && !isDisabled;\n\n const selectedLabel = options.find(o => o.value === field.state.value)?.label;\n\n const onClear = () => {\n field.handleChange(null);\n field.handleBlur();\n };\n\n return (\n <FieldGroup className=\"gap-y-4 px-4\">\n <Field orientation={orientation} data-invalid={_invalid}>\n <FieldContent>\n <FieldLabel htmlFor={field.name} aria-required={_isEmpty}>\n {label}\n {tooltip && <FieldTooltip tooltip={tooltip} />}\n </FieldLabel>\n <FieldDescription>{description}</FieldDescription>\n </FieldContent>\n\n <FieldContentMain className=\"flex flex-col\">\n {isMobile ? (\n <>\n <button\n id={field.name}\n type=\"button\"\n disabled={isDisabled}\n aria-invalid={_invalid ? 'true' : undefined}\n aria-describedby={errorId}\n onBlur={field.handleBlur}\n onClick={() => setDialogOpen(true)}\n className={cn(\n 'flex w-full items-center justify-between',\n 'outline-1 outline-border -outline-offset-1',\n 'gap-2 rounded bg-transparent px-3 py-2',\n 'shadow-input transition-all cursor-pointer whitespace-nowrap text-sm',\n 'focus-visible:outline-primary-strong focus-visible:ring-4 focus-visible:ring-primary-weak',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n _invalid && 'outline-danger bg-danger-bg-subtle ring-danger-weak',\n !field.state.value && 'text-text-positive-muted'\n )}\n >\n <span className=\"line-clamp-1\">{selectedLabel ?? placeholder}</span>\n <ChevronDownIcon size={16} className=\"shrink-0 opacity-50\" />\n </button>\n\n <Dialog\n open={dialogOpen}\n onOpenChange={open => {\n setDialogOpen(open);\n if (!open) field.handleBlur();\n }}\n >\n <DialogPortal>\n <DialogOverlay />\n <RadixDialog.Content\n onOpenAutoFocus={e => e.preventDefault()}\n className={cn(\n 'fixed inset-x-0 bottom-0 z-50',\n 'flex flex-col bg-background rounded-t-2xl outline-none',\n 'max-h-[80dvh] shadow-[0_-4px_24px_rgba(0,0,0,0.08)]',\n 'data-[state=open]:animate-in data-[state=open]:slide-in-from-bottom data-[state=open]:fade-in-0',\n 'data-[state=closed]:animate-out data-[state=closed]:slide-out-to-bottom data-[state=closed]:fade-out-0',\n 'duration-300'\n )}\n >\n <div className=\"flex items-center justify-between px-4 py-3 border-b border-border shrink-0\">\n <span className=\"font-semibold text-sm text-text-positive\">{label ?? placeholder ?? 'Chọn một tùy chọn'}</span>\n <DialogClose asChild>\n <button\n type=\"button\"\n aria-label=\"Đóng\"\n className=\"flex size-7 items-center justify-center rounded-md text-text-positive-weak transition-colors hover:bg-muted-muted hover:text-text-positive\"\n >\n <XIcon size={16} />\n </button>\n </DialogClose>\n </div>\n\n <div className=\"flex flex-col overflow-y-auto\">\n {_showClear && (\n <DialogClose asChild>\n <button\n type=\"button\"\n className=\"flex w-full items-center gap-x-2 px-4 py-3 text-left text-sm text-danger-strong transition-colors hover:bg-danger-bg-subtle\"\n onClick={onClear}\n >\n <XIcon size={14} />\n Xóa lựa chọn\n </button>\n </DialogClose>\n )}\n {options.length > 0 ? (\n options.map(option => (\n <DialogClose key={option.value} asChild>\n <button\n type=\"button\"\n className={cn(\n 'flex w-full items-center px-4 py-3 text-left text-sm transition-colors',\n 'hover:bg-muted-muted active:bg-muted-muted',\n field.state.value === option.value && 'bg-primary-bg-subtle font-medium text-primary'\n )}\n onClick={() => {\n field.handleChange(option.value);\n field.handleBlur();\n }}\n >\n {option.label}\n </button>\n </DialogClose>\n ))\n ) : (\n <div className=\"flex items-center justify-center gap-x-2 px-4 py-8 text-center text-sm text-text-positive-weak\">\n <PackagePlusIcon strokeWidth={1} />\n Không có tùy chọn\n </div>\n )}\n </div>\n\n <div className=\"shrink-0 h-safe-bottom\" />\n </RadixDialog.Content>\n </DialogPortal>\n </Dialog>\n </>\n ) : (\n <div className=\"relative\">\n <Select value={field.state.value ?? ''} disabled={isDisabled} onValueChange={field.handleChange}>\n <SelectTrigger aria-invalid={_invalid ? 'true' : undefined} aria-describedby={errorId} onBlur={field.handleBlur}>\n <SelectValue placeholder={placeholder} />\n </SelectTrigger>\n <SelectContent>\n {options.length > 0 ? (\n options.map(option => (\n <SelectItem key={option.value} value={option.value}>\n {option.label}\n </SelectItem>\n ))\n ) : (\n <div className=\"flex items-center justify-center gap-x-2 rounded border border-border bg-muted-muted px-4 py-6.5 text-center text-sm text-text-positive-weak\">\n <PackagePlusIcon strokeWidth={1} />\n No options available\n </div>\n )}\n </SelectContent>\n </Select>\n\n {_showClear && (\n <button\n type=\"button\"\n aria-label=\"Xóa lựa chọn\"\n className=\"absolute right-7 top-1/2 -translate-y-1/2 flex size-4 cursor-pointer items-center justify-center rounded-md text-text-positive-weak outline-none transition-[color,transform] hover:text-text-positive focus-visible:text-primary-strong focus-visible:[&>svg]:scale-125 [&>svg]:size-3.5 [&>svg]:transition-transform\"\n onClick={onClear}\n >\n <XIcon aria-hidden=\"true\" />\n </button>\n )}\n </div>\n )}\n\n {_touched && showErrorMessage && <FieldError id={errorId} className=\"mt-1\" errors={field.state.meta.errors} />}\n\n <FieldNote isShow={!!helperText}>{helperText}</FieldNote>\n </FieldContentMain>\n </Field>\n <FieldSeparator />\n </FieldGroup>\n );\n }\n);\n\nSelectField.displayName = 'SelectField';\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import{Dialog as e,DialogClose as t,DialogOverlay as n,DialogPortal as r}from"./ui/dialog.mjs";import{G as i}from"./tanstack-form-PC9YNeeo.mjs";import{Select as a,SelectContent as o,SelectItem as ee,SelectTrigger as s,SelectValue as c}from"./ui/select.mjs";import{Field as l,FieldContent as u,FieldContentMain as d,FieldDescription as f,FieldError as te,FieldGroup as p,FieldLabel as m,FieldNote as h,FieldSeparator as g,FieldTooltip as _}from"./field-BKyUqvzh.mjs";import{ChevronDownIcon as v,PackagePlusIcon as y,XIcon as b}from"lucide-react";import{memo as x,useId as S,useState as C}from"react";import{cn as w}from"@customafk/react-toolkit/utils";import{Fragment as T,jsx as E,jsxs as D}from"react/jsx-runtime";import{Dialog as O}from"radix-ui";import{useIsMobile as k}from"@customafk/react-toolkit/hooks/useMobile";import{useStore as A}from"@tanstack/react-form";const j=x(({label:x,description:j,placeholder:M,orientation:N=`responsive`,tooltip:P,options:F,helperText:I,clearable:L=!1,required:R=!1,disabled:z=!1,showErrorMessage:B=!0})=>{let V=S(),H=i(),U=k(),[W,G]=C(!1),K=A(H.form.store,({isSubmitting:e})=>e),q=z||K,J=H.state.meta.isDirty||H.state.meta.isTouched,Y=J&&!H.state.meta.isValid,X=R&&H.state.value===null,Z=L&&!!H.state.value&&!q,Q=F.find(e=>e.value===H.state.value)?.label,$=()=>{H.handleChange(null),H.handleBlur()};return D(p,{className:`gap-y-4 px-4`,children:[D(l,{orientation:N,"data-invalid":Y,children:[D(u,{children:[D(m,{htmlFor:H.name,"aria-required":X,children:[x,P&&E(_,{tooltip:P})]}),E(f,{children:j})]}),D(d,{className:`flex flex-col`,children:[U?D(T,{children:[D(`button`,{id:H.name,type:`button`,disabled:q,"aria-invalid":Y?`true`:void 0,"aria-describedby":V,onBlur:H.handleBlur,onClick:()=>G(!0),className:w(`flex w-full items-center justify-between`,`outline-1 outline-border -outline-offset-1`,`gap-2 rounded bg-transparent px-3 py-2`,`shadow-input transition-all cursor-pointer whitespace-nowrap text-sm`,`focus-visible:outline-primary-strong focus-visible:ring-4 focus-visible:ring-primary-weak`,`disabled:cursor-not-allowed disabled:opacity-50`,Y&&`outline-danger bg-danger-bg-subtle ring-danger-weak`,!H.state.value&&`text-text-positive-muted`),children:[E(`span`,{className:`line-clamp-1`,children:Q??M}),E(v,{size:16,className:`shrink-0 opacity-50`})]}),E(e,{open:W,onOpenChange:e=>{G(e),e||H.handleBlur()},children:D(r,{children:[E(n,{}),D(O.Content,{onOpenAutoFocus:e=>e.preventDefault(),className:w(`fixed inset-x-0 bottom-0 z-50`,`flex flex-col bg-background rounded-t-2xl outline-none`,`max-h-[80dvh] shadow-[0_-4px_24px_rgba(0,0,0,0.08)]`,`data-[state=open]:animate-in data-[state=open]:slide-in-from-bottom data-[state=open]:fade-in-0`,`data-[state=closed]:animate-out data-[state=closed]:slide-out-to-bottom data-[state=closed]:fade-out-0`,`duration-300`),children:[D(`div`,{className:`flex items-center justify-between px-4 py-3 border-b border-border shrink-0`,children:[E(`span`,{className:`font-semibold text-sm text-text-positive`,children:x??M??`Chọn một tùy chọn`}),E(t,{asChild:!0,children:E(`button`,{type:`button`,"aria-label":`Đóng`,className:`flex size-7 items-center justify-center rounded-md text-text-positive-weak transition-colors hover:bg-muted-muted hover:text-text-positive`,children:E(b,{size:16})})})]}),D(`div`,{className:`flex flex-col overflow-y-auto`,children:[Z&&E(t,{asChild:!0,children:D(`button`,{type:`button`,className:`flex w-full items-center gap-x-2 px-4 py-3 text-left text-sm text-danger-strong transition-colors hover:bg-danger-bg-subtle`,onClick:$,children:[E(b,{size:14}),`Xóa lựa chọn`]})}),F.length>0?F.map(e=>E(t,{asChild:!0,children:E(`button`,{type:`button`,className:w(`flex w-full items-center px-4 py-3 text-left text-sm transition-colors`,`hover:bg-muted-muted active:bg-muted-muted`,H.state.value===e.value&&`bg-primary-bg-subtle font-medium text-primary`),onClick:()=>{H.handleChange(e.value),H.handleBlur()},children:e.label})},e.value)):D(`div`,{className:`flex items-center justify-center gap-x-2 px-4 py-8 text-center text-sm text-text-positive-weak`,children:[E(y,{strokeWidth:1}),`Không có tùy chọn`]})]}),E(`div`,{className:`shrink-0 h-safe-bottom`})]})]})})]}):D(`div`,{className:`relative`,children:[D(a,{value:H.state.value??``,disabled:q,onValueChange:H.handleChange,children:[E(s,{"aria-invalid":Y?`true`:void 0,"aria-describedby":V,onBlur:H.handleBlur,children:E(c,{placeholder:M})}),E(o,{children:F.length>0?F.map(e=>E(ee,{value:e.value,children:e.label},e.value)):D(`div`,{className:`flex items-center justify-center gap-x-2 rounded border border-border bg-muted-muted px-4 py-6.5 text-center text-sm text-text-positive-weak`,children:[E(y,{strokeWidth:1}),`No options available`]})})]}),Z&&E(`button`,{type:`button`,"aria-label":`Xóa lựa chọn`,className:`absolute right-7 top-1/2 -translate-y-1/2 flex size-4 cursor-pointer items-center justify-center rounded-md text-text-positive-weak outline-none transition-[color,transform] hover:text-text-positive focus-visible:text-primary-strong focus-visible:[&>svg]:scale-125 [&>svg]:size-3.5 [&>svg]:transition-transform`,onClick:$,children:E(b,{"aria-hidden":`true`})})]}),J&&B&&E(te,{id:V,className:`mt-1`,errors:H.state.meta.errors}),E(h,{isShow:!!I,children:I})]})]}),E(g,{})]})});j.displayName=`SelectField`;export{j as SelectField};
2
+ //# sourceMappingURL=select-field-Kq5iQCRQ.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"select-field-Kq5iQCRQ.mjs","names":["Dialog","RadixDialog","Select"],"sources":["../packages/components/features/tanstack-form/components/fields/select-field.tsx"],"sourcesContent":["'use client';\n\nimport { memo, useId, useState } from 'react';\n\nimport { useStore } from '@tanstack/react-form';\n\nimport { ChevronDownIcon, PackagePlusIcon, XIcon } from 'lucide-react';\n\nimport { useIsMobile } from '@customafk/react-toolkit/hooks/useMobile';\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Dialog as RadixDialog } from 'radix-ui';\n\nimport { Dialog, DialogClose, DialogOverlay, DialogPortal } from '@/components/ui/dialog';\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select';\n\nimport { useTanStackFieldContext } from '../form-context';\nimport {\n Field,\n FieldContent,\n FieldContentMain,\n FieldDescription,\n FieldError,\n FieldGroup,\n FieldLabel,\n FieldNote,\n FieldSeparator,\n FieldTooltip,\n} from '../ui/field';\n\nimport type { SelectFieldProps as Props } from '../../types';\n\nexport const SelectField = memo<Props>(\n ({\n label,\n description,\n placeholder,\n orientation = 'responsive',\n tooltip,\n options,\n helperText,\n clearable = false,\n required = false,\n disabled = false,\n showErrorMessage = true,\n }) => {\n const errorId = useId();\n const field = useTanStackFieldContext<string | null>();\n const isMobile = useIsMobile();\n const [dialogOpen, setDialogOpen] = useState(false);\n\n const isSubmitting = useStore(field.form.store, ({ isSubmitting }) => isSubmitting);\n const isDisabled = disabled || isSubmitting;\n\n const _touched = field.state.meta.isDirty || field.state.meta.isTouched;\n const _invalid = _touched && !field.state.meta.isValid;\n const _isEmpty = required && field.state.value === null;\n const _showClear = clearable && !!field.state.value && !isDisabled;\n\n const selectedLabel = options.find(o => o.value === field.state.value)?.label;\n\n const onClear = () => {\n field.handleChange(null);\n field.handleBlur();\n };\n\n return (\n <FieldGroup className=\"gap-y-4 px-4\">\n <Field orientation={orientation} data-invalid={_invalid}>\n <FieldContent>\n <FieldLabel htmlFor={field.name} aria-required={_isEmpty}>\n {label}\n {tooltip && <FieldTooltip tooltip={tooltip} />}\n </FieldLabel>\n <FieldDescription>{description}</FieldDescription>\n </FieldContent>\n\n <FieldContentMain className=\"flex flex-col\">\n {isMobile ? (\n <>\n <button\n id={field.name}\n type=\"button\"\n disabled={isDisabled}\n aria-invalid={_invalid ? 'true' : undefined}\n aria-describedby={errorId}\n onBlur={field.handleBlur}\n onClick={() => setDialogOpen(true)}\n className={cn(\n 'flex w-full items-center justify-between',\n 'outline-1 outline-border -outline-offset-1',\n 'gap-2 rounded bg-transparent px-3 py-2',\n 'shadow-input transition-all cursor-pointer whitespace-nowrap text-sm',\n 'focus-visible:outline-primary-strong focus-visible:ring-4 focus-visible:ring-primary-weak',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n _invalid && 'outline-danger bg-danger-bg-subtle ring-danger-weak',\n !field.state.value && 'text-text-positive-muted'\n )}\n >\n <span className=\"line-clamp-1\">{selectedLabel ?? placeholder}</span>\n <ChevronDownIcon size={16} className=\"shrink-0 opacity-50\" />\n </button>\n\n <Dialog\n open={dialogOpen}\n onOpenChange={open => {\n setDialogOpen(open);\n if (!open) field.handleBlur();\n }}\n >\n <DialogPortal>\n <DialogOverlay />\n <RadixDialog.Content\n onOpenAutoFocus={e => e.preventDefault()}\n className={cn(\n 'fixed inset-x-0 bottom-0 z-50',\n 'flex flex-col bg-background rounded-t-2xl outline-none',\n 'max-h-[80dvh] shadow-[0_-4px_24px_rgba(0,0,0,0.08)]',\n 'data-[state=open]:animate-in data-[state=open]:slide-in-from-bottom data-[state=open]:fade-in-0',\n 'data-[state=closed]:animate-out data-[state=closed]:slide-out-to-bottom data-[state=closed]:fade-out-0',\n 'duration-300'\n )}\n >\n <div className=\"flex items-center justify-between px-4 py-3 border-b border-border shrink-0\">\n <span className=\"font-semibold text-sm text-text-positive\">{label ?? placeholder ?? 'Chọn một tùy chọn'}</span>\n <DialogClose asChild>\n <button\n type=\"button\"\n aria-label=\"Đóng\"\n className=\"flex size-7 items-center justify-center rounded-md text-text-positive-weak transition-colors hover:bg-muted-muted hover:text-text-positive\"\n >\n <XIcon size={16} />\n </button>\n </DialogClose>\n </div>\n\n <div className=\"flex flex-col overflow-y-auto\">\n {_showClear && (\n <DialogClose asChild>\n <button\n type=\"button\"\n className=\"flex w-full items-center gap-x-2 px-4 py-3 text-left text-sm text-danger-strong transition-colors hover:bg-danger-bg-subtle\"\n onClick={onClear}\n >\n <XIcon size={14} />\n Xóa lựa chọn\n </button>\n </DialogClose>\n )}\n {options.length > 0 ? (\n options.map(option => (\n <DialogClose key={option.value} asChild>\n <button\n type=\"button\"\n className={cn(\n 'flex w-full items-center px-4 py-3 text-left text-sm transition-colors',\n 'hover:bg-muted-muted active:bg-muted-muted',\n field.state.value === option.value && 'bg-primary-bg-subtle font-medium text-primary'\n )}\n onClick={() => {\n field.handleChange(option.value);\n field.handleBlur();\n }}\n >\n {option.label}\n </button>\n </DialogClose>\n ))\n ) : (\n <div className=\"flex items-center justify-center gap-x-2 px-4 py-8 text-center text-sm text-text-positive-weak\">\n <PackagePlusIcon strokeWidth={1} />\n Không có tùy chọn\n </div>\n )}\n </div>\n\n <div className=\"shrink-0 h-safe-bottom\" />\n </RadixDialog.Content>\n </DialogPortal>\n </Dialog>\n </>\n ) : (\n <div className=\"relative\">\n <Select value={field.state.value ?? ''} disabled={isDisabled} onValueChange={field.handleChange}>\n <SelectTrigger aria-invalid={_invalid ? 'true' : undefined} aria-describedby={errorId} onBlur={field.handleBlur}>\n <SelectValue placeholder={placeholder} />\n </SelectTrigger>\n <SelectContent>\n {options.length > 0 ? (\n options.map(option => (\n <SelectItem key={option.value} value={option.value}>\n {option.label}\n </SelectItem>\n ))\n ) : (\n <div className=\"flex items-center justify-center gap-x-2 rounded border border-border bg-muted-muted px-4 py-6.5 text-center text-sm text-text-positive-weak\">\n <PackagePlusIcon strokeWidth={1} />\n No options available\n </div>\n )}\n </SelectContent>\n </Select>\n\n {_showClear && (\n <button\n type=\"button\"\n aria-label=\"Xóa lựa chọn\"\n className=\"absolute right-7 top-1/2 -translate-y-1/2 flex size-4 cursor-pointer items-center justify-center rounded-md text-text-positive-weak outline-none transition-[color,transform] hover:text-text-positive focus-visible:text-primary-strong focus-visible:[&>svg]:scale-125 [&>svg]:size-3.5 [&>svg]:transition-transform\"\n onClick={onClear}\n >\n <XIcon aria-hidden=\"true\" />\n </button>\n )}\n </div>\n )}\n\n {_touched && showErrorMessage && <FieldError id={errorId} className=\"mt-1\" errors={field.state.meta.errors} />}\n\n <FieldNote isShow={!!helperText}>{helperText}</FieldNote>\n </FieldContentMain>\n </Field>\n <FieldSeparator />\n </FieldGroup>\n );\n }\n);\n\nSelectField.displayName = 'SelectField';\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import{cn as e}from"@customafk/react-toolkit/utils";import{jsx as t}from"react/jsx-runtime";import{Separator as n}from"radix-ui";function r({className:r,orientation:i=`horizontal`,decorative:a=!0,...o}){return t(n.Root,{"data-slot":`separator`,decorative:a,orientation:i,className:e(`shrink-0 bg-border-weak`,`data-[orientation=horizontal]:h-px`,`data-[orientation=horizontal]:w-full`,`data-[orientation=vertical]:h-full`,`data-[orientation=vertical]:w-px`,r),...o})}export{r as t};
2
+ //# sourceMappingURL=separator-BlNAFSJv.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"separator-BlNAFSJv.mjs","names":["Separator","SeparatorPrimitive"],"sources":["../packages/components/features/tanstack-form/components/ui/separator.tsx"],"sourcesContent":["'use client';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Separator as SeparatorPrimitive } from 'radix-ui';\n\n/**\n * Thin decorative divider line that supports horizontal and vertical orientations via Radix UI Separator.\n *\n * @example\n * import { Separator } from '@customafk/lunas-ui/features/tanstack-form';\n *\n * <Separator orientation=\"horizontal\" />\n */\nfunction Separator({ className, orientation = 'horizontal', decorative = true, ...props }: React.ComponentProps<typeof SeparatorPrimitive.Root>) {\n return (\n <SeparatorPrimitive.Root\n data-slot=\"separator\"\n decorative={decorative}\n orientation={orientation}\n className={cn(\n 'shrink-0 bg-border-weak',\n 'data-[orientation=horizontal]:h-px',\n 'data-[orientation=horizontal]:w-full',\n 'data-[orientation=vertical]:h-full',\n 'data-[orientation=vertical]:w-px',\n className\n )}\n {...props}\n />\n );\n}\n\nexport { Separator };\n"],"mappings":"iIAcA,SAASA,EAAU,CAAE,YAAW,cAAc,aAAc,aAAa,GAAM,GAAG,GAA+D,CAC/I,OACE,EAACC,EAAmB,KAApB,CACE,YAAU,YACE,aACC,cACb,UAAW,EACT,0BACA,qCACA,uCACA,qCACA,mCACA,CACF,EACA,GAAI,CACL,CAAA,CAEL"}
@@ -0,0 +1,32 @@
1
+ import { Separator } from "radix-ui";
2
+
3
+ //#region packages/components/ui/separator.d.ts
4
+ /**
5
+ * Thin visual divider built on Radix UI's Separator primitive, supporting horizontal and vertical orientations.
6
+ *
7
+ * @example
8
+ * ```tsx
9
+ * import { Separator } from '@customafk/lunas-ui/ui/separator';
10
+ *
11
+ * <div className="space-y-4">
12
+ * <p>Section one</p>
13
+ * <Separator />
14
+ * <p>Section two</p>
15
+ * </div>
16
+ *
17
+ * <div className="flex h-8 items-center gap-4">
18
+ * <span>Left</span>
19
+ * <Separator orientation="vertical" />
20
+ * <span>Right</span>
21
+ * </div>
22
+ * ```
23
+ */
24
+ declare function Separator$1({
25
+ className,
26
+ orientation,
27
+ decorative,
28
+ ...props
29
+ }: React.ComponentProps<typeof Separator.Root>): import("react").JSX.Element;
30
+ //#endregion
31
+ export { Separator$1 as t };
32
+ //# sourceMappingURL=separator-D6_fMJtM.d.cts.map
@@ -0,0 +1,32 @@
1
+ import { Separator } from "radix-ui";
2
+
3
+ //#region packages/components/ui/separator.d.ts
4
+ /**
5
+ * Thin visual divider built on Radix UI's Separator primitive, supporting horizontal and vertical orientations.
6
+ *
7
+ * @example
8
+ * ```tsx
9
+ * import { Separator } from '@customafk/lunas-ui/ui/separator';
10
+ *
11
+ * <div className="space-y-4">
12
+ * <p>Section one</p>
13
+ * <Separator />
14
+ * <p>Section two</p>
15
+ * </div>
16
+ *
17
+ * <div className="flex h-8 items-center gap-4">
18
+ * <span>Left</span>
19
+ * <Separator orientation="vertical" />
20
+ * <span>Right</span>
21
+ * </div>
22
+ * ```
23
+ */
24
+ declare function Separator$1({
25
+ className,
26
+ orientation,
27
+ decorative,
28
+ ...props
29
+ }: React.ComponentProps<typeof Separator.Root>): import("react").JSX.Element;
30
+ //#endregion
31
+ export { Separator$1 as t };
32
+ //# sourceMappingURL=separator-D6_fMJtM.d.mts.map
@@ -0,0 +1,2 @@
1
+ let e=require("@customafk/react-toolkit/utils"),t=require("react/jsx-runtime"),n=require("radix-ui");function r({className:r,orientation:i=`horizontal`,decorative:a=!0,...o}){return(0,t.jsx)(n.Separator.Root,{"data-slot":`separator`,decorative:a,orientation:i,className:(0,e.cn)(`shrink-0 bg-border-weak`,`data-[orientation=horizontal]:h-px`,`data-[orientation=horizontal]:w-full`,`data-[orientation=vertical]:h-full`,`data-[orientation=vertical]:w-px`,r),...o})}Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return r}});
2
+ //# sourceMappingURL=separator-sBz__BXC.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"separator-sBz__BXC.cjs","names":["SeparatorPrimitive"],"sources":["../packages/components/features/tanstack-form/components/ui/separator.tsx"],"sourcesContent":["'use client';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Separator as SeparatorPrimitive } from 'radix-ui';\n\n/**\n * Thin decorative divider line that supports horizontal and vertical orientations via Radix UI Separator.\n *\n * @example\n * import { Separator } from '@customafk/lunas-ui/features/tanstack-form';\n *\n * <Separator orientation=\"horizontal\" />\n */\nfunction Separator({ className, orientation = 'horizontal', decorative = true, ...props }: React.ComponentProps<typeof SeparatorPrimitive.Root>) {\n return (\n <SeparatorPrimitive.Root\n data-slot=\"separator\"\n decorative={decorative}\n orientation={orientation}\n className={cn(\n 'shrink-0 bg-border-weak',\n 'data-[orientation=horizontal]:h-px',\n 'data-[orientation=horizontal]:w-full',\n 'data-[orientation=vertical]:h-full',\n 'data-[orientation=vertical]:w-px',\n className\n )}\n {...props}\n />\n );\n}\n\nexport { Separator };\n"],"mappings":"qGAcA,SAAS,EAAU,CAAE,YAAW,cAAc,aAAc,aAAa,GAAM,GAAG,GAA+D,CAC/I,OACE,EAAA,EAAA,IAAA,CAACA,EAAAA,UAAmB,KAApB,CACE,YAAU,YACE,aACC,cACb,WAAA,EAAA,EAAA,GAAA,CACE,0BACA,qCACA,uCACA,qCACA,mCACA,CACF,EACA,GAAI,CACL,CAAA,CAEL"}
@@ -0,0 +1,66 @@
1
+ import { Dialog } from "radix-ui";
2
+
3
+ //#region packages/components/ui/sheet.d.ts
4
+ /**
5
+ * Root provider for the Sheet panel — wraps all Sheet sub-components and manages open state.
6
+ *
7
+ * @example
8
+ * ```tsx
9
+ * import { Sheet, SheetTrigger, SheetContent, SheetHeader, SheetTitle, SheetDescription } from '@customafk/lunas-ui/ui/sheet';
10
+ *
11
+ * <Sheet>
12
+ * <SheetTrigger>Open</SheetTrigger>
13
+ * <SheetContent side="right">
14
+ * <SheetHeader>
15
+ * <SheetTitle>Settings</SheetTitle>
16
+ * <SheetDescription>Manage your preferences.</SheetDescription>
17
+ * </SheetHeader>
18
+ * </SheetContent>
19
+ * </Sheet>
20
+ * ```
21
+ */
22
+ declare function Sheet({
23
+ ...props
24
+ }: React.ComponentProps<typeof Dialog.Root>): import("react").JSX.Element;
25
+ /** Button or element that opens the Sheet when interacted with. */
26
+ declare function SheetTrigger({
27
+ ...props
28
+ }: React.ComponentProps<typeof Dialog.Trigger>): import("react").JSX.Element;
29
+ /** Button that programmatically closes the Sheet. */
30
+ declare function SheetClose({
31
+ ...props
32
+ }: React.ComponentProps<typeof Dialog.Close>): import("react").JSX.Element;
33
+ /**
34
+ * The sliding panel itself; renders on the specified `side` of the viewport and includes a built-in close button.
35
+ */
36
+ declare function SheetContent({
37
+ className,
38
+ children,
39
+ side,
40
+ ...props
41
+ }: React.ComponentProps<typeof Dialog.Content> & {
42
+ /** Edge of the viewport from which the sheet slides in. */side?: 'top' | 'right' | 'bottom' | 'left';
43
+ }): import("react").JSX.Element;
44
+ /** Padded container for the Sheet title and description at the top of the panel. */
45
+ declare function SheetHeader({
46
+ className,
47
+ ...props
48
+ }: React.ComponentProps<'div'>): import("react").JSX.Element;
49
+ /** Sticky footer area at the bottom of the Sheet panel, typically used for action buttons. */
50
+ declare function SheetFooter({
51
+ className,
52
+ ...props
53
+ }: React.ComponentProps<'div'>): import("react").JSX.Element;
54
+ /** Accessible title element for the Sheet, announced by screen readers on open. */
55
+ declare function SheetTitle({
56
+ className,
57
+ ...props
58
+ }: React.ComponentProps<typeof Dialog.Title>): import("react").JSX.Element;
59
+ /** Accessible description element for the Sheet, providing supplemental context to the title. */
60
+ declare function SheetDescription({
61
+ className,
62
+ ...props
63
+ }: React.ComponentProps<typeof Dialog.Description>): import("react").JSX.Element;
64
+ //#endregion
65
+ export { SheetFooter as a, SheetTrigger as c, SheetDescription as i, SheetClose as n, SheetHeader as o, SheetContent as r, SheetTitle as s, Sheet as t };
66
+ //# sourceMappingURL=sheet-cHLLSvvt.d.cts.map
@@ -0,0 +1,66 @@
1
+ import { Dialog } from "radix-ui";
2
+
3
+ //#region packages/components/ui/sheet.d.ts
4
+ /**
5
+ * Root provider for the Sheet panel — wraps all Sheet sub-components and manages open state.
6
+ *
7
+ * @example
8
+ * ```tsx
9
+ * import { Sheet, SheetTrigger, SheetContent, SheetHeader, SheetTitle, SheetDescription } from '@customafk/lunas-ui/ui/sheet';
10
+ *
11
+ * <Sheet>
12
+ * <SheetTrigger>Open</SheetTrigger>
13
+ * <SheetContent side="right">
14
+ * <SheetHeader>
15
+ * <SheetTitle>Settings</SheetTitle>
16
+ * <SheetDescription>Manage your preferences.</SheetDescription>
17
+ * </SheetHeader>
18
+ * </SheetContent>
19
+ * </Sheet>
20
+ * ```
21
+ */
22
+ declare function Sheet({
23
+ ...props
24
+ }: React.ComponentProps<typeof Dialog.Root>): import("react").JSX.Element;
25
+ /** Button or element that opens the Sheet when interacted with. */
26
+ declare function SheetTrigger({
27
+ ...props
28
+ }: React.ComponentProps<typeof Dialog.Trigger>): import("react").JSX.Element;
29
+ /** Button that programmatically closes the Sheet. */
30
+ declare function SheetClose({
31
+ ...props
32
+ }: React.ComponentProps<typeof Dialog.Close>): import("react").JSX.Element;
33
+ /**
34
+ * The sliding panel itself; renders on the specified `side` of the viewport and includes a built-in close button.
35
+ */
36
+ declare function SheetContent({
37
+ className,
38
+ children,
39
+ side,
40
+ ...props
41
+ }: React.ComponentProps<typeof Dialog.Content> & {
42
+ /** Edge of the viewport from which the sheet slides in. */side?: 'top' | 'right' | 'bottom' | 'left';
43
+ }): import("react").JSX.Element;
44
+ /** Padded container for the Sheet title and description at the top of the panel. */
45
+ declare function SheetHeader({
46
+ className,
47
+ ...props
48
+ }: React.ComponentProps<'div'>): import("react").JSX.Element;
49
+ /** Sticky footer area at the bottom of the Sheet panel, typically used for action buttons. */
50
+ declare function SheetFooter({
51
+ className,
52
+ ...props
53
+ }: React.ComponentProps<'div'>): import("react").JSX.Element;
54
+ /** Accessible title element for the Sheet, announced by screen readers on open. */
55
+ declare function SheetTitle({
56
+ className,
57
+ ...props
58
+ }: React.ComponentProps<typeof Dialog.Title>): import("react").JSX.Element;
59
+ /** Accessible description element for the Sheet, providing supplemental context to the title. */
60
+ declare function SheetDescription({
61
+ className,
62
+ ...props
63
+ }: React.ComponentProps<typeof Dialog.Description>): import("react").JSX.Element;
64
+ //#endregion
65
+ export { SheetFooter as a, SheetTrigger as c, SheetDescription as i, SheetClose as n, SheetHeader as o, SheetContent as r, SheetTitle as s, Sheet as t };
66
+ //# sourceMappingURL=sheet-cHLLSvvt.d.mts.map
@@ -0,0 +1,2 @@
1
+ import{Button as e}from"./ui/button.mjs";import{Tooltip as t,TooltipContent as n,TooltipProvider as r,TooltipTrigger as i}from"./ui/tooltip.mjs";import{Sheet as a,SheetContent as o,SheetDescription as s,SheetHeader as c,SheetTitle as l}from"./ui/sheet.mjs";import{MenuIcon as u}from"lucide-react";import{createContext as d,use as f,useCallback as p,useEffect as m,useMemo as h,useState as g}from"react";import{cn as _}from"@customafk/react-toolkit/utils";import{cva as v}from"class-variance-authority";import{jsx as y,jsxs as b}from"react/jsx-runtime";import{Slot as x}from"radix-ui";import{useIsMobile as S}from"@customafk/react-toolkit/hooks/useMobile";const C=d(null);function w(){let e=f(C);if(!e)throw Error(`useSidebar must be used within a SidebarProvider.`);return e}function T({defaultOpen:e=!0,open:t,onOpenChange:n,className:i,style:a,children:o,...s}){let c=S(),[l,u]=g(!1),[d,f]=g(e),v=t??d,b=p(e=>{let t=typeof e==`function`?e(v):e;n?n(t):f(t),document.cookie=`detail_dialog_sidebar_state=${t}; path=/; max-age=604800`},[n,v]),x=p(()=>c?u(e=>!e):b(e=>!e),[c,b]);m(()=>{let e=e=>{e.key===`p`&&(e.metaKey||e.ctrlKey)&&(e.preventDefault(),x())};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[x]);let w=v?`expanded`:`collapsed`,T=h(()=>({state:w,isMobile:c,toggleSidebar:x,open:v,setOpen:b,openMobile:l,setOpenMobile:u}),[w,c,v,b,l,x]);return y(C.Provider,{value:T,children:y(r,{delayDuration:0,children:y(`div`,{"data-slot":`sidebar-wrapper`,style:{"--sidebar-width":`18rem`,"--sidebar-width-icon":`3rem`,...a},className:_(`group/sidebar-wrapper flex h-full min-h-[85dvh] w-full items-start has-data-[variant=inset]:bg-sidebar`,i),...s,children:o})})})}function E({side:e=`left`,variant:t=`sidebar`,collapsible:n=`offcanvas`,className:r,children:i,...u}){let{state:d,isMobile:f,openMobile:p,setOpenMobile:m}=w();return n===`none`?y(`div`,{"data-slot":`sidebar`,className:_(`flex h-full w-(--sidebar-width) flex-col bg-sidebar text-sidebar-foreground`,r),...u,children:i}):f?y(a,{open:p,onOpenChange:m,...u,children:b(o,{"data-sidebar":`sidebar`,"data-slot":`sidebar`,"data-mobile":`true`,className:`z-20 hidden w-(--sidebar-width) bg-sidebar p-0 text-sidebar-foreground shadow-nav md:flex [&>button]:hidden`,style:{"--sidebar-width":`18rem`},side:e,children:[b(c,{className:`sr-only`,children:[y(l,{children:`Sidebar`}),y(s,{children:`Displays the mobile sidebar.`})]}),y(`div`,{className:`flex h-full w-full flex-col`,children:i})]})}):b(`div`,{className:`group peer hidden text-sidebar-foreground md:block`,"data-state":d,"data-collapsible":d===`collapsed`?n:``,"data-variant":t,"data-side":e,"data-slot":`sidebar`,children:[y(`div`,{"data-slot":`sidebar-gap`,className:_(`relative w-(--sidebar-width) bg-transparent transition-[width] duration-200 ease-linear`,`group-data-[collapsible=offcanvas]:w-0`,`group-data-[side=right]:rotate-180`,t===`floating`||t===`inset`?`group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]`:`group-data-[collapsible=icon]:w-(--sidebar-width-icon)`)}),y(`div`,{"data-slot":`sidebar-container`,className:_(`absolute inset-y-0 z-20 hidden w-(--sidebar-width) shadow-nav transition-[left,right,width] duration-200 ease-linear md:flex`,e===`left`?`left-0 group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]`:`right-0 group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]`,t===`floating`||t===`inset`?`p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]`:`group-data-[collapsible=icon]:w-(--sidebar-width-icon)`,r),...u,children:y(`div`,{"data-sidebar":`sidebar`,"data-slot":`sidebar-inner`,className:_(`flex size-full flex-col shadow-nav`,`group-data-[variant=floating]:rounded-lg`,`group-data-[variant=floating]:border`,`group-data-[variant=floating]:border-sidebar-border`,`group-data-[variant=floating]:shadow-sm`),children:i})})]})}function D({className:t,onClick:n,...r}){let{toggleSidebar:i}=w();return b(e,{"data-sidebar":`trigger`,"data-slot":`sidebar-trigger`,variant:`ghost`,color:`secondary`,size:`icon`,className:_(`size-10 rounded-full [&_svg]:size-6!`,t),onClick:e=>{n?.(e),i()},...r,children:[y(u,{}),y(`span`,{className:`sr-only`,children:`Toggle Sidebar`})]})}function O({className:e,...t}){return y(`div`,{"data-slot":`sidebar-header`,"data-sidebar":`header`,className:_(`flex flex-col gap-2 p-2`,e),...t})}function k({className:e,children:t,...n}){let{open:r}=w();return y(`div`,{"data-slot":`sidebar-footer`,"data-sidebar":`footer`,className:_(`flex flex-col gap-2 p-2`,e),...n,children:b(j,{children:[r&&y(M,{children:t}),y(M,{children:b(`p`,{className:`pt-2 text-center text-xs text-text-positive-subtle`,children:[`Copyright © `,new Date().getFullYear(),`, Lunas.`]})})]})})}function A({className:e,...t}){return y(`div`,{"data-slot":`sidebar-content`,"data-sidebar":`content`,className:_(`flex min-h-0 flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden`,e),...t})}function j({className:e,...t}){return y(`ul`,{"data-slot":`sidebar-menu`,"data-sidebar":`menu`,className:_(`flex w-full min-w-0 flex-col gap-1`,e),...t})}function M({className:e,...t}){return y(`li`,{"data-slot":`sidebar-menu-item`,"data-sidebar":`menu-item`,className:_(`group/menu-item relative`,e),...t})}const N=v([`peer/menu-button`,`cursor-pointer`,`flex w-full items-center gap-2`,`overflow-hidden rounded-md p-2 outline-hidden`,`truncate text-left font-normal`,`transition-[color,background-color,width,height,padding]`,`active:bg-sidebar-accent active:text-sidebar-accent-foreground`,`disabled:pointer-events-none disabled:opacity-50`,`group-has-data-[sidebar=menu-action]/menu-item:pr-8`,`aria-disabled:pointer-events-none aria-disabled:opacity-50`,`data-[active=true]:bg-sidebar-primary-muted data-[active=true]:font-normal data-[active=true]:text-sidebar-primary`,`data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground`,`group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2!`,`[&>svg]:size-4 [&>svg]:shrink-0`,`[&>span:last-child]:truncate`],{variants:{variant:{default:`hover:bg-sidebar-accent/60 hover:text-sidebar-accent-foreground`,outline:`bg-background shadow-[0_0_0_1px_hsl(var(--sidebar-border))] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))]`},size:{default:`h-8 text-sm`,sm:`h-7 text-xs`,lg:`h-12 text-sm group-data-[collapsible=icon]:p-0!`}},defaultVariants:{variant:`default`,size:`default`}});function P({asChild:e=!1,isActive:r=!1,variant:a=`default`,size:o=`default`,tooltip:s,className:c,...l}){let u=e?x.Slot:`button`,{state:d}=w(),f=y(u,{"data-slot":`sidebar-menu-button`,"data-sidebar":`menu-button`,"data-size":o,"data-active":r,className:_(N({variant:a,size:o}),c),...l});return s?(typeof s==`string`&&(s={children:s}),b(t,{children:[y(i,{asChild:!0,children:f}),y(n,{side:`right`,align:`center`,hidden:d!==`collapsed`,...s})]})):f}export{P as a,E as c,j as i,T as l,k as n,M as o,O as r,D as s,A as t,w as u};
2
+ //# sourceMappingURL=sidebar-core-Bh0dZXsm.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sidebar-core-Bh0dZXsm.mjs","names":["SlotPrimitive","Tooltip"],"sources":["../packages/components/dialogs/detail-dialog/components/sidebar-core.tsx"],"sourcesContent":["'use client';\n\nimport { createContext, use, useCallback, useEffect, useMemo, useState } from 'react';\n\nimport { MenuIcon } from 'lucide-react';\n\nimport { useIsMobile } from '@customafk/react-toolkit/hooks/useMobile';\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Button } from '@/components/ui/button';\nimport { Sheet, SheetContent, SheetDescription, SheetHeader, SheetTitle } from '@/components/ui/sheet';\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip';\n\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { Slot as SlotPrimitive } from 'radix-ui';\n\nconst SIDEBAR_COOKIE_NAME = 'detail_dialog_sidebar_state';\nconst SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7;\nconst SIDEBAR_WIDTH = '18rem';\nconst SIDEBAR_WIDTH_MOBILE = '18rem';\nconst SIDEBAR_WIDTH_ICON = '3rem';\nconst SIDEBAR_KEYBOARD_SHORTCUT = 'p';\n\ntype SidebarContextProps = {\n /** Current visual state of the sidebar. */\n state: 'expanded' | 'collapsed';\n /** Whether the sidebar is open on desktop. */\n open: boolean;\n /** Setter for the desktop open state. */\n setOpen: (open: boolean) => void;\n /** Whether the sidebar sheet is open on mobile. */\n openMobile: boolean;\n /** Setter for the mobile open state. */\n setOpenMobile: (open: boolean) => void;\n /** `true` when the viewport is considered mobile-sized. */\n isMobile: boolean;\n /** Toggles the sidebar between expanded and collapsed. */\n toggleSidebar: () => void;\n};\n\nconst SidebarContext = createContext<SidebarContextProps | null>(null);\n\n/**\n * Reads the current sidebar open/collapsed state and toggle handler from context.\n * Also used internally by `DetailDialogSidebarRail` in `./sidebar-extras`.\n */\nfunction useSidebar() {\n const context = use(SidebarContext);\n if (!context) {\n throw new Error('useSidebar must be used within a SidebarProvider.');\n }\n return context;\n}\n\n/**\n * Context provider that manages sidebar open/collapsed state and persists it via a cookie.\n *\n * @example\n * ```tsx\n * import { SidebarProvider } from '@customafk/lunas-ui/dialogs/detail-dialog/components/sidebar';\n *\n * <SidebarProvider defaultOpen={true}>\n * <Sidebar collapsible=\"icon\">{...}</Sidebar>\n * </SidebarProvider>\n * ```\n */\nfunction SidebarProvider({\n defaultOpen = true,\n open: openProp,\n onOpenChange: setOpenProp,\n className,\n style,\n children,\n ...props\n}: React.ComponentProps<'div'> & {\n /** Whether the sidebar is open by default (uncontrolled). Defaults to `true`. */\n defaultOpen?: boolean;\n /** Controlled open state. When provided the component becomes controlled. */\n open?: boolean;\n /** Callback fired when the open state changes in controlled mode. */\n onOpenChange?: (open: boolean) => void;\n}) {\n const isMobile = useIsMobile();\n const [openMobile, setOpenMobile] = useState(false);\n\n const [_open, _setOpen] = useState(defaultOpen);\n const open = openProp ?? _open;\n const setOpen = useCallback(\n (value: boolean | ((value: boolean) => boolean)) => {\n const openState = typeof value === 'function' ? value(open) : value;\n if (setOpenProp) {\n setOpenProp(openState);\n } else {\n _setOpen(openState);\n }\n // biome-ignore lint/suspicious/noDocumentCookie: persists sidebar state across page loads\n document.cookie = `${SIDEBAR_COOKIE_NAME}=${openState}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`;\n },\n [setOpenProp, open]\n );\n\n const toggleSidebar = useCallback(() => {\n return isMobile ? setOpenMobile(open => !open) : setOpen(open => !open);\n }, [isMobile, setOpen]);\n\n useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === SIDEBAR_KEYBOARD_SHORTCUT && (event.metaKey || event.ctrlKey)) {\n event.preventDefault();\n toggleSidebar();\n }\n };\n window.addEventListener('keydown', handleKeyDown);\n return () => window.removeEventListener('keydown', handleKeyDown);\n }, [toggleSidebar]);\n\n const state = open ? 'expanded' : 'collapsed';\n\n const contextValue = useMemo<SidebarContextProps>(\n () => ({ state, isMobile, toggleSidebar, open, setOpen, openMobile, setOpenMobile }),\n [state, isMobile, open, setOpen, openMobile, toggleSidebar]\n );\n\n return (\n <SidebarContext.Provider value={contextValue}>\n <TooltipProvider delayDuration={0}>\n <div\n data-slot=\"sidebar-wrapper\"\n style={{ '--sidebar-width': SIDEBAR_WIDTH, '--sidebar-width-icon': SIDEBAR_WIDTH_ICON, ...style } as React.CSSProperties}\n className={cn('group/sidebar-wrapper flex h-full min-h-[85dvh] w-full items-start has-data-[variant=inset]:bg-sidebar', className)}\n {...props}\n >\n {children}\n </div>\n </TooltipProvider>\n </SidebarContext.Provider>\n );\n}\n\n/**\n * Responsive sidebar container that supports desktop icon-collapse and a mobile Sheet overlay.\n *\n * @example\n * ```tsx\n * import { Sidebar } from '@customafk/lunas-ui/dialogs/detail-dialog/components/sidebar';\n *\n * <Sidebar collapsible=\"icon\" side=\"left\">\n * {children}\n * </Sidebar>\n * ```\n */\nfunction Sidebar({\n side = 'left',\n variant = 'sidebar',\n collapsible = 'offcanvas',\n className,\n children,\n ...props\n}: React.ComponentProps<'div'> & {\n /** Which edge the sidebar is anchored to. Defaults to `'left'`. */\n side?: 'left' | 'right';\n /** Visual style variant of the sidebar. Defaults to `'sidebar'`. */\n variant?: 'sidebar' | 'floating' | 'inset';\n /** Collapse behaviour — slides off-canvas, shrinks to icon strip, or stays fixed. Defaults to `'offcanvas'`. */\n collapsible?: 'offcanvas' | 'icon' | 'none';\n}) {\n const { state, isMobile, openMobile, setOpenMobile } = useSidebar();\n\n if (collapsible === 'none') {\n return (\n <div data-slot=\"sidebar\" className={cn('flex h-full w-(--sidebar-width) flex-col bg-sidebar text-sidebar-foreground', className)} {...props}>\n {children}\n </div>\n );\n }\n\n if (isMobile) {\n return (\n <Sheet open={openMobile} onOpenChange={setOpenMobile} {...props}>\n <SheetContent\n data-sidebar=\"sidebar\"\n data-slot=\"sidebar\"\n data-mobile=\"true\"\n className=\"z-20 hidden w-(--sidebar-width) bg-sidebar p-0 text-sidebar-foreground shadow-nav md:flex [&>button]:hidden\"\n style={{ '--sidebar-width': SIDEBAR_WIDTH_MOBILE } as React.CSSProperties}\n side={side}\n >\n <SheetHeader className=\"sr-only\">\n <SheetTitle>Sidebar</SheetTitle>\n <SheetDescription>Displays the mobile sidebar.</SheetDescription>\n </SheetHeader>\n <div className=\"flex h-full w-full flex-col\">{children}</div>\n </SheetContent>\n </Sheet>\n );\n }\n\n return (\n <div\n className=\"group peer hidden text-sidebar-foreground md:block\"\n data-state={state}\n data-collapsible={state === 'collapsed' ? collapsible : ''}\n data-variant={variant}\n data-side={side}\n data-slot=\"sidebar\"\n >\n <div\n data-slot=\"sidebar-gap\"\n className={cn(\n 'relative w-(--sidebar-width) bg-transparent transition-[width] duration-200 ease-linear',\n 'group-data-[collapsible=offcanvas]:w-0',\n 'group-data-[side=right]:rotate-180',\n variant === 'floating' || variant === 'inset'\n ? 'group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]'\n : 'group-data-[collapsible=icon]:w-(--sidebar-width-icon)'\n )}\n />\n <div\n data-slot=\"sidebar-container\"\n className={cn(\n 'absolute inset-y-0 z-20 hidden w-(--sidebar-width) shadow-nav transition-[left,right,width] duration-200 ease-linear md:flex',\n side === 'left'\n ? 'left-0 group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]'\n : 'right-0 group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]',\n // Adjust padding for floating and inset variants.\n variant === 'floating' || variant === 'inset'\n ? 'p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]'\n : 'group-data-[collapsible=icon]:w-(--sidebar-width-icon)',\n className\n )}\n {...props}\n >\n <div\n data-sidebar=\"sidebar\"\n data-slot=\"sidebar-inner\"\n className={cn(\n 'flex size-full flex-col shadow-nav',\n 'group-data-[variant=floating]:rounded-lg',\n 'group-data-[variant=floating]:border',\n 'group-data-[variant=floating]:border-sidebar-border',\n 'group-data-[variant=floating]:shadow-sm'\n )}\n >\n {children}\n </div>\n </div>\n </div>\n );\n}\n\n/**\n * Icon button that toggles the detail-dialog sidebar open or collapsed.\n *\n * @example\n * ```tsx\n * import { DetailDialogSidebarTrigger } from '@customafk/lunas-ui/dialogs/detail-dialog/components/sidebar';\n *\n * <DetailDialogSidebarTrigger />\n * ```\n */\nfunction DetailDialogSidebarTrigger({ className, onClick, ...props }: React.ComponentProps<typeof Button>) {\n const { toggleSidebar } = useSidebar();\n\n return (\n <Button\n data-sidebar=\"trigger\"\n data-slot=\"sidebar-trigger\"\n variant=\"ghost\"\n color=\"secondary\"\n size=\"icon\"\n className={cn('size-10 rounded-full [&_svg]:size-6!', className)}\n onClick={event => {\n onClick?.(event);\n toggleSidebar();\n }}\n {...props}\n >\n <MenuIcon />\n <span className=\"sr-only\">Toggle Sidebar</span>\n </Button>\n );\n}\n\nfunction DetailDialogSidebarHeader({ className, ...props }: React.ComponentProps<'div'>) {\n return <div data-slot=\"sidebar-header\" data-sidebar=\"header\" className={cn('flex flex-col gap-2 p-2', className)} {...props} />;\n}\n\nfunction DetailDialogSidebarFooter({ className, children, ...props }: React.ComponentProps<'div'>) {\n const { open } = useSidebar();\n return (\n <div data-slot=\"sidebar-footer\" data-sidebar=\"footer\" className={cn('flex flex-col gap-2 p-2', className)} {...props}>\n <DetailDialogSidebarMenu>\n {open && <DetailDialogSidebarMenuItem>{children}</DetailDialogSidebarMenuItem>}\n <DetailDialogSidebarMenuItem>\n <p className=\"pt-2 text-center text-xs text-text-positive-subtle\">Copyright © {new Date().getFullYear()}, Lunas.</p>\n </DetailDialogSidebarMenuItem>\n </DetailDialogSidebarMenu>\n </div>\n );\n}\n\nfunction DetailDialogSidebarContent({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sidebar-content\"\n data-sidebar=\"content\"\n className={cn('flex min-h-0 flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden', className)}\n {...props}\n />\n );\n}\n\nfunction DetailDialogSidebarMenu({ className, ...props }: React.ComponentProps<'ul'>) {\n return <ul data-slot=\"sidebar-menu\" data-sidebar=\"menu\" className={cn('flex w-full min-w-0 flex-col gap-1', className)} {...props} />;\n}\n\nfunction DetailDialogSidebarMenuItem({ className, ...props }: React.ComponentProps<'li'>) {\n return <li data-slot=\"sidebar-menu-item\" data-sidebar=\"menu-item\" className={cn('group/menu-item relative', className)} {...props} />;\n}\n\nconst sidebarMenuButtonVariants = cva(\n [\n 'peer/menu-button',\n 'cursor-pointer',\n 'flex w-full items-center gap-2',\n 'overflow-hidden rounded-md p-2 outline-hidden',\n 'truncate text-left font-normal',\n 'transition-[color,background-color,width,height,padding]',\n 'active:bg-sidebar-accent active:text-sidebar-accent-foreground',\n 'disabled:pointer-events-none disabled:opacity-50',\n 'group-has-data-[sidebar=menu-action]/menu-item:pr-8',\n 'aria-disabled:pointer-events-none aria-disabled:opacity-50',\n 'data-[active=true]:bg-sidebar-primary-muted data-[active=true]:font-normal data-[active=true]:text-sidebar-primary',\n 'data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground',\n 'group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2!',\n '[&>svg]:size-4 [&>svg]:shrink-0',\n '[&>span:last-child]:truncate',\n ],\n {\n variants: {\n variant: {\n default: 'hover:bg-sidebar-accent/60 hover:text-sidebar-accent-foreground',\n outline:\n 'bg-background shadow-[0_0_0_1px_hsl(var(--sidebar-border))] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))]',\n },\n size: {\n default: 'h-8 text-sm',\n sm: 'h-7 text-xs',\n lg: 'h-12 text-sm group-data-[collapsible=icon]:p-0!',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n }\n);\n\nfunction DetailDialogSidebarMenuButton({\n asChild = false,\n isActive = false,\n variant = 'default',\n size = 'default',\n tooltip,\n className,\n ...props\n}: React.ComponentProps<'button'> & {\n asChild?: boolean;\n isActive?: boolean;\n tooltip?: string | React.ComponentProps<typeof TooltipContent>;\n} & VariantProps<typeof sidebarMenuButtonVariants>) {\n const Comp = asChild ? SlotPrimitive.Slot : 'button';\n const { state } = useSidebar();\n\n const button = (\n <Comp\n data-slot=\"sidebar-menu-button\"\n data-sidebar=\"menu-button\"\n data-size={size}\n data-active={isActive}\n className={cn(sidebarMenuButtonVariants({ variant, size }), className)}\n {...props}\n />\n );\n\n if (!tooltip) return button;\n\n if (typeof tooltip === 'string') {\n tooltip = { children: tooltip };\n }\n\n return (\n <Tooltip>\n <TooltipTrigger asChild>{button}</TooltipTrigger>\n <TooltipContent side=\"right\" align=\"center\" hidden={state !== 'collapsed'} {...tooltip} />\n </Tooltip>\n );\n}\n\nexport {\n DetailDialogSidebarContent,\n DetailDialogSidebarFooter,\n DetailDialogSidebarHeader,\n DetailDialogSidebarMenu,\n DetailDialogSidebarMenuButton,\n DetailDialogSidebarMenuItem,\n DetailDialogSidebarTrigger,\n Sidebar,\n SidebarProvider,\n // biome-ignore lint/style/useComponentExportOnlyModules: true\n useSidebar,\n};\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ const e=require("./ui/button.cjs"),t=require("./ui/tooltip.cjs"),n=require("./ui/sheet.cjs");let r=require("lucide-react"),i=require("react"),a=require("@customafk/react-toolkit/utils"),o=require("class-variance-authority"),s=require("react/jsx-runtime"),c=require("radix-ui"),l=require("@customafk/react-toolkit/hooks/useMobile");const u=(0,i.createContext)(null);function d(){let e=(0,i.use)(u);if(!e)throw Error(`useSidebar must be used within a SidebarProvider.`);return e}function f({defaultOpen:e=!0,open:n,onOpenChange:r,className:o,style:c,children:d,...f}){let p=(0,l.useIsMobile)(),[m,h]=(0,i.useState)(!1),[g,_]=(0,i.useState)(e),v=n??g,y=(0,i.useCallback)(e=>{let t=typeof e==`function`?e(v):e;r?r(t):_(t),document.cookie=`detail_dialog_sidebar_state=${t}; path=/; max-age=604800`},[r,v]),b=(0,i.useCallback)(()=>p?h(e=>!e):y(e=>!e),[p,y]);(0,i.useEffect)(()=>{let e=e=>{e.key===`p`&&(e.metaKey||e.ctrlKey)&&(e.preventDefault(),b())};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[b]);let x=v?`expanded`:`collapsed`,S=(0,i.useMemo)(()=>({state:x,isMobile:p,toggleSidebar:b,open:v,setOpen:y,openMobile:m,setOpenMobile:h}),[x,p,v,y,m,b]);return(0,s.jsx)(u.Provider,{value:S,children:(0,s.jsx)(t.TooltipProvider,{delayDuration:0,children:(0,s.jsx)(`div`,{"data-slot":`sidebar-wrapper`,style:{"--sidebar-width":`18rem`,"--sidebar-width-icon":`3rem`,...c},className:(0,a.cn)(`group/sidebar-wrapper flex h-full min-h-[85dvh] w-full items-start has-data-[variant=inset]:bg-sidebar`,o),...f,children:d})})})}function p({side:e=`left`,variant:t=`sidebar`,collapsible:r=`offcanvas`,className:i,children:o,...c}){let{state:l,isMobile:u,openMobile:f,setOpenMobile:p}=d();return r===`none`?(0,s.jsx)(`div`,{"data-slot":`sidebar`,className:(0,a.cn)(`flex h-full w-(--sidebar-width) flex-col bg-sidebar text-sidebar-foreground`,i),...c,children:o}):u?(0,s.jsx)(n.Sheet,{open:f,onOpenChange:p,...c,children:(0,s.jsxs)(n.SheetContent,{"data-sidebar":`sidebar`,"data-slot":`sidebar`,"data-mobile":`true`,className:`z-20 hidden w-(--sidebar-width) bg-sidebar p-0 text-sidebar-foreground shadow-nav md:flex [&>button]:hidden`,style:{"--sidebar-width":`18rem`},side:e,children:[(0,s.jsxs)(n.SheetHeader,{className:`sr-only`,children:[(0,s.jsx)(n.SheetTitle,{children:`Sidebar`}),(0,s.jsx)(n.SheetDescription,{children:`Displays the mobile sidebar.`})]}),(0,s.jsx)(`div`,{className:`flex h-full w-full flex-col`,children:o})]})}):(0,s.jsxs)(`div`,{className:`group peer hidden text-sidebar-foreground md:block`,"data-state":l,"data-collapsible":l===`collapsed`?r:``,"data-variant":t,"data-side":e,"data-slot":`sidebar`,children:[(0,s.jsx)(`div`,{"data-slot":`sidebar-gap`,className:(0,a.cn)(`relative w-(--sidebar-width) bg-transparent transition-[width] duration-200 ease-linear`,`group-data-[collapsible=offcanvas]:w-0`,`group-data-[side=right]:rotate-180`,t===`floating`||t===`inset`?`group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]`:`group-data-[collapsible=icon]:w-(--sidebar-width-icon)`)}),(0,s.jsx)(`div`,{"data-slot":`sidebar-container`,className:(0,a.cn)(`absolute inset-y-0 z-20 hidden w-(--sidebar-width) shadow-nav transition-[left,right,width] duration-200 ease-linear md:flex`,e===`left`?`left-0 group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]`:`right-0 group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]`,t===`floating`||t===`inset`?`p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]`:`group-data-[collapsible=icon]:w-(--sidebar-width-icon)`,i),...c,children:(0,s.jsx)(`div`,{"data-sidebar":`sidebar`,"data-slot":`sidebar-inner`,className:(0,a.cn)(`flex size-full flex-col shadow-nav`,`group-data-[variant=floating]:rounded-lg`,`group-data-[variant=floating]:border`,`group-data-[variant=floating]:border-sidebar-border`,`group-data-[variant=floating]:shadow-sm`),children:o})})]})}function m({className:t,onClick:n,...i}){let{toggleSidebar:o}=d();return(0,s.jsxs)(e.Button,{"data-sidebar":`trigger`,"data-slot":`sidebar-trigger`,variant:`ghost`,color:`secondary`,size:`icon`,className:(0,a.cn)(`size-10 rounded-full [&_svg]:size-6!`,t),onClick:e=>{n?.(e),o()},...i,children:[(0,s.jsx)(r.MenuIcon,{}),(0,s.jsx)(`span`,{className:`sr-only`,children:`Toggle Sidebar`})]})}function h({className:e,...t}){return(0,s.jsx)(`div`,{"data-slot":`sidebar-header`,"data-sidebar":`header`,className:(0,a.cn)(`flex flex-col gap-2 p-2`,e),...t})}function g({className:e,children:t,...n}){let{open:r}=d();return(0,s.jsx)(`div`,{"data-slot":`sidebar-footer`,"data-sidebar":`footer`,className:(0,a.cn)(`flex flex-col gap-2 p-2`,e),...n,children:(0,s.jsxs)(v,{children:[r&&(0,s.jsx)(y,{children:t}),(0,s.jsx)(y,{children:(0,s.jsxs)(`p`,{className:`pt-2 text-center text-xs text-text-positive-subtle`,children:[`Copyright © `,new Date().getFullYear(),`, Lunas.`]})})]})})}function _({className:e,...t}){return(0,s.jsx)(`div`,{"data-slot":`sidebar-content`,"data-sidebar":`content`,className:(0,a.cn)(`flex min-h-0 flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden`,e),...t})}function v({className:e,...t}){return(0,s.jsx)(`ul`,{"data-slot":`sidebar-menu`,"data-sidebar":`menu`,className:(0,a.cn)(`flex w-full min-w-0 flex-col gap-1`,e),...t})}function y({className:e,...t}){return(0,s.jsx)(`li`,{"data-slot":`sidebar-menu-item`,"data-sidebar":`menu-item`,className:(0,a.cn)(`group/menu-item relative`,e),...t})}const b=(0,o.cva)([`peer/menu-button`,`cursor-pointer`,`flex w-full items-center gap-2`,`overflow-hidden rounded-md p-2 outline-hidden`,`truncate text-left font-normal`,`transition-[color,background-color,width,height,padding]`,`active:bg-sidebar-accent active:text-sidebar-accent-foreground`,`disabled:pointer-events-none disabled:opacity-50`,`group-has-data-[sidebar=menu-action]/menu-item:pr-8`,`aria-disabled:pointer-events-none aria-disabled:opacity-50`,`data-[active=true]:bg-sidebar-primary-muted data-[active=true]:font-normal data-[active=true]:text-sidebar-primary`,`data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground`,`group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2!`,`[&>svg]:size-4 [&>svg]:shrink-0`,`[&>span:last-child]:truncate`],{variants:{variant:{default:`hover:bg-sidebar-accent/60 hover:text-sidebar-accent-foreground`,outline:`bg-background shadow-[0_0_0_1px_hsl(var(--sidebar-border))] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))]`},size:{default:`h-8 text-sm`,sm:`h-7 text-xs`,lg:`h-12 text-sm group-data-[collapsible=icon]:p-0!`}},defaultVariants:{variant:`default`,size:`default`}});function x({asChild:e=!1,isActive:n=!1,variant:r=`default`,size:i=`default`,tooltip:o,className:l,...u}){let f=e?c.Slot.Slot:`button`,{state:p}=d(),m=(0,s.jsx)(f,{"data-slot":`sidebar-menu-button`,"data-sidebar":`menu-button`,"data-size":i,"data-active":n,className:(0,a.cn)(b({variant:r,size:i}),l),...u});return o?(typeof o==`string`&&(o={children:o}),(0,s.jsxs)(t.Tooltip,{children:[(0,s.jsx)(t.TooltipTrigger,{asChild:!0,children:m}),(0,s.jsx)(t.TooltipContent,{side:`right`,align:`center`,hidden:p!==`collapsed`,...o})]})):m}Object.defineProperty(exports,"a",{enumerable:!0,get:function(){return x}}),Object.defineProperty(exports,"c",{enumerable:!0,get:function(){return p}}),Object.defineProperty(exports,"i",{enumerable:!0,get:function(){return v}}),Object.defineProperty(exports,"l",{enumerable:!0,get:function(){return f}}),Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return g}}),Object.defineProperty(exports,"o",{enumerable:!0,get:function(){return y}}),Object.defineProperty(exports,"r",{enumerable:!0,get:function(){return h}}),Object.defineProperty(exports,"s",{enumerable:!0,get:function(){return m}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return _}}),Object.defineProperty(exports,"u",{enumerable:!0,get:function(){return d}});
2
+ //# sourceMappingURL=sidebar-core-DQE6ymo4.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sidebar-core-DQE6ymo4.cjs","names":["TooltipProvider","Sheet","SheetContent","SheetHeader","SheetTitle","SheetDescription","Button","MenuIcon","SlotPrimitive","Tooltip","TooltipTrigger","TooltipContent"],"sources":["../packages/components/dialogs/detail-dialog/components/sidebar-core.tsx"],"sourcesContent":["'use client';\n\nimport { createContext, use, useCallback, useEffect, useMemo, useState } from 'react';\n\nimport { MenuIcon } from 'lucide-react';\n\nimport { useIsMobile } from '@customafk/react-toolkit/hooks/useMobile';\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Button } from '@/components/ui/button';\nimport { Sheet, SheetContent, SheetDescription, SheetHeader, SheetTitle } from '@/components/ui/sheet';\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip';\n\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { Slot as SlotPrimitive } from 'radix-ui';\n\nconst SIDEBAR_COOKIE_NAME = 'detail_dialog_sidebar_state';\nconst SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7;\nconst SIDEBAR_WIDTH = '18rem';\nconst SIDEBAR_WIDTH_MOBILE = '18rem';\nconst SIDEBAR_WIDTH_ICON = '3rem';\nconst SIDEBAR_KEYBOARD_SHORTCUT = 'p';\n\ntype SidebarContextProps = {\n /** Current visual state of the sidebar. */\n state: 'expanded' | 'collapsed';\n /** Whether the sidebar is open on desktop. */\n open: boolean;\n /** Setter for the desktop open state. */\n setOpen: (open: boolean) => void;\n /** Whether the sidebar sheet is open on mobile. */\n openMobile: boolean;\n /** Setter for the mobile open state. */\n setOpenMobile: (open: boolean) => void;\n /** `true` when the viewport is considered mobile-sized. */\n isMobile: boolean;\n /** Toggles the sidebar between expanded and collapsed. */\n toggleSidebar: () => void;\n};\n\nconst SidebarContext = createContext<SidebarContextProps | null>(null);\n\n/**\n * Reads the current sidebar open/collapsed state and toggle handler from context.\n * Also used internally by `DetailDialogSidebarRail` in `./sidebar-extras`.\n */\nfunction useSidebar() {\n const context = use(SidebarContext);\n if (!context) {\n throw new Error('useSidebar must be used within a SidebarProvider.');\n }\n return context;\n}\n\n/**\n * Context provider that manages sidebar open/collapsed state and persists it via a cookie.\n *\n * @example\n * ```tsx\n * import { SidebarProvider } from '@customafk/lunas-ui/dialogs/detail-dialog/components/sidebar';\n *\n * <SidebarProvider defaultOpen={true}>\n * <Sidebar collapsible=\"icon\">{...}</Sidebar>\n * </SidebarProvider>\n * ```\n */\nfunction SidebarProvider({\n defaultOpen = true,\n open: openProp,\n onOpenChange: setOpenProp,\n className,\n style,\n children,\n ...props\n}: React.ComponentProps<'div'> & {\n /** Whether the sidebar is open by default (uncontrolled). Defaults to `true`. */\n defaultOpen?: boolean;\n /** Controlled open state. When provided the component becomes controlled. */\n open?: boolean;\n /** Callback fired when the open state changes in controlled mode. */\n onOpenChange?: (open: boolean) => void;\n}) {\n const isMobile = useIsMobile();\n const [openMobile, setOpenMobile] = useState(false);\n\n const [_open, _setOpen] = useState(defaultOpen);\n const open = openProp ?? _open;\n const setOpen = useCallback(\n (value: boolean | ((value: boolean) => boolean)) => {\n const openState = typeof value === 'function' ? value(open) : value;\n if (setOpenProp) {\n setOpenProp(openState);\n } else {\n _setOpen(openState);\n }\n // biome-ignore lint/suspicious/noDocumentCookie: persists sidebar state across page loads\n document.cookie = `${SIDEBAR_COOKIE_NAME}=${openState}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`;\n },\n [setOpenProp, open]\n );\n\n const toggleSidebar = useCallback(() => {\n return isMobile ? setOpenMobile(open => !open) : setOpen(open => !open);\n }, [isMobile, setOpen]);\n\n useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === SIDEBAR_KEYBOARD_SHORTCUT && (event.metaKey || event.ctrlKey)) {\n event.preventDefault();\n toggleSidebar();\n }\n };\n window.addEventListener('keydown', handleKeyDown);\n return () => window.removeEventListener('keydown', handleKeyDown);\n }, [toggleSidebar]);\n\n const state = open ? 'expanded' : 'collapsed';\n\n const contextValue = useMemo<SidebarContextProps>(\n () => ({ state, isMobile, toggleSidebar, open, setOpen, openMobile, setOpenMobile }),\n [state, isMobile, open, setOpen, openMobile, toggleSidebar]\n );\n\n return (\n <SidebarContext.Provider value={contextValue}>\n <TooltipProvider delayDuration={0}>\n <div\n data-slot=\"sidebar-wrapper\"\n style={{ '--sidebar-width': SIDEBAR_WIDTH, '--sidebar-width-icon': SIDEBAR_WIDTH_ICON, ...style } as React.CSSProperties}\n className={cn('group/sidebar-wrapper flex h-full min-h-[85dvh] w-full items-start has-data-[variant=inset]:bg-sidebar', className)}\n {...props}\n >\n {children}\n </div>\n </TooltipProvider>\n </SidebarContext.Provider>\n );\n}\n\n/**\n * Responsive sidebar container that supports desktop icon-collapse and a mobile Sheet overlay.\n *\n * @example\n * ```tsx\n * import { Sidebar } from '@customafk/lunas-ui/dialogs/detail-dialog/components/sidebar';\n *\n * <Sidebar collapsible=\"icon\" side=\"left\">\n * {children}\n * </Sidebar>\n * ```\n */\nfunction Sidebar({\n side = 'left',\n variant = 'sidebar',\n collapsible = 'offcanvas',\n className,\n children,\n ...props\n}: React.ComponentProps<'div'> & {\n /** Which edge the sidebar is anchored to. Defaults to `'left'`. */\n side?: 'left' | 'right';\n /** Visual style variant of the sidebar. Defaults to `'sidebar'`. */\n variant?: 'sidebar' | 'floating' | 'inset';\n /** Collapse behaviour — slides off-canvas, shrinks to icon strip, or stays fixed. Defaults to `'offcanvas'`. */\n collapsible?: 'offcanvas' | 'icon' | 'none';\n}) {\n const { state, isMobile, openMobile, setOpenMobile } = useSidebar();\n\n if (collapsible === 'none') {\n return (\n <div data-slot=\"sidebar\" className={cn('flex h-full w-(--sidebar-width) flex-col bg-sidebar text-sidebar-foreground', className)} {...props}>\n {children}\n </div>\n );\n }\n\n if (isMobile) {\n return (\n <Sheet open={openMobile} onOpenChange={setOpenMobile} {...props}>\n <SheetContent\n data-sidebar=\"sidebar\"\n data-slot=\"sidebar\"\n data-mobile=\"true\"\n className=\"z-20 hidden w-(--sidebar-width) bg-sidebar p-0 text-sidebar-foreground shadow-nav md:flex [&>button]:hidden\"\n style={{ '--sidebar-width': SIDEBAR_WIDTH_MOBILE } as React.CSSProperties}\n side={side}\n >\n <SheetHeader className=\"sr-only\">\n <SheetTitle>Sidebar</SheetTitle>\n <SheetDescription>Displays the mobile sidebar.</SheetDescription>\n </SheetHeader>\n <div className=\"flex h-full w-full flex-col\">{children}</div>\n </SheetContent>\n </Sheet>\n );\n }\n\n return (\n <div\n className=\"group peer hidden text-sidebar-foreground md:block\"\n data-state={state}\n data-collapsible={state === 'collapsed' ? collapsible : ''}\n data-variant={variant}\n data-side={side}\n data-slot=\"sidebar\"\n >\n <div\n data-slot=\"sidebar-gap\"\n className={cn(\n 'relative w-(--sidebar-width) bg-transparent transition-[width] duration-200 ease-linear',\n 'group-data-[collapsible=offcanvas]:w-0',\n 'group-data-[side=right]:rotate-180',\n variant === 'floating' || variant === 'inset'\n ? 'group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]'\n : 'group-data-[collapsible=icon]:w-(--sidebar-width-icon)'\n )}\n />\n <div\n data-slot=\"sidebar-container\"\n className={cn(\n 'absolute inset-y-0 z-20 hidden w-(--sidebar-width) shadow-nav transition-[left,right,width] duration-200 ease-linear md:flex',\n side === 'left'\n ? 'left-0 group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]'\n : 'right-0 group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]',\n // Adjust padding for floating and inset variants.\n variant === 'floating' || variant === 'inset'\n ? 'p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]'\n : 'group-data-[collapsible=icon]:w-(--sidebar-width-icon)',\n className\n )}\n {...props}\n >\n <div\n data-sidebar=\"sidebar\"\n data-slot=\"sidebar-inner\"\n className={cn(\n 'flex size-full flex-col shadow-nav',\n 'group-data-[variant=floating]:rounded-lg',\n 'group-data-[variant=floating]:border',\n 'group-data-[variant=floating]:border-sidebar-border',\n 'group-data-[variant=floating]:shadow-sm'\n )}\n >\n {children}\n </div>\n </div>\n </div>\n );\n}\n\n/**\n * Icon button that toggles the detail-dialog sidebar open or collapsed.\n *\n * @example\n * ```tsx\n * import { DetailDialogSidebarTrigger } from '@customafk/lunas-ui/dialogs/detail-dialog/components/sidebar';\n *\n * <DetailDialogSidebarTrigger />\n * ```\n */\nfunction DetailDialogSidebarTrigger({ className, onClick, ...props }: React.ComponentProps<typeof Button>) {\n const { toggleSidebar } = useSidebar();\n\n return (\n <Button\n data-sidebar=\"trigger\"\n data-slot=\"sidebar-trigger\"\n variant=\"ghost\"\n color=\"secondary\"\n size=\"icon\"\n className={cn('size-10 rounded-full [&_svg]:size-6!', className)}\n onClick={event => {\n onClick?.(event);\n toggleSidebar();\n }}\n {...props}\n >\n <MenuIcon />\n <span className=\"sr-only\">Toggle Sidebar</span>\n </Button>\n );\n}\n\nfunction DetailDialogSidebarHeader({ className, ...props }: React.ComponentProps<'div'>) {\n return <div data-slot=\"sidebar-header\" data-sidebar=\"header\" className={cn('flex flex-col gap-2 p-2', className)} {...props} />;\n}\n\nfunction DetailDialogSidebarFooter({ className, children, ...props }: React.ComponentProps<'div'>) {\n const { open } = useSidebar();\n return (\n <div data-slot=\"sidebar-footer\" data-sidebar=\"footer\" className={cn('flex flex-col gap-2 p-2', className)} {...props}>\n <DetailDialogSidebarMenu>\n {open && <DetailDialogSidebarMenuItem>{children}</DetailDialogSidebarMenuItem>}\n <DetailDialogSidebarMenuItem>\n <p className=\"pt-2 text-center text-xs text-text-positive-subtle\">Copyright © {new Date().getFullYear()}, Lunas.</p>\n </DetailDialogSidebarMenuItem>\n </DetailDialogSidebarMenu>\n </div>\n );\n}\n\nfunction DetailDialogSidebarContent({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sidebar-content\"\n data-sidebar=\"content\"\n className={cn('flex min-h-0 flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden', className)}\n {...props}\n />\n );\n}\n\nfunction DetailDialogSidebarMenu({ className, ...props }: React.ComponentProps<'ul'>) {\n return <ul data-slot=\"sidebar-menu\" data-sidebar=\"menu\" className={cn('flex w-full min-w-0 flex-col gap-1', className)} {...props} />;\n}\n\nfunction DetailDialogSidebarMenuItem({ className, ...props }: React.ComponentProps<'li'>) {\n return <li data-slot=\"sidebar-menu-item\" data-sidebar=\"menu-item\" className={cn('group/menu-item relative', className)} {...props} />;\n}\n\nconst sidebarMenuButtonVariants = cva(\n [\n 'peer/menu-button',\n 'cursor-pointer',\n 'flex w-full items-center gap-2',\n 'overflow-hidden rounded-md p-2 outline-hidden',\n 'truncate text-left font-normal',\n 'transition-[color,background-color,width,height,padding]',\n 'active:bg-sidebar-accent active:text-sidebar-accent-foreground',\n 'disabled:pointer-events-none disabled:opacity-50',\n 'group-has-data-[sidebar=menu-action]/menu-item:pr-8',\n 'aria-disabled:pointer-events-none aria-disabled:opacity-50',\n 'data-[active=true]:bg-sidebar-primary-muted data-[active=true]:font-normal data-[active=true]:text-sidebar-primary',\n 'data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground',\n 'group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2!',\n '[&>svg]:size-4 [&>svg]:shrink-0',\n '[&>span:last-child]:truncate',\n ],\n {\n variants: {\n variant: {\n default: 'hover:bg-sidebar-accent/60 hover:text-sidebar-accent-foreground',\n outline:\n 'bg-background shadow-[0_0_0_1px_hsl(var(--sidebar-border))] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))]',\n },\n size: {\n default: 'h-8 text-sm',\n sm: 'h-7 text-xs',\n lg: 'h-12 text-sm group-data-[collapsible=icon]:p-0!',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n }\n);\n\nfunction DetailDialogSidebarMenuButton({\n asChild = false,\n isActive = false,\n variant = 'default',\n size = 'default',\n tooltip,\n className,\n ...props\n}: React.ComponentProps<'button'> & {\n asChild?: boolean;\n isActive?: boolean;\n tooltip?: string | React.ComponentProps<typeof TooltipContent>;\n} & VariantProps<typeof sidebarMenuButtonVariants>) {\n const Comp = asChild ? SlotPrimitive.Slot : 'button';\n const { state } = useSidebar();\n\n const button = (\n <Comp\n data-slot=\"sidebar-menu-button\"\n data-sidebar=\"menu-button\"\n data-size={size}\n data-active={isActive}\n className={cn(sidebarMenuButtonVariants({ variant, size }), className)}\n {...props}\n />\n );\n\n if (!tooltip) return button;\n\n if (typeof tooltip === 'string') {\n tooltip = { children: tooltip };\n }\n\n return (\n <Tooltip>\n <TooltipTrigger asChild>{button}</TooltipTrigger>\n <TooltipContent side=\"right\" align=\"center\" hidden={state !== 'collapsed'} {...tooltip} />\n </Tooltip>\n );\n}\n\nexport {\n DetailDialogSidebarContent,\n DetailDialogSidebarFooter,\n DetailDialogSidebarHeader,\n DetailDialogSidebarMenu,\n DetailDialogSidebarMenuButton,\n DetailDialogSidebarMenuItem,\n DetailDialogSidebarTrigger,\n Sidebar,\n SidebarProvider,\n // biome-ignore lint/style/useComponentExportOnlyModules: true\n useSidebar,\n};\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ const e=require("./ui/button.cjs"),t=require("./tanstack-form-CNrZQZhn.cjs");let n=require("lucide-react"),r=require("react"),i=require("@customafk/react-toolkit/utils"),a=require("react/jsx-runtime");function o({width:e,className:t,children:n}){return(0,a.jsx)(`div`,{"data-slot":`array-col`,style:e?{width:typeof e==`number`?`${e}px`:e,flexShrink:0}:{flex:1,minWidth:0},className:t,children:n})}function s({className:e,children:t}){return(0,a.jsxs)(`div`,{"data-slot":`array-header-row`,className:(0,i.cn)(`mb-1 flex items-center gap-2 px-1 text-xs font-medium text-text-positive-weak`,e),children:[t,(0,a.jsx)(`div`,{className:`min-w-8 w-8 shrink-0`})]})}function c({defaultRow:o,children:s,addLabel:c=`Thêm hàng`,className:l}){let u=t.G(),d=u.state.value??[],f=(0,r.useCallback)(()=>{u.pushValue({...o})},[u,o]),p=(0,r.useCallback)(e=>{u.removeValue(e)},[u]);return(0,a.jsxs)(`div`,{"data-slot":`simple-array-field`,className:(0,i.cn)(`flex flex-col gap-2`,l),children:[d.map((t,r)=>(0,a.jsxs)(`div`,{className:`flex items-start gap-2`,children:[s(r),(0,a.jsx)(e.Button,{type:`button`,size:`icon`,variant:`ghost`,color:`danger`,className:`min-w-8`,onClick:()=>p(r),children:(0,a.jsx)(n.Trash2Icon,{size:14})})]},r)),(0,a.jsx)(`div`,{children:(0,a.jsxs)(e.Button,{type:`button`,variant:`outline`,color:`muted`,size:`xs`,onClick:f,children:[(0,a.jsx)(n.PlusIcon,{size:13}),c]})})]})}exports.ArrayCol=o,exports.ArrayHeaderRow=s,exports.SimpleArrayField=c;
2
+ //# sourceMappingURL=simple-array-field-4paKpxXk.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"simple-array-field-4paKpxXk.cjs","names":["useTanStackFieldContext","Button","Trash2Icon","PlusIcon"],"sources":["../packages/components/features/tanstack-form/components/atoms/simple-array-field.tsx"],"sourcesContent":["'use client';\n\nimport { useCallback } from 'react';\n\nimport { PlusIcon, Trash2Icon } from 'lucide-react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Button } from '@/components/ui/button';\n\nimport { useTanStackFieldContext } from '../form-context';\n\n// ─── ArrayCol ──────────────────────────────────────────────────────────────\n\ntype ArrayColProps = {\n /**\n * Fixed column width as a pixel number (e.g. `96`) or any CSS string\n * (e.g. `'8rem'`, `'20%'`). Omit to let the column expand and fill the\n * remaining row space (`flex: 1`).\n */\n width?: number | string;\n className?: string;\n children: React.ReactNode;\n};\n\n/**\n * Layout helper for columns inside a `SimpleArrayField` row. Controls width\n * without repeating `<div className=\"w-24\">` or `<div className=\"flex-1\">`.\n *\n * @example\n * <SimpleArrayField defaultRow={...}>\n * {i => (\n * <>\n * <ArrayCol> // flex-1 — takes remaining space\n * <AppField name={`items[${i}].name`}>...</AppField>\n * </ArrayCol>\n * <ArrayCol width={96}> // 96 px fixed\n * <AppField name={`items[${i}].qty`}>...</AppField>\n * </ArrayCol>\n * <ArrayCol width=\"8rem\"> // CSS string\n * <AppField name={`items[${i}].tax`}>...</AppField>\n * </ArrayCol>\n * </>\n * )}\n * </SimpleArrayField>\n */\nexport function ArrayCol({ width, className, children }: ArrayColProps) {\n const style: React.CSSProperties = width ? { width: typeof width === 'number' ? `${width}px` : width, flexShrink: 0 } : { flex: 1, minWidth: 0 };\n\n return (\n <div data-slot=\"array-col\" style={style} className={className}>\n {children}\n </div>\n );\n}\n\n// ─── ArrayHeaderRow ────────────────────────────────────────────────────────\n\ntype ArrayHeaderRowProps = {\n className?: string;\n children: React.ReactNode;\n};\n\n/**\n * Styled header row for a `SimpleArrayField` table. Place it directly above\n * `<SimpleArrayField>` and use `<ArrayCol>` children with text labels to align\n * headers with their columns. A spacer matching the delete-button width is\n * appended automatically.\n *\n * @example\n * <ArrayHeaderRow>\n * <ArrayCol>Name</ArrayCol>\n * <ArrayCol width={96}>Price</ArrayCol>\n * <ArrayCol width={80}>Qty</ArrayCol>\n * </ArrayHeaderRow>\n * <SimpleArrayField defaultRow={...}>\n * {i => (...)}\n * </SimpleArrayField>\n */\nexport function ArrayHeaderRow({ className, children }: ArrayHeaderRowProps) {\n return (\n <div data-slot=\"array-header-row\" className={cn('mb-1 flex items-center gap-2 px-1 text-xs font-medium text-text-positive-weak', className)}>\n {children}\n {/* spacer matching the delete icon button width */}\n <div className=\"min-w-8 w-8 shrink-0\" />\n </div>\n );\n}\n\n// ─── SimpleArrayField ──────────────────────────────────────────────────────\n\nexport type SimpleArrayFieldProps<T> = {\n /**\n * Shape of a brand-new empty row appended when the user clicks \"Add row\".\n */\n defaultRow: T;\n /**\n * Render function called once per row. Receives the zero-based row `index`\n * so you can build field paths like `` `items[${index}].name` ``.\n */\n children: (index: number) => React.ReactNode;\n /** Label on the add button. Defaults to `'Add row'`. */\n addLabel?: string;\n className?: string;\n};\n\n/**\n * Array field wrapper that manages rows (add / remove) while letting you\n * freely compose any fields inside each row.\n *\n * @example\n * const { AppForm, AppField } = useTanStackForm({ defaultValues: { items: [] } });\n *\n * <AppForm>\n * <AppField name=\"items\">\n * {({ SimpleArrayField }) => (\n * <SimpleArrayField defaultRow={{ name: null, qty: null }}>\n * {(i) => (\n * <div className=\"flex gap-2\">\n * <AppField name={`items[${i}].name`}>\n * {({ SimpleTextField }) => <SimpleTextField label=\"Name\" />}\n * </AppField>\n * <AppField name={`items[${i}].qty`}>\n * {({ SimpleNumberField }) => <SimpleNumberField label=\"Qty\" />}\n * </AppField>\n * </div>\n * )}\n * </SimpleArrayField>\n * )}\n * </AppField>\n * </AppForm>\n */\nexport function SimpleArrayField<T>({ defaultRow, children, addLabel = 'Thêm hàng', className }: SimpleArrayFieldProps<T>) {\n const field = useTanStackFieldContext<T[]>();\n const rows = field.state.value ?? [];\n\n const addRow = useCallback(() => {\n field.pushValue({ ...defaultRow } as T);\n }, [field, defaultRow]);\n\n const removeRow = useCallback(\n (index: number) => {\n field.removeValue(index);\n },\n [field]\n );\n\n return (\n <div data-slot=\"simple-array-field\" className={cn('flex flex-col gap-2', className)}>\n {rows.map((_, i) => (\n // biome-ignore lint/suspicious/noArrayIndexKey: index is the stable identity for form rows\n <div key={i} className=\"flex items-start gap-2\">\n {children(i)}\n <Button type=\"button\" size=\"icon\" variant=\"ghost\" color=\"danger\" className=\"min-w-8\" onClick={() => removeRow(i)}>\n <Trash2Icon size={14} />\n </Button>\n </div>\n ))}\n\n <div>\n <Button type=\"button\" variant=\"outline\" color=\"muted\" size=\"xs\" onClick={addRow}>\n <PlusIcon size={13} />\n {addLabel}\n </Button>\n </div>\n </div>\n );\n}\n"],"mappings":"yMA8CA,SAAgB,EAAS,CAAE,QAAO,YAAW,YAA2B,CAGtE,OACE,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,YAAU,YAAY,MAHM,EAAQ,CAAE,MAAO,OAAO,GAAU,SAAW,GAAG,EAAM,IAAM,EAAO,WAAY,CAAE,EAAI,CAAE,KAAM,EAAG,SAAU,CAAE,EAGzF,YACjD,UACE,CAAA,CAET,CAyBA,SAAgB,EAAe,CAAE,YAAW,YAAiC,CAC3E,OACE,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,YAAU,mBAAmB,WAAA,EAAA,EAAA,GAAA,CAAc,gFAAiF,CAAS,WAA1I,CACG,GAED,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAU,sBAAwB,CAAA,CACpC,GAET,CA6CA,SAAgB,EAAoB,CAAE,aAAY,WAAU,WAAW,YAAa,aAAuC,CACzH,IAAM,EAAQA,EAAAA,EAA6B,EACrC,EAAO,EAAM,MAAM,OAAS,CAAC,EAE7B,GAAA,EAAA,EAAA,YAAA,KAA2B,CAC/B,EAAM,UAAU,CAAE,GAAG,CAAW,CAAM,CACxC,EAAG,CAAC,EAAO,CAAU,CAAC,EAEhB,GAAA,EAAA,EAAA,YAAA,CACH,GAAkB,CACjB,EAAM,YAAY,CAAK,CACzB,EACA,CAAC,CAAK,CACR,EAEA,OACE,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,YAAU,qBAAqB,WAAA,EAAA,EAAA,GAAA,CAAc,sBAAuB,CAAS,WAAlF,CACG,EAAK,KAAK,EAAG,KAEZ,EAAA,EAAA,KAAA,CAAC,MAAD,CAAa,UAAU,kCAAvB,CACG,EAAS,CAAC,GACX,EAAA,EAAA,IAAA,CAACC,EAAAA,OAAD,CAAQ,KAAK,SAAS,KAAK,OAAO,QAAQ,QAAQ,MAAM,SAAS,UAAU,UAAU,YAAe,EAAU,CAAC,YAC7G,EAAA,EAAA,IAAA,CAACC,EAAAA,WAAD,CAAY,KAAM,EAAK,CAAA,CACjB,CAAA,CACL,GALK,CAKL,CACN,GAED,EAAA,EAAA,IAAA,CAAC,MAAD,CAAA,UACE,EAAA,EAAA,KAAA,CAACD,EAAAA,OAAD,CAAQ,KAAK,SAAS,QAAQ,UAAU,MAAM,QAAQ,KAAK,KAAK,QAAS,WAAzE,EACE,EAAA,EAAA,IAAA,CAACE,EAAAA,SAAD,CAAU,KAAM,EAAK,CAAA,EACpB,CACK,GACL,CAAA,CACF,GAET"}
@@ -0,0 +1,2 @@
1
+ import{Button as e}from"./ui/button.mjs";import{G as t}from"./tanstack-form-PC9YNeeo.mjs";import{PlusIcon as n,Trash2Icon as r}from"lucide-react";import{useCallback as i}from"react";import{cn as a}from"@customafk/react-toolkit/utils";import{jsx as o,jsxs as s}from"react/jsx-runtime";function c({width:e,className:t,children:n}){return o(`div`,{"data-slot":`array-col`,style:e?{width:typeof e==`number`?`${e}px`:e,flexShrink:0}:{flex:1,minWidth:0},className:t,children:n})}function l({className:e,children:t}){return s(`div`,{"data-slot":`array-header-row`,className:a(`mb-1 flex items-center gap-2 px-1 text-xs font-medium text-text-positive-weak`,e),children:[t,o(`div`,{className:`min-w-8 w-8 shrink-0`})]})}function u({defaultRow:c,children:l,addLabel:u=`Thêm hàng`,className:d}){let f=t(),p=f.state.value??[],m=i(()=>{f.pushValue({...c})},[f,c]),h=i(e=>{f.removeValue(e)},[f]);return s(`div`,{"data-slot":`simple-array-field`,className:a(`flex flex-col gap-2`,d),children:[p.map((t,n)=>s(`div`,{className:`flex items-start gap-2`,children:[l(n),o(e,{type:`button`,size:`icon`,variant:`ghost`,color:`danger`,className:`min-w-8`,onClick:()=>h(n),children:o(r,{size:14})})]},n)),o(`div`,{children:s(e,{type:`button`,variant:`outline`,color:`muted`,size:`xs`,onClick:m,children:[o(n,{size:13}),u]})})]})}export{c as ArrayCol,l as ArrayHeaderRow,u as SimpleArrayField};
2
+ //# sourceMappingURL=simple-array-field-C5XdemXa.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"simple-array-field-C5XdemXa.mjs","names":[],"sources":["../packages/components/features/tanstack-form/components/atoms/simple-array-field.tsx"],"sourcesContent":["'use client';\n\nimport { useCallback } from 'react';\n\nimport { PlusIcon, Trash2Icon } from 'lucide-react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Button } from '@/components/ui/button';\n\nimport { useTanStackFieldContext } from '../form-context';\n\n// ─── ArrayCol ──────────────────────────────────────────────────────────────\n\ntype ArrayColProps = {\n /**\n * Fixed column width as a pixel number (e.g. `96`) or any CSS string\n * (e.g. `'8rem'`, `'20%'`). Omit to let the column expand and fill the\n * remaining row space (`flex: 1`).\n */\n width?: number | string;\n className?: string;\n children: React.ReactNode;\n};\n\n/**\n * Layout helper for columns inside a `SimpleArrayField` row. Controls width\n * without repeating `<div className=\"w-24\">` or `<div className=\"flex-1\">`.\n *\n * @example\n * <SimpleArrayField defaultRow={...}>\n * {i => (\n * <>\n * <ArrayCol> // flex-1 — takes remaining space\n * <AppField name={`items[${i}].name`}>...</AppField>\n * </ArrayCol>\n * <ArrayCol width={96}> // 96 px fixed\n * <AppField name={`items[${i}].qty`}>...</AppField>\n * </ArrayCol>\n * <ArrayCol width=\"8rem\"> // CSS string\n * <AppField name={`items[${i}].tax`}>...</AppField>\n * </ArrayCol>\n * </>\n * )}\n * </SimpleArrayField>\n */\nexport function ArrayCol({ width, className, children }: ArrayColProps) {\n const style: React.CSSProperties = width ? { width: typeof width === 'number' ? `${width}px` : width, flexShrink: 0 } : { flex: 1, minWidth: 0 };\n\n return (\n <div data-slot=\"array-col\" style={style} className={className}>\n {children}\n </div>\n );\n}\n\n// ─── ArrayHeaderRow ────────────────────────────────────────────────────────\n\ntype ArrayHeaderRowProps = {\n className?: string;\n children: React.ReactNode;\n};\n\n/**\n * Styled header row for a `SimpleArrayField` table. Place it directly above\n * `<SimpleArrayField>` and use `<ArrayCol>` children with text labels to align\n * headers with their columns. A spacer matching the delete-button width is\n * appended automatically.\n *\n * @example\n * <ArrayHeaderRow>\n * <ArrayCol>Name</ArrayCol>\n * <ArrayCol width={96}>Price</ArrayCol>\n * <ArrayCol width={80}>Qty</ArrayCol>\n * </ArrayHeaderRow>\n * <SimpleArrayField defaultRow={...}>\n * {i => (...)}\n * </SimpleArrayField>\n */\nexport function ArrayHeaderRow({ className, children }: ArrayHeaderRowProps) {\n return (\n <div data-slot=\"array-header-row\" className={cn('mb-1 flex items-center gap-2 px-1 text-xs font-medium text-text-positive-weak', className)}>\n {children}\n {/* spacer matching the delete icon button width */}\n <div className=\"min-w-8 w-8 shrink-0\" />\n </div>\n );\n}\n\n// ─── SimpleArrayField ──────────────────────────────────────────────────────\n\nexport type SimpleArrayFieldProps<T> = {\n /**\n * Shape of a brand-new empty row appended when the user clicks \"Add row\".\n */\n defaultRow: T;\n /**\n * Render function called once per row. Receives the zero-based row `index`\n * so you can build field paths like `` `items[${index}].name` ``.\n */\n children: (index: number) => React.ReactNode;\n /** Label on the add button. Defaults to `'Add row'`. */\n addLabel?: string;\n className?: string;\n};\n\n/**\n * Array field wrapper that manages rows (add / remove) while letting you\n * freely compose any fields inside each row.\n *\n * @example\n * const { AppForm, AppField } = useTanStackForm({ defaultValues: { items: [] } });\n *\n * <AppForm>\n * <AppField name=\"items\">\n * {({ SimpleArrayField }) => (\n * <SimpleArrayField defaultRow={{ name: null, qty: null }}>\n * {(i) => (\n * <div className=\"flex gap-2\">\n * <AppField name={`items[${i}].name`}>\n * {({ SimpleTextField }) => <SimpleTextField label=\"Name\" />}\n * </AppField>\n * <AppField name={`items[${i}].qty`}>\n * {({ SimpleNumberField }) => <SimpleNumberField label=\"Qty\" />}\n * </AppField>\n * </div>\n * )}\n * </SimpleArrayField>\n * )}\n * </AppField>\n * </AppForm>\n */\nexport function SimpleArrayField<T>({ defaultRow, children, addLabel = 'Thêm hàng', className }: SimpleArrayFieldProps<T>) {\n const field = useTanStackFieldContext<T[]>();\n const rows = field.state.value ?? [];\n\n const addRow = useCallback(() => {\n field.pushValue({ ...defaultRow } as T);\n }, [field, defaultRow]);\n\n const removeRow = useCallback(\n (index: number) => {\n field.removeValue(index);\n },\n [field]\n );\n\n return (\n <div data-slot=\"simple-array-field\" className={cn('flex flex-col gap-2', className)}>\n {rows.map((_, i) => (\n // biome-ignore lint/suspicious/noArrayIndexKey: index is the stable identity for form rows\n <div key={i} className=\"flex items-start gap-2\">\n {children(i)}\n <Button type=\"button\" size=\"icon\" variant=\"ghost\" color=\"danger\" className=\"min-w-8\" onClick={() => removeRow(i)}>\n <Trash2Icon size={14} />\n </Button>\n </div>\n ))}\n\n <div>\n <Button type=\"button\" variant=\"outline\" color=\"muted\" size=\"xs\" onClick={addRow}>\n <PlusIcon size={13} />\n {addLabel}\n </Button>\n </div>\n </div>\n );\n}\n"],"mappings":"4RA8CA,SAAgB,EAAS,CAAE,QAAO,YAAW,YAA2B,CAGtE,OACE,EAAC,MAAD,CAAK,YAAU,YAAY,MAHM,EAAQ,CAAE,MAAO,OAAO,GAAU,SAAW,GAAG,EAAM,IAAM,EAAO,WAAY,CAAE,EAAI,CAAE,KAAM,EAAG,SAAU,CAAE,EAGzF,YACjD,UACE,CAAA,CAET,CAyBA,SAAgB,EAAe,CAAE,YAAW,YAAiC,CAC3E,OACE,EAAC,MAAD,CAAK,YAAU,mBAAmB,UAAW,EAAG,gFAAiF,CAAS,WAA1I,CACG,EAED,EAAC,MAAD,CAAK,UAAU,sBAAwB,CAAA,CACpC,GAET,CA6CA,SAAgB,EAAoB,CAAE,aAAY,WAAU,WAAW,YAAa,aAAuC,CACzH,IAAM,EAAQ,EAA6B,EACrC,EAAO,EAAM,MAAM,OAAS,CAAC,EAE7B,EAAS,MAAkB,CAC/B,EAAM,UAAU,CAAE,GAAG,CAAW,CAAM,CACxC,EAAG,CAAC,EAAO,CAAU,CAAC,EAEhB,EAAY,EACf,GAAkB,CACjB,EAAM,YAAY,CAAK,CACzB,EACA,CAAC,CAAK,CACR,EAEA,OACE,EAAC,MAAD,CAAK,YAAU,qBAAqB,UAAW,EAAG,sBAAuB,CAAS,WAAlF,CACG,EAAK,KAAK,EAAG,IAEZ,EAAC,MAAD,CAAa,UAAU,kCAAvB,CACG,EAAS,CAAC,EACX,EAAC,EAAD,CAAQ,KAAK,SAAS,KAAK,OAAO,QAAQ,QAAQ,MAAM,SAAS,UAAU,UAAU,YAAe,EAAU,CAAC,WAC7G,EAAC,EAAD,CAAY,KAAM,EAAK,CAAA,CACjB,CAAA,CACL,GALK,CAKL,CACN,EAED,EAAC,MAAD,CAAA,SACE,EAAC,EAAD,CAAQ,KAAK,SAAS,QAAQ,UAAU,MAAM,QAAQ,KAAK,KAAK,QAAS,WAAzE,CACE,EAAC,EAAD,CAAU,KAAM,EAAK,CAAA,EACpB,CACK,GACL,CAAA,CACF,GAET"}