@customafk/lunas-ui 0.0.62 → 0.0.63

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 (325) hide show
  1. package/dist/{add-new-LGex5x9J.cjs → add-new-C2dDiCV3.cjs} +1 -1
  2. package/dist/{add-new-LGex5x9J.cjs.map → add-new-C2dDiCV3.cjs.map} +1 -1
  3. package/dist/{add-new-VnpqRAAB.js → add-new-Dw0uZWxo.js} +1 -1
  4. package/dist/{add-new-VnpqRAAB.js.map → add-new-Dw0uZWxo.js.map} +1 -1
  5. package/dist/avatar-Bp69hha6.js +2 -0
  6. package/dist/avatar-Bp69hha6.js.map +1 -0
  7. package/dist/avatar-CRQdBYW5.cjs +2 -0
  8. package/dist/avatar-CRQdBYW5.cjs.map +1 -0
  9. package/dist/{button-DmNWC9JF.d.cts → button-B_r8XsfH.d.ts} +5 -5
  10. package/dist/{button-CwL7dO-u.d.ts → button-BtvqPQbl.d.cts} +4 -4
  11. package/dist/{calendar-BgoGbit6.js → calendar-BW3whtDD.js} +1 -1
  12. package/dist/{calendar-BgoGbit6.js.map → calendar-BW3whtDD.js.map} +1 -1
  13. package/dist/{calendar-CrtbhiDy.cjs → calendar-Cd2aQCHB.cjs} +1 -1
  14. package/dist/{calendar-CrtbhiDy.cjs.map → calendar-Cd2aQCHB.cjs.map} +1 -1
  15. package/dist/cards/simple-card.d.ts +2 -2
  16. package/dist/{command-COUM-XfY.cjs → command-B9nlrxXh.cjs} +1 -1
  17. package/dist/{command-COUM-XfY.cjs.map → command-B9nlrxXh.cjs.map} +1 -1
  18. package/dist/{command-DNfCX3KZ.js → command-DKD5gHi_.js} +1 -1
  19. package/dist/{command-DNfCX3KZ.js.map → command-DKD5gHi_.js.map} +1 -1
  20. package/dist/{command-USUF3JZz.d.ts → command-DewLG5N0.d.ts} +12 -12
  21. package/dist/{command-BQPzYASM.d.cts → command-tq_xgJ8Q.d.cts} +12 -12
  22. package/dist/data-display/country.d.ts +1 -1
  23. package/dist/data-display/empty.d.ts +2 -2
  24. package/dist/data-display/role-badge.d.ts +1 -1
  25. package/dist/data-display/statistic.d.cts +2 -2
  26. package/dist/data-display/statistic.d.ts +2 -2
  27. package/dist/{dialog-Bw_T5aco.d.cts → dialog-DI0dG1nN.d.cts} +12 -12
  28. package/dist/{dialog-DRDVtDc5.d.ts → dialog-Ddyl2CZg.d.ts} +12 -12
  29. package/dist/dialogs/detail-dialog/component/sidebar.cjs +1 -1
  30. package/dist/dialogs/detail-dialog/component/sidebar.d.cts +30 -30
  31. package/dist/dialogs/detail-dialog/component/sidebar.d.ts +28 -28
  32. package/dist/dialogs/detail-dialog/component/sidebar.js +1 -1
  33. package/dist/dialogs/detail-dialog/index.cjs +1 -1
  34. package/dist/dialogs/detail-dialog/index.js +1 -1
  35. package/dist/dialogs/form-dialog.cjs +1 -1
  36. package/dist/dialogs/form-dialog.cjs.map +1 -1
  37. package/dist/dialogs/form-dialog.d.ts +2 -2
  38. package/dist/dialogs/form-dialog.js +1 -1
  39. package/dist/dialogs/form-dialog.js.map +1 -1
  40. package/dist/drawer-BbQKog4D.js +2 -0
  41. package/dist/drawer-BbQKog4D.js.map +1 -0
  42. package/dist/drawer-vqMdOZtq.cjs +2 -0
  43. package/dist/drawer-vqMdOZtq.cjs.map +1 -0
  44. package/dist/{dropdown-menu-CfHXIhdy.cjs → dropdown-menu-BtNJk8EZ.cjs} +1 -1
  45. package/dist/{dropdown-menu-CfHXIhdy.cjs.map → dropdown-menu-BtNJk8EZ.cjs.map} +1 -1
  46. package/dist/{dropdown-menu-t-SeMS1_.js → dropdown-menu-Cn96vqMy.js} +1 -1
  47. package/dist/{dropdown-menu-t-SeMS1_.js.map → dropdown-menu-Cn96vqMy.js.map} +1 -1
  48. package/dist/forms/combobox-field.cjs +1 -1
  49. package/dist/forms/combobox-field.d.cts +2 -2
  50. package/dist/forms/combobox-field.d.ts +2 -2
  51. package/dist/forms/combobox-field.js +1 -1
  52. package/dist/forms/date-field.cjs +1 -1
  53. package/dist/forms/date-field.d.cts +2 -2
  54. package/dist/forms/date-field.d.ts +2 -2
  55. package/dist/forms/date-field.js +1 -1
  56. package/dist/forms/form-wrapper.d.cts +2 -2
  57. package/dist/forms/form-wrapper.d.ts +2 -2
  58. package/dist/forms/multi-select-field.cjs +1 -1
  59. package/dist/forms/multi-select-field.d.cts +2 -2
  60. package/dist/forms/multi-select-field.d.ts +2 -2
  61. package/dist/forms/multi-select-field.js +1 -1
  62. package/dist/forms/number-field.cjs +1 -1
  63. package/dist/forms/number-field.d.cts +2 -2
  64. package/dist/forms/number-field.d.ts +2 -2
  65. package/dist/forms/number-field.js +1 -1
  66. package/dist/forms/password-field.cjs +1 -1
  67. package/dist/forms/password-field.d.cts +2 -2
  68. package/dist/forms/password-field.d.ts +2 -2
  69. package/dist/forms/password-field.js +1 -1
  70. package/dist/forms/select-field.cjs +1 -1
  71. package/dist/forms/select-field.d.cts +2 -2
  72. package/dist/forms/select-field.d.ts +2 -2
  73. package/dist/forms/select-field.js +1 -1
  74. package/dist/forms/switch-field.cjs +1 -1
  75. package/dist/forms/switch-field.d.cts +2 -2
  76. package/dist/forms/switch-field.d.ts +2 -2
  77. package/dist/forms/switch-field.js +1 -1
  78. package/dist/forms/text-field.cjs +1 -1
  79. package/dist/forms/text-field.d.cts +2 -2
  80. package/dist/forms/text-field.d.ts +2 -2
  81. package/dist/forms/text-field.js +1 -1
  82. package/dist/forms/textarea-field.cjs +1 -1
  83. package/dist/forms/textarea-field.d.cts +2 -2
  84. package/dist/forms/textarea-field.d.ts +2 -2
  85. package/dist/forms/textarea-field.js +1 -1
  86. package/dist/{input-i5Nm0R1X.js → input-B0Q1kBoj.js} +1 -1
  87. package/dist/{input-i5Nm0R1X.js.map → input-B0Q1kBoj.js.map} +1 -1
  88. package/dist/{input-vLuNZody.d.ts → input-B3A9FFIr.d.ts} +3 -3
  89. package/dist/{input-Bt7b3-NW.cjs → input-BxXRqpc1.cjs} +1 -1
  90. package/dist/{input-Bt7b3-NW.cjs.map → input-BxXRqpc1.cjs.map} +1 -1
  91. package/dist/{input-DRU216h-.d.cts → input-CBmfFkSA.d.cts} +3 -3
  92. package/dist/layouts/app-layout/index.cjs +1 -1
  93. package/dist/layouts/app-layout/index.d.cts +3 -3
  94. package/dist/layouts/app-layout/index.d.ts +28 -28
  95. package/dist/layouts/app-layout/index.js +1 -1
  96. package/dist/layouts/flex.d.cts +2 -2
  97. package/dist/layouts/flex.d.ts +2 -2
  98. package/dist/layouts/service-layout/index.cjs +2 -0
  99. package/dist/layouts/service-layout/index.cjs.map +1 -0
  100. package/dist/layouts/service-layout/index.d.cts +114 -0
  101. package/dist/layouts/service-layout/index.d.ts +114 -0
  102. package/dist/layouts/service-layout/index.js +2 -0
  103. package/dist/layouts/service-layout/index.js.map +1 -0
  104. package/dist/{multi-select-CaBcDGi6.js → multi-select-Bp7nkNEB.js} +2 -2
  105. package/dist/{multi-select-CaBcDGi6.js.map → multi-select-Bp7nkNEB.js.map} +1 -1
  106. package/dist/{multi-select-C8kzA628.cjs → multi-select-CGe8Mg3n.cjs} +2 -2
  107. package/dist/{multi-select-C8kzA628.cjs.map → multi-select-CGe8Mg3n.cjs.map} +1 -1
  108. package/dist/{popover-BsF6vWTX.cjs → popover-ByL6Igxn.cjs} +1 -1
  109. package/dist/{popover-BsF6vWTX.cjs.map → popover-ByL6Igxn.cjs.map} +1 -1
  110. package/dist/{popover-CT9ZjjNA.js → popover-DMt7GPSm.js} +1 -1
  111. package/dist/{popover-CT9ZjjNA.js.map → popover-DMt7GPSm.js.map} +1 -1
  112. package/dist/{progress-PzPWivBh.js → progress-CBZMOdvp.js} +1 -1
  113. package/dist/{progress-PzPWivBh.js.map → progress-CBZMOdvp.js.map} +1 -1
  114. package/dist/{progress-BhSNuH1w.cjs → progress-CO0tL2yC.cjs} +1 -1
  115. package/dist/{progress-BhSNuH1w.cjs.map → progress-CO0tL2yC.cjs.map} +1 -1
  116. package/dist/{refresh-B2wYinm5.cjs → refresh-BVSXOk3A.cjs} +1 -1
  117. package/dist/{refresh-B2wYinm5.cjs.map → refresh-BVSXOk3A.cjs.map} +1 -1
  118. package/dist/{refresh-BMR_jPST.js → refresh-CHzDlf3i.js} +1 -1
  119. package/dist/{refresh-BMR_jPST.js.map → refresh-CHzDlf3i.js.map} +1 -1
  120. package/dist/{scroll-area-F3yESo8d.js → scroll-area-C4Mg89Qh.js} +1 -1
  121. package/dist/{scroll-area-F3yESo8d.js.map → scroll-area-C4Mg89Qh.js.map} +1 -1
  122. package/dist/{scroll-area-CbABlDpy.cjs → scroll-area-qPdEy4lg.cjs} +1 -1
  123. package/dist/{scroll-area-CbABlDpy.cjs.map → scroll-area-qPdEy4lg.cjs.map} +1 -1
  124. package/dist/{search-input-BsnMUPtZ.cjs → search-input-BXAnx2q9.cjs} +2 -2
  125. package/dist/{search-input-BsnMUPtZ.cjs.map → search-input-BXAnx2q9.cjs.map} +1 -1
  126. package/dist/{search-input-tivZy8LE.js → search-input-BxNMZVG4.js} +2 -2
  127. package/dist/{search-input-tivZy8LE.js.map → search-input-BxNMZVG4.js.map} +1 -1
  128. package/dist/{select-_oIGH0ax.js → select-CijI0HX0.js} +1 -1
  129. package/dist/{select-_oIGH0ax.js.map → select-CijI0HX0.js.map} +1 -1
  130. package/dist/{select-S75hVYoR.cjs → select-oxr4KoHx.cjs} +1 -1
  131. package/dist/{select-S75hVYoR.cjs.map → select-oxr4KoHx.cjs.map} +1 -1
  132. package/dist/{separator-0LK1LCy9.d.ts → separator-Cr_2vFm6.d.ts} +3 -3
  133. package/dist/{separator-BJoqBpEK.d.cts → separator-DT79vOG-.d.cts} +3 -3
  134. package/dist/{separator-CxCq7NYP.js → separator-DW2PaiUK.js} +1 -1
  135. package/dist/{separator-CxCq7NYP.js.map → separator-DW2PaiUK.js.map} +1 -1
  136. package/dist/{separator-hulDSW7B.cjs → separator-JGL-8B0V.cjs} +1 -1
  137. package/dist/{separator-hulDSW7B.cjs.map → separator-JGL-8B0V.cjs.map} +1 -1
  138. package/dist/{sheet-amjZQ7nX.js → sheet-BumlzKcW.js} +1 -1
  139. package/dist/{sheet-amjZQ7nX.js.map → sheet-BumlzKcW.js.map} +1 -1
  140. package/dist/{sheet-D8iW1o50.cjs → sheet-slcLNlWv.cjs} +1 -1
  141. package/dist/{sheet-D8iW1o50.cjs.map → sheet-slcLNlWv.cjs.map} +1 -1
  142. package/dist/{sidebar-BwIH2lFJ.cjs → sidebar-BWhRjoI9.cjs} +2 -2
  143. package/dist/{sidebar-BwIH2lFJ.cjs.map → sidebar-BWhRjoI9.cjs.map} +1 -1
  144. package/dist/{sidebar-Cf5tv_x0.js → sidebar-DwA61Am0.js} +2 -2
  145. package/dist/{sidebar-Cf5tv_x0.js.map → sidebar-DwA61Am0.js.map} +1 -1
  146. package/dist/{switch-BeQqTAw4.js → switch-32ewlnXt.js} +1 -1
  147. package/dist/{switch-BeQqTAw4.js.map → switch-32ewlnXt.js.map} +1 -1
  148. package/dist/{switch-BN4ghEjT.cjs → switch-BCOPCdXH.cjs} +1 -1
  149. package/dist/{switch-BN4ghEjT.cjs.map → switch-BCOPCdXH.cjs.map} +1 -1
  150. package/dist/table/index.cjs +1 -1
  151. package/dist/table/index.d.cts +2 -2
  152. package/dist/table/index.d.ts +2 -2
  153. package/dist/table/index.js +1 -1
  154. package/dist/{table-Bz4GB66J.cjs → table-6BtDTiv_.cjs} +2 -2
  155. package/dist/{table-Bz4GB66J.cjs.map → table-6BtDTiv_.cjs.map} +1 -1
  156. package/dist/{table-Fby8ksbK.js → table-CachGeLA.js} +2 -2
  157. package/dist/{table-Fby8ksbK.js.map → table-CachGeLA.js.map} +1 -1
  158. package/dist/tabs-BYS9bv-R.cjs +2 -0
  159. package/dist/tabs-BYS9bv-R.cjs.map +1 -0
  160. package/dist/tabs-D4Q78tF2.js +2 -0
  161. package/dist/tabs-D4Q78tF2.js.map +1 -0
  162. package/dist/{textarea-CWLU6cai.cjs → textarea-BEPen5oo.cjs} +1 -1
  163. package/dist/{textarea-CWLU6cai.cjs.map → textarea-BEPen5oo.cjs.map} +1 -1
  164. package/dist/{textarea-S2APrJU-.js → textarea-BI5mw0Vy.js} +1 -1
  165. package/dist/{textarea-S2APrJU-.js.map → textarea-BI5mw0Vy.js.map} +1 -1
  166. package/dist/{title-DiaFg5B5.js → title-CtD4oOTk.js} +1 -1
  167. package/dist/{title-DiaFg5B5.js.map → title-CtD4oOTk.js.map} +1 -1
  168. package/dist/{title-DMOj1cgG.cjs → title-sD8UJhwY.cjs} +1 -1
  169. package/dist/{title-DMOj1cgG.cjs.map → title-sD8UJhwY.cjs.map} +1 -1
  170. package/dist/{toggle-CYHeyOUa.d.ts → toggle-BAcB5uqb.d.ts} +5 -5
  171. package/dist/{toggle-BLlf4Xgl.d.cts → toggle-BXosB_DV.d.cts} +5 -5
  172. package/dist/{toggle-BrHo4W70.cjs → toggle-Cicuy0bA.cjs} +1 -1
  173. package/dist/{toggle-BrHo4W70.cjs.map → toggle-Cicuy0bA.cjs.map} +1 -1
  174. package/dist/{toggle-DCZ9RTZZ.js → toggle-DZbuAtVZ.js} +1 -1
  175. package/dist/{toggle-DCZ9RTZZ.js.map → toggle-DZbuAtVZ.js.map} +1 -1
  176. package/dist/{tooltip-etVeWcFC.d.cts → tooltip-CJK3asOo.d.cts} +6 -6
  177. package/dist/{tooltip-Bj9r2ENW.d.ts → tooltip-CyEOAlsP.d.ts} +6 -6
  178. package/dist/{types-CmcNT14g.d.ts → types-BpvTO4OF.d.ts} +1 -1
  179. package/dist/typography/paragraph.d.cts +2 -2
  180. package/dist/typography/paragraph.d.ts +2 -2
  181. package/dist/typography/title.cjs +1 -1
  182. package/dist/typography/title.d.cts +2 -2
  183. package/dist/typography/title.d.ts +2 -2
  184. package/dist/typography/title.js +1 -1
  185. package/dist/ui/alert-dialog.d.cts +12 -12
  186. package/dist/ui/alert-dialog.d.ts +12 -12
  187. package/dist/ui/alert.d.cts +6 -6
  188. package/dist/ui/alert.d.ts +4 -4
  189. package/dist/ui/aspect-ratio.d.cts +2 -2
  190. package/dist/ui/aspect-ratio.d.ts +2 -2
  191. package/dist/ui/avatar.cjs +1 -2
  192. package/dist/ui/avatar.d.cts +4 -4
  193. package/dist/ui/avatar.d.ts +4 -4
  194. package/dist/ui/avatar.js +1 -2
  195. package/dist/ui/badge.d.cts +4 -4
  196. package/dist/ui/badge.d.ts +2 -2
  197. package/dist/ui/breadcrumb.d.cts +8 -8
  198. package/dist/ui/breadcrumb.d.ts +8 -8
  199. package/dist/ui/button.d.cts +1 -1
  200. package/dist/ui/button.d.ts +1 -1
  201. package/dist/ui/buttons/add-new.cjs +1 -1
  202. package/dist/ui/buttons/add-new.js +1 -1
  203. package/dist/ui/buttons/refresh.cjs +1 -1
  204. package/dist/ui/buttons/refresh.js +1 -1
  205. package/dist/ui/calendar.cjs +1 -1
  206. package/dist/ui/calendar.d.cts +4 -4
  207. package/dist/ui/calendar.d.ts +4 -4
  208. package/dist/ui/calendar.js +1 -1
  209. package/dist/ui/card.d.cts +8 -8
  210. package/dist/ui/card.d.ts +8 -8
  211. package/dist/ui/carousel.d.cts +7 -7
  212. package/dist/ui/carousel.d.ts +7 -7
  213. package/dist/ui/collapsible.d.cts +4 -4
  214. package/dist/ui/collapsible.d.ts +4 -4
  215. package/dist/ui/command.cjs +1 -1
  216. package/dist/ui/command.d.cts +2 -2
  217. package/dist/ui/command.d.ts +2 -2
  218. package/dist/ui/command.js +1 -1
  219. package/dist/ui/context-menu.d.cts +16 -16
  220. package/dist/ui/context-menu.d.ts +16 -16
  221. package/dist/ui/dialog.d.cts +1 -1
  222. package/dist/ui/dialog.d.ts +1 -1
  223. package/dist/ui/dropdown-menu.cjs +1 -1
  224. package/dist/ui/dropdown-menu.d.cts +16 -16
  225. package/dist/ui/dropdown-menu.d.ts +16 -16
  226. package/dist/ui/dropdown-menu.js +1 -1
  227. package/dist/ui/file-uploader.cjs +1 -1
  228. package/dist/ui/file-uploader.d.cts +2 -2
  229. package/dist/ui/file-uploader.d.ts +2 -2
  230. package/dist/ui/file-uploader.js +1 -1
  231. package/dist/ui/form.d.cts +7 -7
  232. package/dist/ui/form.d.ts +7 -7
  233. package/dist/ui/hover-card.d.cts +4 -4
  234. package/dist/ui/hover-card.d.ts +4 -4
  235. package/dist/ui/input-otp.d.cts +5 -5
  236. package/dist/ui/input-otp.d.ts +5 -5
  237. package/dist/ui/input.cjs +1 -1
  238. package/dist/ui/input.d.cts +1 -1
  239. package/dist/ui/input.d.ts +1 -1
  240. package/dist/ui/input.js +1 -1
  241. package/dist/ui/inputs/search-input.cjs +1 -1
  242. package/dist/ui/inputs/search-input.d.cts +3 -3
  243. package/dist/ui/inputs/search-input.d.ts +3 -3
  244. package/dist/ui/inputs/search-input.js +1 -1
  245. package/dist/ui/label.d.cts +2 -2
  246. package/dist/ui/label.d.ts +2 -2
  247. package/dist/ui/menubar.d.cts +17 -17
  248. package/dist/ui/menubar.d.ts +17 -17
  249. package/dist/ui/multi-select.cjs +1 -1
  250. package/dist/ui/multi-select.d.cts +2 -2
  251. package/dist/ui/multi-select.d.ts +2 -2
  252. package/dist/ui/multi-select.js +1 -1
  253. package/dist/ui/navigation-menu.d.cts +11 -11
  254. package/dist/ui/navigation-menu.d.ts +11 -11
  255. package/dist/ui/pagination.d.cts +9 -9
  256. package/dist/ui/pagination.d.ts +9 -9
  257. package/dist/ui/popover.cjs +1 -1
  258. package/dist/ui/popover.d.cts +5 -5
  259. package/dist/ui/popover.d.ts +5 -5
  260. package/dist/ui/popover.js +1 -1
  261. package/dist/ui/progress.cjs +1 -1
  262. package/dist/ui/progress.d.cts +2 -2
  263. package/dist/ui/progress.d.ts +2 -2
  264. package/dist/ui/progress.js +1 -1
  265. package/dist/ui/radio-group.d.cts +3 -3
  266. package/dist/ui/radio-group.d.ts +3 -3
  267. package/dist/ui/resizable.d.cts +4 -4
  268. package/dist/ui/resizable.d.ts +4 -4
  269. package/dist/ui/scroll-area.cjs +1 -1
  270. package/dist/ui/scroll-area.d.cts +3 -3
  271. package/dist/ui/scroll-area.d.ts +3 -3
  272. package/dist/ui/scroll-area.js +1 -1
  273. package/dist/ui/select.cjs +1 -1
  274. package/dist/ui/select.d.cts +11 -11
  275. package/dist/ui/select.d.ts +11 -11
  276. package/dist/ui/select.js +1 -1
  277. package/dist/ui/separator.cjs +1 -1
  278. package/dist/ui/separator.d.cts +1 -1
  279. package/dist/ui/separator.d.ts +1 -1
  280. package/dist/ui/separator.js +1 -1
  281. package/dist/ui/sheet.cjs +1 -1
  282. package/dist/ui/sheet.d.cts +9 -9
  283. package/dist/ui/sheet.d.ts +9 -9
  284. package/dist/ui/sheet.js +1 -1
  285. package/dist/ui/sidebar.cjs +1 -1
  286. package/dist/ui/sidebar.d.cts +30 -30
  287. package/dist/ui/sidebar.d.ts +28 -28
  288. package/dist/ui/sidebar.js +1 -1
  289. package/dist/ui/skeleton.d.cts +2 -2
  290. package/dist/ui/skeleton.d.ts +2 -2
  291. package/dist/ui/slider.d.cts +2 -2
  292. package/dist/ui/slider.d.ts +2 -2
  293. package/dist/ui/sonner.d.cts +2 -2
  294. package/dist/ui/sonner.d.ts +2 -2
  295. package/dist/ui/switch.cjs +1 -1
  296. package/dist/ui/switch.d.cts +2 -2
  297. package/dist/ui/switch.d.ts +2 -2
  298. package/dist/ui/switch.js +1 -1
  299. package/dist/ui/table.cjs +1 -1
  300. package/dist/ui/table.d.cts +9 -9
  301. package/dist/ui/table.d.ts +9 -9
  302. package/dist/ui/table.js +1 -1
  303. package/dist/ui/tabs.cjs +1 -2
  304. package/dist/ui/tabs.d.cts +5 -5
  305. package/dist/ui/tabs.d.ts +5 -5
  306. package/dist/ui/tabs.js +1 -2
  307. package/dist/ui/textarea.cjs +1 -1
  308. package/dist/ui/textarea.d.cts +2 -2
  309. package/dist/ui/textarea.d.ts +2 -2
  310. package/dist/ui/textarea.js +1 -1
  311. package/dist/ui/toggle-group.cjs +1 -1
  312. package/dist/ui/toggle-group.d.cts +4 -4
  313. package/dist/ui/toggle-group.d.ts +4 -4
  314. package/dist/ui/toggle-group.js +1 -1
  315. package/dist/ui/toggle.cjs +1 -1
  316. package/dist/ui/toggle.d.cts +1 -1
  317. package/dist/ui/toggle.d.ts +1 -1
  318. package/dist/ui/toggle.js +1 -1
  319. package/dist/ui/tooltip.d.cts +1 -1
  320. package/dist/ui/tooltip.d.ts +1 -1
  321. package/package.json +5 -1
  322. package/dist/ui/avatar.cjs.map +0 -1
  323. package/dist/ui/avatar.js.map +0 -1
  324. package/dist/ui/tabs.cjs.map +0 -1
  325. package/dist/ui/tabs.js.map +0 -1
@@ -1,4 +1,4 @@
1
- import * as react_jsx_runtime13 from "react/jsx-runtime";
1
+ import * as react_jsx_runtime12 from "react/jsx-runtime";
2
2
  import React from "react";
3
3
  import * as class_variance_authority_types0 from "class-variance-authority/types";
4
4
  import { VariantProps } from "class-variance-authority";
@@ -28,7 +28,7 @@ declare const Flex: ({
28
28
  align,
29
29
  className,
30
30
  children
31
- }: React.PropsWithChildren<Props>) => react_jsx_runtime13.JSX.Element;
31
+ }: React.PropsWithChildren<Props>) => react_jsx_runtime12.JSX.Element;
32
32
  //#endregion
33
33
  export { Flex };
34
34
  //# sourceMappingURL=flex.d.cts.map
@@ -1,5 +1,5 @@
1
1
  import { VariantProps } from "class-variance-authority";
2
- import * as react_jsx_runtime11 from "react/jsx-runtime";
2
+ import * as react_jsx_runtime15 from "react/jsx-runtime";
3
3
  import React from "react";
4
4
  import * as class_variance_authority_types0 from "class-variance-authority/types";
5
5
 
@@ -28,7 +28,7 @@ declare const Flex: ({
28
28
  align,
29
29
  className,
30
30
  children
31
- }: React.PropsWithChildren<Props>) => react_jsx_runtime11.JSX.Element;
31
+ }: React.PropsWithChildren<Props>) => react_jsx_runtime15.JSX.Element;
32
32
  //#endregion
33
33
  export { Flex };
34
34
  //# sourceMappingURL=flex.d.ts.map
@@ -0,0 +1,2 @@
1
+ const e=require(`../../chunk-CUT6urMc.cjs`),t=require(`../../button-119IIVCy.cjs`),n=require(`../../card-RJvu27Ck.cjs`);require(`../../skeleton-CmGSyYRm.cjs`);const r=require(`../../tooltip-meYt4lxB.cjs`),i=require(`../../dialog-CGrbU7PO.cjs`),a=require(`../../drawer-vqMdOZtq.cjs`),o=require(`../../dropdown-menu-BtNJk8EZ.cjs`),s=require(`../../avatar-CRQdBYW5.cjs`),c=require(`../../separator-JGL-8B0V.cjs`),l=require(`../../sheet-slcLNlWv.cjs`),u=require(`../../tabs-BYS9bv-R.cjs`),d=e.__toESM(require(`lucide-react`)),f=e.__toESM(require(`@customafk/react-toolkit/utils`)),p=e.__toESM(require(`class-variance-authority`)),m=e.__toESM(require(`radix-ui`)),h=e.__toESM(require(`react/jsx-runtime`)),g=e.__toESM(require(`react`)),_=e.__toESM(require(`@customafk/react-toolkit/hooks/useMediaQuery`)),v=e.__toESM(require(`@react-oauth/google`)),y=e.__toESM(require(`@customafk/react-toolkit/hooks/useMobile`)),b=`sidebar_state`,x=3600*24*7,S=`16rem`,C=`16rem`,ee=`3rem`,w=`b`,T=(0,g.createContext)(null);function E(){let e=(0,g.useContext)(T);if(!e)throw Error(`useSidebar must be used within a SidebarProvider.`);return e}function D({defaultOpen:e=!0,open:t,onOpenChange:n,className:i,style:a,children:o,...s}){let c=(0,y.useIsMobile)(),[l,u]=(0,g.useState)(!1),[d,p]=(0,g.useState)(e),m=t??d,_=(0,g.useCallback)(e=>{let t=typeof e==`function`?e(m):e;n?n(t):p(t),document.cookie=`sidebar_state=${t}; path=/; max-age=604800`},[n,m]),v=(0,g.useCallback)(()=>c?u(e=>!e):_(e=>!e),[c,_,u]);(0,g.useEffect)(()=>{let e=e=>{e.key===`b`&&(e.metaKey||e.ctrlKey)&&(e.preventDefault(),v())};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[v]);let b=m?`expanded`:`collapsed`,x=(0,g.useMemo)(()=>({state:b,isMobile:c,toggleSidebar:v,open:m,setOpen:_,openMobile:l,setOpenMobile:u}),[b,m,_,c,l,u,v]);return(0,h.jsx)(T.Provider,{value:x,children:(0,h.jsx)(r.TooltipProvider,{delayDuration:0,children:(0,h.jsx)(`div`,{"data-slot":`sidebar-wrapper`,style:{"--sidebar-width":`16rem`,"--sidebar-width-icon":`3rem`,...a},className:(0,f.cn)(`group/sidebar-wrapper`,`has-data-[variant=inset]:bg-sidebar`,`flex h-svh w-full`,i),...s,children:o})})})}function O({side:e=`left`,variant:t=`sidebar`,collapsible:n=`offcanvas`,className:r,children:i,...a}){let{isMobile:o,state:s,openMobile:c,setOpenMobile:u}=E();return n===`none`?(0,h.jsx)(`aside`,{"data-slot":`sidebar`,className:(0,f.cn)(`bg-sidebar`,`text-sidebar-foreground`,`flex h-full w-(--sidebar-width) flex-col`,r),...a,children:i}):o?(0,h.jsx)(l.Sheet,{open:c,onOpenChange:u,...a,children:(0,h.jsxs)(l.SheetContent,{"data-sidebar":`sidebar`,"data-slot":`sidebar`,"data-mobile":`true`,className:`bg-sidebar text-sidebar-foreground w-(--sidebar-width) p-0 [&>button]:hidden`,style:{"--sidebar-width":`16rem`},side:e,children:[(0,h.jsxs)(l.SheetHeader,{className:`sr-only`,children:[(0,h.jsx)(l.SheetTitle,{children:`Sidebar`}),(0,h.jsx)(l.SheetDescription,{children:`Displays the mobile sidebar.`})]}),(0,h.jsxs)(`div`,{className:`flex size-full flex-col`,children:[(0,h.jsxs)(`div`,{className:`border-border-weak flex items-center gap-x-2 border-b p-2 pr-4`,children:[(0,h.jsx)(k,{}),(0,h.jsx)(`div`,{className:`bg-sidebar-primary text-sidebar-primary-foreground ml-2 flex aspect-square size-8 items-center justify-center rounded-lg`,children:(0,h.jsx)(d.ShoppingCartIcon,{size:20})}),(0,h.jsxs)(`div`,{className:`grid flex-1 text-left text-sm leading-tight`,children:[(0,h.jsx)(`span`,{className:`truncate font-medium`,children:`Lunas Store`}),(0,h.jsx)(`span`,{className:`truncate text-xs`,children:`Established 2023`})]})]}),i]})]})}):(0,h.jsxs)(`aside`,{className:`group peer text-sidebar-foreground bg-card hidden md:block`,"data-state":s,"data-collapsible":s===`collapsed`?n:``,"data-variant":t,"data-side":e,"data-slot":`sidebar`,children:[(0,h.jsx)(`div`,{"data-slot":`sidebar-gap`,className:(0,f.cn)(`relative`,`bg-transparent`,`transition-[width] duration-200 ease-linear`,`h-(--header-height) w-(--sidebar-width)`,`sm:h-[calc(var(--header-height) + 0.5rem)]`,`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,h.jsx)(`div`,{"data-slot":`sidebar-container`,className:(0,f.cn)(`hidden md:flex`,`shadow-nav fixed inset-y-0 top-14 z-10`,`h-[calc(100svh-3.5rem)] w-(--sidebar-width)`,`transition-[left,right,width] duration-200 ease-linear`,e===`left`&&`left-0 group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]`,e===`right`&&`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)))]`:`group-data-[collapsible=icon]:w-(--sidebar-width-icon) group-data-[side=left]:border-r group-data-[side=right]:border-l`,r),...a,children:(0,h.jsx)(`div`,{"data-sidebar":`sidebar`,"data-slot":`sidebar-inner`,className:(0,f.cn)(`flex size-full flex-col`,`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 k({className:e,onClick:n,...r}){let{toggleSidebar:i}=E();return(0,h.jsxs)(t.Button,{"data-sidebar":`trigger`,"data-slot":`sidebar-trigger`,variant:`ghost`,color:`muted`,size:`icon`,className:(0,f.cn)(`size-10 rounded-full`,e),onClick:e=>{n?.(e),i()},...r,children:[(0,h.jsx)(d.MenuIcon,{className:`!size-6`}),(0,h.jsx)(`span`,{className:`sr-only`,children:`Toggle Sidebar`})]})}function A({className:e,children:t,...n}){return(0,h.jsxs)(`main`,{"data-slot":`sidebar-inset`,className:(0,f.cn)(`relative flex w-full flex-1 flex-col`,e),...n,children:[(0,h.jsx)(`div`,{className:`h-(--header-height) w-full sm:h-[calc(var(--header-height)_+_0.5rem)]`}),(0,h.jsx)(`div`,{className:(0,f.cn)(`flex-1 inset-shadow-sm`),children:t})]})}function j({className:e,children:t,...n}){let{open:r}=E();return(0,h.jsxs)(`div`,{"data-slot":`sidebar-footer`,"data-sidebar":`footer`,className:(0,f.cn)(`flex flex-col gap-2 p-2`,e),...n,children:[t,r&&(0,h.jsx)(I,{children:(0,h.jsx)(L,{children:(0,h.jsx)(`p`,{className:`text-muted-foreground text-center text-xs`,children:`Copyright © 2025, Lunas.`})})})]})}function M({className:e,...t}){return(0,h.jsx)(`div`,{"data-slot":`sidebar-content`,"data-sidebar":`content`,className:(0,f.cn)(`flex min-h-0 flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden`,e),...t})}function N({className:e,...t}){return(0,h.jsx)(`div`,{"data-slot":`sidebar-group`,"data-sidebar":`group`,className:(0,f.cn)(`relative flex w-full min-w-0 flex-col`,e),...t})}function P({className:e,asChild:t=!1,...n}){let r=t?m.Slot.Slot:`div`;return(0,h.jsx)(r,{"data-slot":`sidebar-group-label`,"data-sidebar":`group-label`,className:(0,f.cn)(`flex h-8 shrink-0 items-center rounded-md px-2 text-xs font-medium outline-hidden transition-[margin,opacity] duration-200 ease-linear focus-visible:ring-2`,`text-sidebar-foreground/70`,`ring-sidebar-ring`,`[&>svg]:size-4`,`[&>svg]:shrink-0`,`group-data-[collapsible=icon]:-mt-8`,`group-data-[collapsible=icon]:opacity-0`,e),...n})}function F({className:e,...t}){return(0,h.jsx)(`div`,{"data-slot":`sidebar-group-content`,"data-sidebar":`group-content`,className:(0,f.cn)(`w-full text-sm`,e),...t})}function I({className:e,...t}){return(0,h.jsx)(`ul`,{"data-slot":`sidebar-menu`,"data-sidebar":`menu`,className:(0,f.cn)(`flex w-full min-w-0 flex-col gap-1`,e),...t})}function L({className:e,...t}){return(0,h.jsx)(`li`,{"data-slot":`sidebar-menu-item`,"data-sidebar":`menu-item`,className:(0,f.cn)(`group/menu-item relative`,e),...t})}const R=(0,p.cva)(`peer/menu-button.cursor-pointer.flex w-full items-center gap-2.overflow-hidden rounded-md p-2 outline-hidden.text-left truncate.transition-[color,width,height,padding].hover:bg-sidebar-accent.hover:text-sidebar-accent-foreground.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-medium.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-12!.group-data-[collapsible=icon]:p-3!.group-data-[collapsible=icon]:gap-3!.[&>svg]:size-6.[&>svg]:shrink-0.[&>span:last-child]:truncate`.split(`.`),{variants:{variant:{default:`hover:bg-sidebar-accent/60 hover:text-sidebar-accent-foreground/80`,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-10 text-sm`,sm:`h-7 text-xs`,lg:`h-12 text-sm group-data-[collapsible=icon]:p-0!`}},defaultVariants:{variant:`default`,size:`default`}});function z({asChild:e=!1,isActive:t=!1,variant:n=`default`,size:i=`default`,tooltip:a,className:o,...s}){let c=e?m.Slot.Slot:`button`,{isMobile:l,state:u}=E(),d=(0,h.jsx)(c,{"data-slot":`sidebar-menu-button`,"data-sidebar":`menu-button`,"data-size":i,"data-active":t,className:(0,f.cn)(R({variant:n,size:i}),o),...s});return a?(typeof a==`string`&&(a={children:a}),(0,h.jsxs)(r.Tooltip,{children:[(0,h.jsx)(r.TooltipTrigger,{asChild:!0,children:d}),(0,h.jsx)(r.TooltipContent,{side:`right`,align:`center`,hidden:u!==`collapsed`||l,...a})]})):d}const B=(0,g.createContext)(null),V=()=>{let e=(0,g.useContext)(B);if(!e)throw Error(`useServiceLayoutContext must be used within a ServiceLayoutProvider`);return e},H=({isLoggedIn:e=!1,username:t,email:n,onGoogleLoginSuccess:r,onLogout:i,children:a})=>(0,h.jsx)(B.Provider,{value:{isLoggedIn:e,username:t,email:n,onGoogleLoginSuccess:r,onLogout:i},children:a}),U=({children:e})=>(0,h.jsx)(D,{children:e}),W=({userName:e=`Keith Kennedy`,userEmail:n=`k.kennedy@originui.com`,onLogout:r})=>(0,h.jsxs)(o.DropdownMenu,{children:[(0,h.jsx)(o.DropdownMenuTrigger,{asChild:!0,children:(0,h.jsx)(t.Button,{size:`icon`,variant:`ghost`,color:`secondary`,className:`size-10 rounded-full`,children:(0,h.jsxs)(s.Avatar,{className:`size-10`,children:[(0,h.jsx)(s.AvatarImage,{src:``,alt:``}),(0,h.jsx)(s.AvatarFallback,{className:`bg-muted-muted size-full`,children:(0,h.jsx)(d.UserIcon,{})})]})})}),(0,h.jsxs)(o.DropdownMenuContent,{align:`end`,className:`max-w-64`,children:[(0,h.jsxs)(o.DropdownMenuLabel,{className:`flex min-w-0 flex-col`,children:[(0,h.jsx)(`span`,{className:`text-text-positive truncate text-sm font-medium`,children:e}),(0,h.jsx)(`span`,{className:`text-text-positive-weak truncate text-xs font-normal`,children:n})]}),(0,h.jsx)(o.DropdownMenuSeparator,{}),(0,h.jsxs)(o.DropdownMenuItem,{onClick:r,children:[(0,h.jsx)(d.LogOutIcon,{size:16,"aria-hidden":`true`}),(0,h.jsx)(`span`,{className:`text-text-positive`,children:`Logout`})]})]})]}),G=()=>(0,h.jsxs)(l.Sheet,{children:[(0,h.jsx)(l.SheetTrigger,{asChild:!0,children:(0,h.jsx)(t.Button,{size:`icon`,variant:`ghost`,color:`secondary`,className:`size-10 rounded-full`,children:(0,h.jsx)(d.ShoppingCartIcon,{})})}),(0,h.jsxs)(l.SheetContent,{className:`w-svw`,children:[(0,h.jsx)(l.SheetHeader,{className:`border-border-weak border-b`,children:(0,h.jsx)(l.SheetTitle,{children:`Giỏ hàng của bạn`})}),(0,h.jsx)(`section`,{className:`p-4 pt-0`,children:(0,h.jsxs)(u.Tabs,{defaultValue:`pre_order`,children:[(0,h.jsxs)(u.TabsList,{className:`w-full`,children:[(0,h.jsx)(u.TabsTrigger,{value:`in_stock`,className:``,children:`In Stock`}),(0,h.jsx)(u.TabsTrigger,{value:`pre_order`,className:``,children:`Pre Order`})]}),(0,h.jsx)(u.TabsContent,{value:`pre_order`,children:(0,h.jsx)(n.Card,{})}),(0,h.jsx)(u.TabsContent,{value:`in_stock`,children:(0,h.jsx)(n.Card,{})})]})})]})]}),K=()=>{let{isLoggedIn:e,username:n,email:r,onGoogleLoginSuccess:o,onLogout:s}=V(),l=(0,_.useMediaQuery)(`(min-width: 640px)`),[u,p]=(0,g.useState)(!1);return(0,h.jsxs)(`header`,{className:(0,f.cn)(`bg-card`,`h-(--header-height)`,`sm:h-[calc(var(--header-height)_+_0.5rem)]`,`sm:px-4 sm:pr-6`,`absolute inset-x-0 top-0 z-20 gap-2 px-2 pr-4.5`,`shadow-nav flex items-center`,`transition-[width,height] ease-linear`),children:[(0,h.jsx)(k,{}),(0,h.jsxs)(`div`,{className:`flex gap-x-2 sm:ml-2.5`,children:[(0,h.jsx)(`div`,{className:`bg-sidebar-primary text-sidebar-primary-foreground flex aspect-square size-8 items-center justify-center rounded-lg`,children:(0,h.jsx)(d.ShoppingCartIcon,{size:20})}),(0,h.jsxs)(`div`,{className:`grid flex-1 text-left text-sm leading-tight`,children:[(0,h.jsx)(`span`,{className:`truncate font-medium`,children:`Lunas Store`}),(0,h.jsx)(`span`,{className:`truncate text-xs`,children:`Established 2023`})]})]}),(0,h.jsxs)(`div`,{className:`flex flex-1 items-center justify-end gap-x-2`,children:[!e&&(0,h.jsxs)(t.Button,{className:`w-8 sm:w-fit`,onClick:()=>p(!0),children:[(0,h.jsx)(d.LogInIcon,{}),(0,h.jsx)(`span`,{className:`sr-only sm:not-sr-only`,children:`Đăng nhập`})]}),e&&(0,h.jsxs)(h.Fragment,{children:[(0,h.jsx)(W,{userName:n,userEmail:r,onLogout:s}),(0,h.jsx)(c.Separator,{orientation:`vertical`,className:`min-h-6 w-px`}),(0,h.jsx)(G,{})]})]}),l&&(0,h.jsx)(i.Dialog,{open:u,onOpenChange:p,children:(0,h.jsxs)(i.DialogContent,{showCloseButton:!1,className:`flex flex-col gap-0 border-none p-0 sm:max-w-sm`,children:[(0,h.jsx)(i.DialogHeader,{className:`flex-0 gap-2 p-6`,children:(0,h.jsx)(i.DialogTitle,{className:`text-center`,children:`Chào mừng bạn đến với Lunas Store!`})}),(0,h.jsx)(`div`,{className:`flex flex-1 flex-col`,children:(0,h.jsx)(`main`,{className:`bg-card size-full flex-1 p-4 pt-0`,children:(0,h.jsxs)(`div`,{className:`flex flex-col items-center gap-y-1`,children:[(0,h.jsx)(`p`,{className:`text-text-positive-weak text-sm`,children:`Đăng nhập với Google`}),(0,h.jsx)(v.GoogleLogin,{size:`large`,theme:`outline`,width:240,onSuccess:async e=>{!e.clientId||!e.credential||!e.select_by||await o?.({clientId:e.clientId,credential:e.credential,select_by:e.select_by})}})]})})}),(0,h.jsx)(i.DialogFooter,{className:`p-2`})]})}),!l&&(0,h.jsx)(a.Drawer,{open:u,onOpenChange:p,children:(0,h.jsxs)(a.DrawerContent,{children:[(0,h.jsx)(a.DrawerHeader,{className:`text-left`,children:(0,h.jsx)(a.DrawerTitle,{children:`Chào mừng bạn đến với Lunas Store!`})}),(0,h.jsx)(`div`,{className:`flex flex-1 flex-col`,children:(0,h.jsx)(`main`,{className:`flex size-full flex-1 flex-col p-4 pt-0`,children:(0,h.jsxs)(`div`,{className:`flex flex-col items-center gap-y-1`,children:[(0,h.jsx)(`p`,{className:`text-text-positive-weak text-sm`,children:`Đăng nhập với Google`}),(0,h.jsx)(v.GoogleLogin,{size:`large`,theme:`outline`,onSuccess:async e=>{!e.clientId||!e.credential||!e.select_by||await o?.({clientId:e.clientId,credential:e.credential,select_by:e.select_by})}})]})})}),(0,h.jsx)(a.DrawerFooter,{})]})})]})},q=({children:e,...t})=>(0,h.jsx)(O,{variant:`inset`,collapsible:`icon`,...t,children:e}),J=({children:e})=>(0,h.jsx)(A,{children:(0,h.jsx)(`section`,{className:`relative size-full`,children:(0,h.jsx)(`div`,{className:`absolute inset-0 flex flex-col`,children:e})})}),Y=({className:e,children:t})=>(0,h.jsx)(`div`,{"data-slot":`main-header`,className:(0,f.cn)(`flex-0 snap-start`,e),children:t}),X=({className:e,children:t})=>(0,h.jsx)(`div`,{"data-slot":`main-content`,className:(0,f.cn)(`flex w-full flex-1 flex-col gap-4 overflow-y-auto px-2 sm:px-4`,e),children:t}),Z=({className:e,children:t})=>(0,h.jsx)(`div`,{"data-slot":`main-footer`,className:(0,f.cn)(`border-border-weak hidden w-full flex-0 border-t pt-2 sm:flex`,e),children:t}),Q=({children:e,className:t})=>(0,h.jsx)(`div`,{"data-slot":`main-group`,className:(0,f.cn)(`flex size-full flex-col gap-4`,t),children:e}),$=({className:e,children:t})=>(0,h.jsx)(`div`,{"data-slot":`main-group-content`,className:(0,f.cn)(`bg-card shadow-card max-w-8xl size-full flex-1 rounded-md p-4`,e),children:t});exports.ServiceLayoutCartInfo=G,exports.ServiceLayoutHeader=K,exports.ServiceLayoutMain=J,exports.ServiceLayoutMainContent=X,exports.ServiceLayoutMainFooter=Z,exports.ServiceLayoutMainGroup=Q,exports.ServiceLayoutMainGroupContent=$,exports.ServiceLayoutMainHeader=Y,exports.ServiceLayoutProvider=H,exports.ServiceLayoutSidebar=q,exports.ServiceLayoutSidebarContent=M,exports.ServiceLayoutSidebarFooter=j,exports.ServiceLayoutSidebarGroup=N,exports.ServiceLayoutSidebarGroupContent=F,exports.ServiceLayoutSidebarGroupLabel=P,exports.ServiceLayoutSidebarMenu=I,exports.ServiceLayoutSidebarMenuButton=z,exports.ServiceLayoutSidebarMenuItem=L,exports.ServiceLayoutUserInfo=W,exports.ServiceLayoutWrapper=U,exports.useServiceLayout=V;
2
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","names":["open","TooltipProvider","ServiceLayoutSidebar","Sheet","SheetContent","SheetHeader","SheetTitle","SheetDescription","ShoppingCartIcon","Button","MenuIcon","SlotPrimitive","Tooltip","TooltipTrigger","TooltipContent","ServiceLayoutProvider: React.FC<React.PropsWithChildren<ServiceLayoutContextProps>>","ServiceLayoutWrapper: React.FC<React.PropsWithChildren>","ServiceLayoutUserInfo: React.FC<ServiceLayoutUserInfoProps>","DropdownMenu","DropdownMenuTrigger","Button","Avatar","AvatarImage","AvatarFallback","UserIcon","DropdownMenuContent","DropdownMenuLabel","DropdownMenuSeparator","DropdownMenuItem","LogOutIcon","ServiceLayoutCartInfo: React.FC","Sheet","SheetTrigger","ShoppingCartIcon","SheetContent","SheetHeader","SheetTitle","Tabs","TabsList","TabsTrigger","TabsContent","Card","ServiceLayoutHeader: React.FC<ServiceLayoutHeaderProps>","LogInIcon","Separator","Dialog","DialogContent","DialogHeader","DialogTitle","GoogleLogin","DialogFooter","Drawer","DrawerContent","DrawerHeader","DrawerTitle","DrawerFooter","ServiceLayoutSidebar: React.FC<React.PropsWithChildren & React.ComponentProps<typeof LayoutSidebar>>","LayoutSidebar","ServiceLayoutMain: React.FC<React.PropsWithChildren>","ServiceLayoutMainHeader: React.FC<React.PropsWithChildren & { className?: string }>","ServiceLayoutMainContent: React.FC<React.PropsWithChildren & { className?: string }>","ServiceLayoutMainFooter: React.FC<React.PropsWithChildren & { className?: string }>","ServiceLayoutMainGroup: React.FC<React.PropsWithChildren<{ className?: string }>>","ServiceLayoutMainGroupContent: React.FC<React.PropsWithChildren & { className?: string }>"],"sources":["../../../packages/components/layouts/service-layout/service-layout-sidebar.tsx","../../../packages/components/layouts/service-layout/service-layout.tsx"],"sourcesContent":["import { createContext, useCallback, useContext, useEffect, useMemo, useState } from 'react'\nimport { useIsMobile } from '@customafk/react-toolkit/hooks/useMobile'\nimport { cn } from '@customafk/react-toolkit/utils'\n\nimport { MenuIcon, ShoppingCartIcon } from 'lucide-react'\n\nimport { Button } from '@/components/ui/button'\nimport { Separator } from '@/components/ui/separator'\nimport { Sheet, SheetContent, SheetDescription, SheetHeader, SheetTitle } from '@/components/ui/sheet'\nimport { Skeleton } from '@/components/ui/skeleton'\nimport { TooltipProvider } from '@/components/ui/tooltip'\nimport { Tooltip, TooltipContent, 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 = 'sidebar_state'\nconst SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7\nconst SIDEBAR_WIDTH = '16rem'\nconst SIDEBAR_WIDTH_MOBILE = '16rem'\nconst SIDEBAR_WIDTH_ICON = '3rem'\nconst SIDEBAR_KEYBOARD_SHORTCUT = 'b'\n\ntype SidebarContextProps = {\n state: 'expanded' | 'collapsed'\n open: boolean\n setOpen: (open: boolean) => void\n openMobile: boolean\n setOpenMobile: (open: boolean) => void\n isMobile: boolean\n toggleSidebar: () => void\n}\n\nconst SidebarContext = createContext<SidebarContextProps | null>(null)\n\nfunction useServiceLayoutSidebar() {\n const context = useContext(SidebarContext)\n if (!context) {\n throw new Error('useSidebar must be used within a SidebarProvider.')\n }\n\n return context\n}\n\nfunction ServiceLayoutSidebarProvider({\n defaultOpen = true,\n open: openProp,\n onOpenChange: setOpenProp,\n className,\n style,\n children,\n ...props\n}: React.ComponentProps<'div'> & {\n defaultOpen?: boolean\n open?: boolean\n onOpenChange?: (open: boolean) => void\n}) {\n const isMobile = useIsMobile()\n const [openMobile, setOpenMobile] = useState(false)\n\n // This is the internal state of the sidebar.\n // We use openProp and setOpenProp for control from outside the component.\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\n // This sets the cookie to keep the sidebar state.\n document.cookie = `${SIDEBAR_COOKIE_NAME}=${openState}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`\n },\n [setOpenProp, open],\n )\n\n // Helper to toggle the sidebar.\n const toggleSidebar = useCallback(() => {\n return isMobile ? setOpenMobile((open) => !open) : setOpen((open) => !open)\n }, [isMobile, setOpen, setOpenMobile])\n\n // Adds a keyboard shortcut to toggle the sidebar.\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\n window.addEventListener('keydown', handleKeyDown)\n return () => window.removeEventListener('keydown', handleKeyDown)\n }, [toggleSidebar])\n\n // We add a state so that we can do data-state=\"expanded\" or \"collapsed\".\n // This makes it easier to style the sidebar with Tailwind classes.\n const state = open ? 'expanded' : 'collapsed'\n\n const contextValue = useMemo<SidebarContextProps>(\n () => ({\n state,\n isMobile,\n\n toggleSidebar,\n\n open,\n setOpen,\n\n openMobile,\n setOpenMobile,\n }),\n [state, open, setOpen, isMobile, openMobile, setOpenMobile, toggleSidebar],\n )\n\n return (\n <SidebarContext.Provider value={contextValue}>\n <TooltipProvider delayDuration={0}>\n <div\n data-slot=\"sidebar-wrapper\"\n style={\n {\n '--sidebar-width': SIDEBAR_WIDTH,\n '--sidebar-width-icon': SIDEBAR_WIDTH_ICON,\n ...style,\n } as React.CSSProperties\n }\n className={cn('group/sidebar-wrapper', 'has-data-[variant=inset]:bg-sidebar', 'flex h-svh w-full', className)}\n {...props}\n >\n {children}\n </div>\n </TooltipProvider>\n </SidebarContext.Provider>\n )\n}\n\nfunction ServiceLayoutSidebar({\n side = 'left',\n variant = 'sidebar',\n collapsible = 'offcanvas',\n className,\n children,\n ...props\n}: React.ComponentProps<'div'> & {\n side?: 'left' | 'right'\n variant?: 'sidebar' | 'floating' | 'inset'\n collapsible?: 'offcanvas' | 'icon' | 'none'\n}) {\n const { isMobile, state, openMobile, setOpenMobile } = useServiceLayoutSidebar()\n\n if (collapsible === 'none') {\n return (\n <aside data-slot=\"sidebar\" className={cn('bg-sidebar', 'text-sidebar-foreground', 'flex h-full w-(--sidebar-width) flex-col', className)} {...props}>\n {children}\n </aside>\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=\"bg-sidebar text-sidebar-foreground w-(--sidebar-width) p-0 [&>button]:hidden\"\n style={\n {\n '--sidebar-width': SIDEBAR_WIDTH_MOBILE,\n } as React.CSSProperties\n }\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 size-full flex-col\">\n <div className=\"border-border-weak flex items-center gap-x-2 border-b p-2 pr-4\">\n <ServiceLayoutSidebarTrigger />\n <div className=\"bg-sidebar-primary text-sidebar-primary-foreground ml-2 flex aspect-square size-8 items-center justify-center rounded-lg\">\n <ShoppingCartIcon size={20} />\n </div>\n <div className=\"grid flex-1 text-left text-sm leading-tight\">\n <span className=\"truncate font-medium\">Lunas Store</span>\n <span className=\"truncate text-xs\">Established 2023</span>\n </div>\n </div>\n {children}\n </div>\n </SheetContent>\n </Sheet>\n )\n }\n\n return (\n <aside\n className=\"group peer text-sidebar-foreground bg-card hidden 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 {/* This is what handles the sidebar gap on desktop */}\n <div\n data-slot=\"sidebar-gap\"\n className={cn(\n 'relative',\n 'bg-transparent',\n 'transition-[width] duration-200 ease-linear',\n 'h-(--header-height) w-(--sidebar-width)',\n 'sm:h-[calc(var(--header-height) + 0.5rem)]',\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 'hidden md:flex',\n 'shadow-nav fixed inset-y-0 top-14 z-10',\n 'h-[calc(100svh-3.5rem)] w-(--sidebar-width)',\n 'transition-[left,right,width] duration-200 ease-linear',\n side === 'left' && 'left-0 group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]',\n side === 'right' && 'right-0 group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]',\n // Adjust the 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)))]'\n : 'group-data-[collapsible=icon]:w-(--sidebar-width-icon) group-data-[side=left]:border-r group-data-[side=right]:border-l',\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',\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 </aside>\n )\n}\n\nfunction ServiceLayoutSidebarTrigger({ className, onClick, ...props }: React.ComponentProps<typeof Button>) {\n const { toggleSidebar } = useServiceLayoutSidebar()\n\n return (\n <Button\n data-sidebar=\"trigger\"\n data-slot=\"sidebar-trigger\"\n variant=\"ghost\"\n color=\"muted\"\n size=\"icon\"\n className={cn('size-10 rounded-full', className)}\n onClick={(event) => {\n onClick?.(event)\n toggleSidebar()\n }}\n {...props}\n >\n <MenuIcon className=\"!size-6\" />\n <span className=\"sr-only\">Toggle Sidebar</span>\n </Button>\n )\n}\n\nfunction ServiceLayoutSidebarRail({ className, ...props }: React.ComponentProps<'button'>) {\n const { toggleSidebar } = useServiceLayoutSidebar()\n\n return (\n <button\n data-sidebar=\"rail\"\n data-slot=\"sidebar-rail\"\n aria-label=\"Toggle Sidebar\"\n tabIndex={-1}\n onClick={toggleSidebar}\n title=\"Toggle Sidebar\"\n className={cn(\n 'absolute inset-y-0 z-20 hidden w-4 -translate-x-1/2 transition-all ease-linear sm:flex',\n 'after:absolute after:inset-y-0 after:left-1/2 after:w-[2px]',\n 'group-data-[side=left]:-right-4',\n 'group-data-[side=right]:left-0',\n 'in-data-[side=left]:cursor-w-resize',\n 'in-data-[side=right]:cursor-e-resize',\n 'hover:after:bg-sidebar-border',\n 'hover:group-data-[collapsible=offcanvas]:bg-sidebar',\n 'group-data-[collapsible=offcanvas]:translate-x-0',\n 'group-data-[collapsible=offcanvas]:after:left-full',\n '[[data-side=left][data-state=collapsed]_&]:cursor-e-resize',\n '[[data-side=right][data-state=collapsed]_&]:cursor-w-resize',\n '[[data-side=left][data-collapsible=offcanvas]_&]:-right-2',\n '[[data-side=right][data-collapsible=offcanvas]_&]:-left-2',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction ServiceLayoutSidebarInset({ className, children, ...props }: React.ComponentProps<'main'>) {\n return (\n <main data-slot=\"sidebar-inset\" className={cn('relative flex w-full flex-1 flex-col', className)} {...props}>\n <div className=\"h-(--header-height) w-full sm:h-[calc(var(--header-height)_+_0.5rem)]\" />\n <div className={cn('flex-1 inset-shadow-sm')}>{children}</div>\n </main>\n )\n}\n\nfunction ServiceLayoutSidebarHeader({ 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 ServiceLayoutSidebarFooter({ className, children, ...props }: React.ComponentProps<'div'>) {\n const { open } = useServiceLayoutSidebar()\n return (\n <div data-slot=\"sidebar-footer\" data-sidebar=\"footer\" className={cn('flex flex-col gap-2 p-2', className)} {...props}>\n {children}\n {open && (\n <ServiceLayoutSidebarMenu>\n <ServiceLayoutSidebarMenuItem>\n <p className=\"text-muted-foreground text-center text-xs\">Copyright © 2025, Lunas.</p>\n </ServiceLayoutSidebarMenuItem>\n </ServiceLayoutSidebarMenu>\n )}\n </div>\n )\n}\n\nfunction ServiceLayoutSidebarSeparator({ className, ...props }: React.ComponentProps<typeof Separator>) {\n return <Separator data-slot=\"sidebar-separator\" data-sidebar=\"separator\" className={cn('bg-sidebar-border mx-2 w-auto', className)} {...props} />\n}\n\nfunction ServiceLayoutSidebarContent({ 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 ServiceLayoutSidebarGroup({ className, ...props }: React.ComponentProps<'div'>) {\n return <div data-slot=\"sidebar-group\" data-sidebar=\"group\" className={cn('relative flex w-full min-w-0 flex-col', className)} {...props} />\n}\n\nfunction ServiceLayoutSidebarGroupLabel({ className, asChild = false, ...props }: React.ComponentProps<'div'> & { asChild?: boolean }) {\n const Comp = asChild ? SlotPrimitive.Slot : 'div'\n\n return (\n <Comp\n data-slot=\"sidebar-group-label\"\n data-sidebar=\"group-label\"\n className={cn(\n 'flex h-8 shrink-0 items-center rounded-md px-2 text-xs font-medium outline-hidden transition-[margin,opacity] duration-200 ease-linear focus-visible:ring-2',\n 'text-sidebar-foreground/70',\n 'ring-sidebar-ring',\n '[&>svg]:size-4',\n '[&>svg]:shrink-0',\n 'group-data-[collapsible=icon]:-mt-8',\n 'group-data-[collapsible=icon]:opacity-0',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction ServiceLayoutSidebarGroupAction({ className, asChild = false, ...props }: React.ComponentProps<'button'> & { asChild?: boolean }) {\n const Comp = asChild ? SlotPrimitive.Slot : 'button'\n\n return (\n <Comp\n data-slot=\"sidebar-group-action\"\n data-sidebar=\"group-action\"\n className={cn(\n 'text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground absolute top-3.5 right-3 flex aspect-square w-5 items-center justify-center rounded-md p-0 outline-hidden transition-transform',\n 'focus-visible:ring-2',\n '[&>svg]:size-4',\n '[&>svg]:shrink-0',\n // Increases the hit area of the button on mobile.\n 'after:absolute after:-inset-2 md:after:hidden',\n 'group-data-[collapsible=icon]:hidden',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction ServiceLayoutSidebarGroupContent({ className, ...props }: React.ComponentProps<'div'>) {\n return <div data-slot=\"sidebar-group-content\" data-sidebar=\"group-content\" className={cn('w-full text-sm', className)} {...props} />\n}\n\nfunction ServiceLayoutSidebarMenu({ 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 ServiceLayoutSidebarMenuItem({ 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 'text-left truncate',\n 'transition-[color,width,height,padding]',\n 'hover:bg-sidebar-accent',\n 'hover:text-sidebar-accent-foreground',\n 'active:bg-sidebar-accent',\n 'active:text-sidebar-accent-foreground',\n 'disabled:pointer-events-none',\n 'disabled:opacity-50',\n 'group-has-data-[sidebar=menu-action]/menu-item:pr-8',\n 'aria-disabled:pointer-events-none',\n 'aria-disabled:opacity-50',\n 'data-[active=true]:bg-sidebar-primary-muted',\n 'data-[active=true]:font-medium',\n 'data-[active=true]:text-sidebar-primary',\n 'data-[state=open]:hover:bg-sidebar-accent',\n 'data-[state=open]:hover:text-sidebar-accent-foreground',\n 'group-data-[collapsible=icon]:size-12!',\n 'group-data-[collapsible=icon]:p-3!',\n 'group-data-[collapsible=icon]:gap-3!',\n '[&>svg]:size-6',\n '[&>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/80',\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-10 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 ServiceLayoutSidebarMenuButton({\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 { isMobile, state } = useServiceLayoutSidebar()\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) {\n return button\n }\n\n if (typeof tooltip === 'string') {\n tooltip = {\n children: tooltip,\n }\n }\n\n return (\n <Tooltip>\n <TooltipTrigger asChild>{button}</TooltipTrigger>\n <TooltipContent side=\"right\" align=\"center\" hidden={state !== 'collapsed' || isMobile} {...tooltip} />\n </Tooltip>\n )\n}\n\nfunction ServiceLayoutSidebarMenuAction({\n className,\n asChild = false,\n showOnHover = false,\n ...props\n}: React.ComponentProps<'button'> & {\n asChild?: boolean\n showOnHover?: boolean\n}) {\n const Comp = asChild ? SlotPrimitive.Slot : 'button'\n\n return (\n <Comp\n data-slot=\"sidebar-menu-action\"\n data-sidebar=\"menu-action\"\n className={cn(\n 'text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground peer-hover/menu-button:text-sidebar-accent-foreground absolute top-1.5 right-1 flex aspect-square w-5 items-center justify-center rounded-md p-0 outline-hidden transition-transform',\n 'focus-visible:ring-2',\n '[&>svg]:size-4',\n '[&>svg]:shrink-0',\n // Increases the hit area of the button on mobile.\n 'after:absolute after:-inset-2 md:after:hidden',\n 'peer-data-[size=sm]/menu-button:top-1',\n 'peer-data-[size=default]/menu-button:top-1.5',\n 'peer-data-[size=lg]/menu-button:top-2.5',\n 'group-data-[collapsible=icon]:hidden',\n showOnHover && 'peer-data-[active=true]/menu-button:text-sidebar-accent-foreground',\n showOnHover && 'group-focus-within/menu-item:opacity-100',\n showOnHover && 'group-hover/menu-item:opacity-100',\n showOnHover && 'data-[state=open]:opacity-100 md:opacity-0',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction ServiceLayoutSidebarMenuBadge({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sidebar-menu-badge\"\n data-sidebar=\"menu-badge\"\n className={cn(\n 'text-sidebar-foreground pointer-events-none absolute right-1 flex h-5 min-w-5 items-center justify-center rounded-md px-1 text-xs font-medium tabular-nums select-none',\n 'peer-hover/menu-button:text-sidebar-accent-foreground',\n 'peer-data-[active=true]/menu-button:text-sidebar-accent-foreground',\n 'peer-data-[size=sm]/menu-button:top-1',\n 'peer-data-[size=default]/menu-button:top-1.5',\n 'peer-data-[size=lg]/menu-button:top-2.5',\n 'group-data-[collapsible=icon]:hidden',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction ServiceLayoutSidebarMenuSkeleton({\n className,\n showIcon = false,\n ...props\n}: React.ComponentProps<'div'> & {\n showIcon?: boolean\n}) {\n // Random width between 50 to 90%.\n const width = useMemo(() => {\n return `${Math.floor(Math.random() * 40) + 50}%`\n }, [])\n\n return (\n <div data-slot=\"sidebar-menu-skeleton\" data-sidebar=\"menu-skeleton\" className={cn('flex h-8 items-center gap-2 rounded-md px-2', className)} {...props}>\n {showIcon && <Skeleton className=\"size-4 rounded-md\" data-sidebar=\"menu-skeleton-icon\" />}\n <Skeleton\n className=\"h-4 max-w-(--skeleton-width) flex-1\"\n data-sidebar=\"menu-skeleton-text\"\n style={\n {\n '--skeleton-width': width,\n } as React.CSSProperties\n }\n />\n </div>\n )\n}\n\nfunction ServiceLayoutSidebarMenuSub({ className, ...props }: React.ComponentProps<'ul'>) {\n return (\n <ul\n data-slot=\"sidebar-menu-sub\"\n data-sidebar=\"menu-sub\"\n className={cn(\n 'border-sidebar-border mx-3.5 flex min-w-0 translate-x-px flex-col gap-1 border-l px-2.5 py-0.5',\n 'group-data-[collapsible=icon]:hidden',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction ServiceLayoutSidebarMenuSubItem({ className, ...props }: React.ComponentProps<'li'>) {\n return <li data-slot=\"sidebar-menu-sub-item\" data-sidebar=\"menu-sub-item\" className={cn('group/menu-sub-item relative', className)} {...props} />\n}\n\nfunction ServiceLayoutSidebarMenuSubButton({\n asChild = false,\n size = 'md',\n isActive = false,\n className,\n ...props\n}: React.ComponentProps<'a'> & {\n asChild?: boolean\n size?: 'sm' | 'md'\n isActive?: boolean\n}) {\n const Comp = asChild ? SlotPrimitive.Slot : 'a'\n\n return (\n <Comp\n data-slot=\"sidebar-menu-sub-button\"\n data-sidebar=\"menu-sub-button\"\n data-size={size}\n data-active={isActive}\n className={cn(\n 'text-sidebar-foreground',\n 'ring-sidebar-ring',\n 'flex h-7 min-w-0 -translate-x-px items-center gap-2 overflow-hidden rounded-md px-2 outline-hidden',\n 'focus-visible:ring-2',\n 'hover:bg-sidebar-accent',\n 'hover:text-sidebar-accent-foreground',\n 'active:bg-sidebar-accent',\n 'active:text-sidebar-accent-foreground',\n 'disabled:pointer-events-none',\n 'disabled:opacity-50',\n 'aria-disabled:pointer-events-none',\n 'aria-disabled:opacity-50',\n '[&>svg]:size-4',\n '[&>svg]:shrink-0',\n '[&>svg]:text-sidebar-accent-foreground',\n '[&>span:last-child]:truncate',\n 'data-[active=true]:bg-sidebar-accent',\n 'data-[active=true]:text-sidebar-accent-foreground',\n size === 'sm' && 'text-xs',\n size === 'md' && 'text-sm',\n 'group-data-[collapsible=icon]:hidden',\n className,\n )}\n {...props}\n />\n )\n}\n\nexport {\n ServiceLayoutSidebar,\n ServiceLayoutSidebarContent,\n ServiceLayoutSidebarFooter,\n ServiceLayoutSidebarGroup,\n ServiceLayoutSidebarGroupAction,\n ServiceLayoutSidebarGroupContent,\n ServiceLayoutSidebarGroupLabel,\n ServiceLayoutSidebarHeader,\n ServiceLayoutSidebarInset,\n ServiceLayoutSidebarMenu,\n ServiceLayoutSidebarMenuAction,\n ServiceLayoutSidebarMenuBadge,\n ServiceLayoutSidebarMenuButton,\n ServiceLayoutSidebarMenuItem,\n ServiceLayoutSidebarMenuSkeleton,\n ServiceLayoutSidebarMenuSub,\n ServiceLayoutSidebarMenuSubButton,\n ServiceLayoutSidebarMenuSubItem,\n ServiceLayoutSidebarProvider,\n ServiceLayoutSidebarRail,\n ServiceLayoutSidebarSeparator,\n ServiceLayoutSidebarTrigger,\n // eslint-disable-next-line react-refresh/only-export-components\n useServiceLayoutSidebar,\n}\n","'use client'\nimport { createContext, useContext, useState } from 'react'\nimport { useMediaQuery } from '@customafk/react-toolkit/hooks/useMediaQuery'\nimport { cn } from '@customafk/react-toolkit/utils'\n\nimport { LogInIcon, LogOutIcon, ShoppingCartIcon, UserIcon } from 'lucide-react'\n\nimport { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar'\nimport { Button } from '@/components/ui/button'\nimport { Card } from '@/components/ui/card'\nimport { Dialog, DialogContent, DialogFooter, DialogHeader, DialogTitle } from '@/components/ui/dialog'\nimport { Drawer, DrawerContent, DrawerFooter, DrawerHeader, DrawerTitle } from '@/components/ui/drawer'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '@/components/ui/dropdown-menu'\nimport { Separator } from '@/components/ui/separator'\nimport { Sheet, SheetContent, SheetHeader, SheetTitle, SheetTrigger } from '@/components/ui/sheet'\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'\nimport { type CredentialResponse, GoogleLogin } from '@react-oauth/google'\n\nimport {\n ServiceLayoutSidebar as LayoutSidebar,\n ServiceLayoutSidebarInset,\n ServiceLayoutSidebarProvider,\n ServiceLayoutSidebarTrigger,\n} from './service-layout-sidebar'\n\ntype ServiceLayoutContextProps = {\n isLoggedIn?: boolean\n username?: string\n email?: string\n onGoogleLoginSuccess?: (params: CredentialResponse) => void | Promise<void>\n onLogout?: () => void | Promise<void>\n}\nconst ServiceLayoutContext = createContext<ServiceLayoutContextProps | null>(null)\n\n// eslint-disable-next-line react-refresh/only-export-components\nexport const useServiceLayout = () => {\n const context = useContext(ServiceLayoutContext)\n if (!context) {\n throw new Error('useServiceLayoutContext must be used within a ServiceLayoutProvider')\n }\n return context\n}\n\nexport const ServiceLayoutProvider: React.FC<React.PropsWithChildren<ServiceLayoutContextProps>> = ({\n isLoggedIn = false,\n username,\n email,\n onGoogleLoginSuccess,\n onLogout,\n children,\n}) => {\n return <ServiceLayoutContext.Provider value={{ isLoggedIn, username, email, onGoogleLoginSuccess, onLogout }}>{children}</ServiceLayoutContext.Provider>\n}\n\nexport const ServiceLayoutWrapper: React.FC<React.PropsWithChildren> = ({ children }) => {\n return <ServiceLayoutSidebarProvider>{children}</ServiceLayoutSidebarProvider>\n}\n\ntype ServiceLayoutUserInfoProps = {\n userName?: string\n userEmail?: string\n onLogout?: () => void | Promise<void>\n}\nexport const ServiceLayoutUserInfo: React.FC<ServiceLayoutUserInfoProps> = ({ userName = 'Keith Kennedy', userEmail = 'k.kennedy@originui.com', onLogout }) => {\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button size=\"icon\" variant=\"ghost\" color=\"secondary\" className=\"size-10 rounded-full\">\n <Avatar className=\"size-10\">\n <AvatarImage src={''} alt={''} />\n <AvatarFallback className=\"bg-muted-muted size-full\">\n <UserIcon />\n </AvatarFallback>\n </Avatar>\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"max-w-64\">\n <DropdownMenuLabel className=\"flex min-w-0 flex-col\">\n <span className=\"text-text-positive truncate text-sm font-medium\">{userName}</span>\n <span className=\"text-text-positive-weak truncate text-xs font-normal\">{userEmail}</span>\n </DropdownMenuLabel>\n <DropdownMenuSeparator />\n <DropdownMenuItem onClick={onLogout}>\n <LogOutIcon size={16} aria-hidden=\"true\" />\n <span className=\"text-text-positive\">Logout</span>\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n )\n}\n\nexport const ServiceLayoutCartInfo: React.FC = () => {\n return (\n <Sheet>\n <SheetTrigger asChild>\n <Button size=\"icon\" variant=\"ghost\" color=\"secondary\" className=\"size-10 rounded-full\">\n <ShoppingCartIcon />\n </Button>\n </SheetTrigger>\n <SheetContent className=\"w-svw\">\n <SheetHeader className=\"border-border-weak border-b\">\n <SheetTitle>Giỏ hàng của bạn</SheetTitle>\n </SheetHeader>\n <section className=\"p-4 pt-0\">\n <Tabs defaultValue=\"pre_order\">\n <TabsList className=\"w-full\">\n <TabsTrigger value=\"in_stock\" className=\"\">\n In Stock\n </TabsTrigger>\n <TabsTrigger value=\"pre_order\" className=\"\">\n Pre Order\n </TabsTrigger>\n </TabsList>\n <TabsContent value=\"pre_order\">\n <Card></Card>\n </TabsContent>\n <TabsContent value=\"in_stock\">\n <Card></Card>\n </TabsContent>\n </Tabs>\n </section>\n </SheetContent>\n </Sheet>\n )\n}\n\ntype ServiceLayoutHeaderProps = {\n isLoggedIn?: boolean\n}\nexport const ServiceLayoutHeader: React.FC<ServiceLayoutHeaderProps> = () => {\n const { isLoggedIn, username, email, onGoogleLoginSuccess, onLogout } = useServiceLayout()\n\n const isDesktop = useMediaQuery('(min-width: 640px)')\n\n const [loginOpen, setLoginOpen] = useState<boolean>(false)\n\n return (\n <header\n className={cn(\n 'bg-card',\n 'h-(--header-height)',\n 'sm:h-[calc(var(--header-height)_+_0.5rem)]',\n 'sm:px-4 sm:pr-6',\n 'absolute inset-x-0 top-0 z-20 gap-2 px-2 pr-4.5',\n 'shadow-nav flex items-center',\n 'transition-[width,height] ease-linear',\n )}\n >\n <ServiceLayoutSidebarTrigger />\n\n <div className=\"flex gap-x-2 sm:ml-2.5\">\n <div className=\"bg-sidebar-primary text-sidebar-primary-foreground flex aspect-square size-8 items-center justify-center rounded-lg\">\n <ShoppingCartIcon size={20} />\n </div>\n <div className=\"grid flex-1 text-left text-sm leading-tight\">\n <span className=\"truncate font-medium\">Lunas Store</span>\n <span className=\"truncate text-xs\">Established 2023</span>\n </div>\n </div>\n\n <div className=\"flex flex-1 items-center justify-end gap-x-2\">\n {!isLoggedIn && (\n <Button className=\"w-8 sm:w-fit\" onClick={() => setLoginOpen(true)}>\n <LogInIcon />\n <span className=\"sr-only sm:not-sr-only\">Đăng nhập</span>\n </Button>\n )}\n {isLoggedIn && (\n <>\n <ServiceLayoutUserInfo userName={username} userEmail={email} onLogout={onLogout} />\n <Separator orientation=\"vertical\" className=\"min-h-6 w-px\" />\n <ServiceLayoutCartInfo />\n </>\n )}\n </div>\n\n {isDesktop && (\n <Dialog open={loginOpen} onOpenChange={setLoginOpen}>\n <DialogContent showCloseButton={false} className=\"flex flex-col gap-0 border-none p-0 sm:max-w-sm\">\n <DialogHeader className=\"flex-0 gap-2 p-6\">\n <DialogTitle className=\"text-center\">Chào mừng bạn đến với Lunas Store!</DialogTitle>\n </DialogHeader>\n <div className=\"flex flex-1 flex-col\">\n <main className=\"bg-card size-full flex-1 p-4 pt-0\">\n <div className=\"flex flex-col items-center gap-y-1\">\n <p className=\"text-text-positive-weak text-sm\">Đăng nhập với Google</p>\n <GoogleLogin\n size=\"large\"\n theme=\"outline\"\n width={240}\n onSuccess={async (response) => {\n if (!response.clientId || !response.credential || !response.select_by) return\n await onGoogleLoginSuccess?.({\n clientId: response.clientId,\n credential: response.credential,\n select_by: response.select_by,\n })\n }}\n />\n </div>\n </main>\n </div>\n <DialogFooter className=\"p-2\" />\n </DialogContent>\n </Dialog>\n )}\n\n {!isDesktop && (\n <Drawer open={loginOpen} onOpenChange={setLoginOpen}>\n <DrawerContent>\n <DrawerHeader className=\"text-left\">\n <DrawerTitle>Chào mừng bạn đến với Lunas Store!</DrawerTitle>\n </DrawerHeader>\n <div className=\"flex flex-1 flex-col\">\n <main className=\"flex size-full flex-1 flex-col p-4 pt-0\">\n <div className=\"flex flex-col items-center gap-y-1\">\n <p className=\"text-text-positive-weak text-sm\">Đăng nhập với Google</p>\n <GoogleLogin\n size=\"large\"\n theme=\"outline\"\n onSuccess={async (response) => {\n if (!response.clientId || !response.credential || !response.select_by) return\n await onGoogleLoginSuccess?.({\n clientId: response.clientId,\n credential: response.credential,\n select_by: response.select_by,\n })\n }}\n />\n </div>\n </main>\n </div>\n <DrawerFooter />\n </DrawerContent>\n </Drawer>\n )}\n </header>\n )\n}\n\nexport const ServiceLayoutSidebar: React.FC<React.PropsWithChildren & React.ComponentProps<typeof LayoutSidebar>> = ({ children, ...props }) => {\n return (\n <LayoutSidebar variant=\"inset\" collapsible=\"icon\" {...props}>\n {children}\n </LayoutSidebar>\n )\n}\n\nexport const ServiceLayoutMain: React.FC<React.PropsWithChildren> = ({ children }) => {\n return (\n <ServiceLayoutSidebarInset>\n <section className=\"relative size-full\">\n <div className=\"absolute inset-0 flex flex-col\">{children}</div>\n </section>\n </ServiceLayoutSidebarInset>\n )\n}\nexport const ServiceLayoutMainHeader: React.FC<React.PropsWithChildren & { className?: string }> = ({ className, children }) => {\n return (\n <div data-slot=\"main-header\" className={cn('flex-0 snap-start', className)}>\n {children}\n </div>\n )\n}\n\nexport const ServiceLayoutMainContent: React.FC<React.PropsWithChildren & { className?: string }> = ({ className, children }) => {\n return (\n <div data-slot=\"main-content\" className={cn('flex w-full flex-1 flex-col gap-4 overflow-y-auto px-2 sm:px-4', className)}>\n {children}\n </div>\n )\n}\n\nexport const ServiceLayoutMainFooter: React.FC<React.PropsWithChildren & { className?: string }> = ({ className, children }) => {\n return (\n <div data-slot=\"main-footer\" className={cn('border-border-weak hidden w-full flex-0 border-t pt-2 sm:flex', className)}>\n {children}\n </div>\n )\n}\n\nexport const ServiceLayoutMainGroup: React.FC<React.PropsWithChildren<{ className?: string }>> = ({ children, className }) => {\n return (\n <div data-slot=\"main-group\" className={cn('flex size-full flex-col gap-4', className)}>\n {children}\n </div>\n )\n}\n\nexport const ServiceLayoutMainGroupContent: React.FC<React.PropsWithChildren & { className?: string }> = ({ className, children }) => {\n return (\n <div data-slot=\"main-group-content\" className={cn('bg-card shadow-card max-w-8xl size-full flex-1 rounded-md p-4', className)}>\n {children}\n </div>\n )\n}\n"],"mappings":"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"}
@@ -0,0 +1,114 @@
1
+ import "../../button-BtvqPQbl.cjs";
2
+ import "../../separator-DT79vOG-.cjs";
3
+ import { TooltipContent } from "../../tooltip-CJK3asOo.cjs";
4
+ import * as react_jsx_runtime281 from "react/jsx-runtime";
5
+ import * as class_variance_authority_types8 from "class-variance-authority/types";
6
+ import { VariantProps } from "class-variance-authority";
7
+ import { CredentialResponse } from "@react-oauth/google";
8
+
9
+ //#region packages/components/layouts/service-layout/service-layout-sidebar.d.ts
10
+
11
+ declare function ServiceLayoutSidebar$1({
12
+ side,
13
+ variant,
14
+ collapsible,
15
+ className,
16
+ children,
17
+ ...props
18
+ }: React.ComponentProps<'div'> & {
19
+ side?: 'left' | 'right';
20
+ variant?: 'sidebar' | 'floating' | 'inset';
21
+ collapsible?: 'offcanvas' | 'icon' | 'none';
22
+ }): react_jsx_runtime281.JSX.Element;
23
+ declare function ServiceLayoutSidebarFooter({
24
+ className,
25
+ children,
26
+ ...props
27
+ }: React.ComponentProps<'div'>): react_jsx_runtime281.JSX.Element;
28
+ declare function ServiceLayoutSidebarContent({
29
+ className,
30
+ ...props
31
+ }: React.ComponentProps<'div'>): react_jsx_runtime281.JSX.Element;
32
+ declare function ServiceLayoutSidebarGroup({
33
+ className,
34
+ ...props
35
+ }: React.ComponentProps<'div'>): react_jsx_runtime281.JSX.Element;
36
+ declare function ServiceLayoutSidebarGroupLabel({
37
+ className,
38
+ asChild,
39
+ ...props
40
+ }: React.ComponentProps<'div'> & {
41
+ asChild?: boolean;
42
+ }): react_jsx_runtime281.JSX.Element;
43
+ declare function ServiceLayoutSidebarGroupContent({
44
+ className,
45
+ ...props
46
+ }: React.ComponentProps<'div'>): react_jsx_runtime281.JSX.Element;
47
+ declare function ServiceLayoutSidebarMenu({
48
+ className,
49
+ ...props
50
+ }: React.ComponentProps<'ul'>): react_jsx_runtime281.JSX.Element;
51
+ declare function ServiceLayoutSidebarMenuItem({
52
+ className,
53
+ ...props
54
+ }: React.ComponentProps<'li'>): react_jsx_runtime281.JSX.Element;
55
+ declare const sidebarMenuButtonVariants: (props?: ({
56
+ variant?: "default" | "outline" | null | undefined;
57
+ size?: "sm" | "lg" | "default" | null | undefined;
58
+ } & class_variance_authority_types8.ClassProp) | undefined) => string;
59
+ declare function ServiceLayoutSidebarMenuButton({
60
+ asChild,
61
+ isActive,
62
+ variant,
63
+ size,
64
+ tooltip,
65
+ className,
66
+ ...props
67
+ }: React.ComponentProps<'button'> & {
68
+ asChild?: boolean;
69
+ isActive?: boolean;
70
+ tooltip?: string | React.ComponentProps<typeof TooltipContent>;
71
+ } & VariantProps<typeof sidebarMenuButtonVariants>): react_jsx_runtime281.JSX.Element;
72
+ //#endregion
73
+ //#region packages/components/layouts/service-layout/service-layout.d.ts
74
+ type ServiceLayoutContextProps = {
75
+ isLoggedIn?: boolean;
76
+ username?: string;
77
+ email?: string;
78
+ onGoogleLoginSuccess?: (params: CredentialResponse) => void | Promise<void>;
79
+ onLogout?: () => void | Promise<void>;
80
+ };
81
+ declare const useServiceLayout: () => ServiceLayoutContextProps;
82
+ declare const ServiceLayoutProvider: React.FC<React.PropsWithChildren<ServiceLayoutContextProps>>;
83
+ declare const ServiceLayoutWrapper: React.FC<React.PropsWithChildren>;
84
+ type ServiceLayoutUserInfoProps = {
85
+ userName?: string;
86
+ userEmail?: string;
87
+ onLogout?: () => void | Promise<void>;
88
+ };
89
+ declare const ServiceLayoutUserInfo: React.FC<ServiceLayoutUserInfoProps>;
90
+ declare const ServiceLayoutCartInfo: React.FC;
91
+ type ServiceLayoutHeaderProps = {
92
+ isLoggedIn?: boolean;
93
+ };
94
+ declare const ServiceLayoutHeader: React.FC<ServiceLayoutHeaderProps>;
95
+ declare const ServiceLayoutSidebar: React.FC<React.PropsWithChildren & React.ComponentProps<typeof ServiceLayoutSidebar$1>>;
96
+ declare const ServiceLayoutMain: React.FC<React.PropsWithChildren>;
97
+ declare const ServiceLayoutMainHeader: React.FC<React.PropsWithChildren & {
98
+ className?: string;
99
+ }>;
100
+ declare const ServiceLayoutMainContent: React.FC<React.PropsWithChildren & {
101
+ className?: string;
102
+ }>;
103
+ declare const ServiceLayoutMainFooter: React.FC<React.PropsWithChildren & {
104
+ className?: string;
105
+ }>;
106
+ declare const ServiceLayoutMainGroup: React.FC<React.PropsWithChildren<{
107
+ className?: string;
108
+ }>>;
109
+ declare const ServiceLayoutMainGroupContent: React.FC<React.PropsWithChildren & {
110
+ className?: string;
111
+ }>;
112
+ //#endregion
113
+ export { ServiceLayoutCartInfo, ServiceLayoutHeader, ServiceLayoutMain, ServiceLayoutMainContent, ServiceLayoutMainFooter, ServiceLayoutMainGroup, ServiceLayoutMainGroupContent, ServiceLayoutMainHeader, ServiceLayoutProvider, ServiceLayoutSidebar, ServiceLayoutSidebarContent, ServiceLayoutSidebarFooter, ServiceLayoutSidebarGroup, ServiceLayoutSidebarGroupContent, ServiceLayoutSidebarGroupLabel, ServiceLayoutSidebarMenu, ServiceLayoutSidebarMenuButton, ServiceLayoutSidebarMenuItem, ServiceLayoutUserInfo, ServiceLayoutWrapper, useServiceLayout };
114
+ //# sourceMappingURL=index.d.cts.map
@@ -0,0 +1,114 @@
1
+ import "../../button-B_r8XsfH.js";
2
+ import "../../separator-Cr_2vFm6.js";
3
+ import { TooltipContent } from "../../tooltip-CyEOAlsP.js";
4
+ import { VariantProps } from "class-variance-authority";
5
+ import * as react_jsx_runtime259 from "react/jsx-runtime";
6
+ import { CredentialResponse } from "@react-oauth/google";
7
+ import * as class_variance_authority_types7 from "class-variance-authority/types";
8
+
9
+ //#region packages/components/layouts/service-layout/service-layout-sidebar.d.ts
10
+
11
+ declare function ServiceLayoutSidebar$1({
12
+ side,
13
+ variant,
14
+ collapsible,
15
+ className,
16
+ children,
17
+ ...props
18
+ }: React.ComponentProps<'div'> & {
19
+ side?: 'left' | 'right';
20
+ variant?: 'sidebar' | 'floating' | 'inset';
21
+ collapsible?: 'offcanvas' | 'icon' | 'none';
22
+ }): react_jsx_runtime259.JSX.Element;
23
+ declare function ServiceLayoutSidebarFooter({
24
+ className,
25
+ children,
26
+ ...props
27
+ }: React.ComponentProps<'div'>): react_jsx_runtime259.JSX.Element;
28
+ declare function ServiceLayoutSidebarContent({
29
+ className,
30
+ ...props
31
+ }: React.ComponentProps<'div'>): react_jsx_runtime259.JSX.Element;
32
+ declare function ServiceLayoutSidebarGroup({
33
+ className,
34
+ ...props
35
+ }: React.ComponentProps<'div'>): react_jsx_runtime259.JSX.Element;
36
+ declare function ServiceLayoutSidebarGroupLabel({
37
+ className,
38
+ asChild,
39
+ ...props
40
+ }: React.ComponentProps<'div'> & {
41
+ asChild?: boolean;
42
+ }): react_jsx_runtime259.JSX.Element;
43
+ declare function ServiceLayoutSidebarGroupContent({
44
+ className,
45
+ ...props
46
+ }: React.ComponentProps<'div'>): react_jsx_runtime259.JSX.Element;
47
+ declare function ServiceLayoutSidebarMenu({
48
+ className,
49
+ ...props
50
+ }: React.ComponentProps<'ul'>): react_jsx_runtime259.JSX.Element;
51
+ declare function ServiceLayoutSidebarMenuItem({
52
+ className,
53
+ ...props
54
+ }: React.ComponentProps<'li'>): react_jsx_runtime259.JSX.Element;
55
+ declare const sidebarMenuButtonVariants: (props?: ({
56
+ variant?: "default" | "outline" | null | undefined;
57
+ size?: "sm" | "lg" | "default" | null | undefined;
58
+ } & class_variance_authority_types7.ClassProp) | undefined) => string;
59
+ declare function ServiceLayoutSidebarMenuButton({
60
+ asChild,
61
+ isActive,
62
+ variant,
63
+ size,
64
+ tooltip,
65
+ className,
66
+ ...props
67
+ }: React.ComponentProps<'button'> & {
68
+ asChild?: boolean;
69
+ isActive?: boolean;
70
+ tooltip?: string | React.ComponentProps<typeof TooltipContent>;
71
+ } & VariantProps<typeof sidebarMenuButtonVariants>): react_jsx_runtime259.JSX.Element;
72
+ //#endregion
73
+ //#region packages/components/layouts/service-layout/service-layout.d.ts
74
+ type ServiceLayoutContextProps = {
75
+ isLoggedIn?: boolean;
76
+ username?: string;
77
+ email?: string;
78
+ onGoogleLoginSuccess?: (params: CredentialResponse) => void | Promise<void>;
79
+ onLogout?: () => void | Promise<void>;
80
+ };
81
+ declare const useServiceLayout: () => ServiceLayoutContextProps;
82
+ declare const ServiceLayoutProvider: React.FC<React.PropsWithChildren<ServiceLayoutContextProps>>;
83
+ declare const ServiceLayoutWrapper: React.FC<React.PropsWithChildren>;
84
+ type ServiceLayoutUserInfoProps = {
85
+ userName?: string;
86
+ userEmail?: string;
87
+ onLogout?: () => void | Promise<void>;
88
+ };
89
+ declare const ServiceLayoutUserInfo: React.FC<ServiceLayoutUserInfoProps>;
90
+ declare const ServiceLayoutCartInfo: React.FC;
91
+ type ServiceLayoutHeaderProps = {
92
+ isLoggedIn?: boolean;
93
+ };
94
+ declare const ServiceLayoutHeader: React.FC<ServiceLayoutHeaderProps>;
95
+ declare const ServiceLayoutSidebar: React.FC<React.PropsWithChildren & React.ComponentProps<typeof ServiceLayoutSidebar$1>>;
96
+ declare const ServiceLayoutMain: React.FC<React.PropsWithChildren>;
97
+ declare const ServiceLayoutMainHeader: React.FC<React.PropsWithChildren & {
98
+ className?: string;
99
+ }>;
100
+ declare const ServiceLayoutMainContent: React.FC<React.PropsWithChildren & {
101
+ className?: string;
102
+ }>;
103
+ declare const ServiceLayoutMainFooter: React.FC<React.PropsWithChildren & {
104
+ className?: string;
105
+ }>;
106
+ declare const ServiceLayoutMainGroup: React.FC<React.PropsWithChildren<{
107
+ className?: string;
108
+ }>>;
109
+ declare const ServiceLayoutMainGroupContent: React.FC<React.PropsWithChildren & {
110
+ className?: string;
111
+ }>;
112
+ //#endregion
113
+ export { ServiceLayoutCartInfo, ServiceLayoutHeader, ServiceLayoutMain, ServiceLayoutMainContent, ServiceLayoutMainFooter, ServiceLayoutMainGroup, ServiceLayoutMainGroupContent, ServiceLayoutMainHeader, ServiceLayoutProvider, ServiceLayoutSidebar, ServiceLayoutSidebarContent, ServiceLayoutSidebarFooter, ServiceLayoutSidebarGroup, ServiceLayoutSidebarGroupContent, ServiceLayoutSidebarGroupLabel, ServiceLayoutSidebarMenu, ServiceLayoutSidebarMenuButton, ServiceLayoutSidebarMenuItem, ServiceLayoutUserInfo, ServiceLayoutWrapper, useServiceLayout };
114
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,2 @@
1
+ import{Button as e}from"../../button-CvQQTSka.js";import{Card as t}from"../../card-BFYPY2aR.js";import"../../skeleton-DFF0w4en.js";import{Tooltip as n,TooltipContent as r,TooltipProvider as i,TooltipTrigger as a}from"../../tooltip-CN8vvmWA.js";import{Dialog as o,DialogContent as s,DialogFooter as c,DialogHeader as l,DialogTitle as u}from"../../dialog-DbI18XF9.js";import{Drawer as d,DrawerContent as f,DrawerFooter as p,DrawerHeader as m,DrawerTitle as h}from"../../drawer-BbQKog4D.js";import{DropdownMenu as g,DropdownMenuContent as _,DropdownMenuItem as v,DropdownMenuLabel as ee,DropdownMenuSeparator as te,DropdownMenuTrigger as y}from"../../dropdown-menu-Cn96vqMy.js";import{Avatar as b,AvatarFallback as x,AvatarImage as ne}from"../../avatar-Bp69hha6.js";import{Separator as re}from"../../separator-DW2PaiUK.js";import{Sheet as S,SheetContent as C,SheetDescription as ie,SheetHeader as w,SheetTitle as T,SheetTrigger as E}from"../../sheet-BumlzKcW.js";import{Tabs as D,TabsContent as O,TabsList as k,TabsTrigger as A}from"../../tabs-D4Q78tF2.js";import{LogInIcon as ae,LogOutIcon as oe,MenuIcon as se,ShoppingCartIcon as j,UserIcon as ce}from"lucide-react";import{cn as M}from"@customafk/react-toolkit/utils";import{cva as le}from"class-variance-authority";import{Slot as N}from"radix-ui";import{Fragment as ue,jsx as P,jsxs as F}from"react/jsx-runtime";import{createContext as I,useCallback as L,useContext as R,useEffect as z,useMemo as B,useState as V}from"react";import{useMediaQuery as H}from"@customafk/react-toolkit/hooks/useMediaQuery";import{GoogleLogin as U}from"@react-oauth/google";import{useIsMobile as de}from"@customafk/react-toolkit/hooks/useMobile";const W=I(null);function G(){let e=R(W);if(!e)throw Error(`useSidebar must be used within a SidebarProvider.`);return e}function fe({defaultOpen:e=!0,open:t,onOpenChange:n,className:r,style:a,children:o,...s}){let c=de(),[l,u]=V(!1),[d,f]=V(e),p=t??d,m=L(e=>{let t=typeof e==`function`?e(p):e;n?n(t):f(t),document.cookie=`sidebar_state=${t}; path=/; max-age=604800`},[n,p]),h=L(()=>c?u(e=>!e):m(e=>!e),[c,m,u]);z(()=>{let e=e=>{e.key===`b`&&(e.metaKey||e.ctrlKey)&&(e.preventDefault(),h())};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[h]);let g=p?`expanded`:`collapsed`,_=B(()=>({state:g,isMobile:c,toggleSidebar:h,open:p,setOpen:m,openMobile:l,setOpenMobile:u}),[g,p,m,c,l,u,h]);return P(W.Provider,{value:_,children:P(i,{delayDuration:0,children:P(`div`,{"data-slot":`sidebar-wrapper`,style:{"--sidebar-width":`16rem`,"--sidebar-width-icon":`3rem`,...a},className:M(`group/sidebar-wrapper`,`has-data-[variant=inset]:bg-sidebar`,`flex h-svh w-full`,r),...s,children:o})})})}function pe({side:e=`left`,variant:t=`sidebar`,collapsible:n=`offcanvas`,className:r,children:i,...a}){let{isMobile:o,state:s,openMobile:c,setOpenMobile:l}=G();return n===`none`?P(`aside`,{"data-slot":`sidebar`,className:M(`bg-sidebar`,`text-sidebar-foreground`,`flex h-full w-(--sidebar-width) flex-col`,r),...a,children:i}):o?P(S,{open:c,onOpenChange:l,...a,children:F(C,{"data-sidebar":`sidebar`,"data-slot":`sidebar`,"data-mobile":`true`,className:`bg-sidebar text-sidebar-foreground w-(--sidebar-width) p-0 [&>button]:hidden`,style:{"--sidebar-width":`16rem`},side:e,children:[F(w,{className:`sr-only`,children:[P(T,{children:`Sidebar`}),P(ie,{children:`Displays the mobile sidebar.`})]}),F(`div`,{className:`flex size-full flex-col`,children:[F(`div`,{className:`border-border-weak flex items-center gap-x-2 border-b p-2 pr-4`,children:[P(K,{}),P(`div`,{className:`bg-sidebar-primary text-sidebar-primary-foreground ml-2 flex aspect-square size-8 items-center justify-center rounded-lg`,children:P(j,{size:20})}),F(`div`,{className:`grid flex-1 text-left text-sm leading-tight`,children:[P(`span`,{className:`truncate font-medium`,children:`Lunas Store`}),P(`span`,{className:`truncate text-xs`,children:`Established 2023`})]})]}),i]})]})}):F(`aside`,{className:`group peer text-sidebar-foreground bg-card hidden md:block`,"data-state":s,"data-collapsible":s===`collapsed`?n:``,"data-variant":t,"data-side":e,"data-slot":`sidebar`,children:[P(`div`,{"data-slot":`sidebar-gap`,className:M(`relative`,`bg-transparent`,`transition-[width] duration-200 ease-linear`,`h-(--header-height) w-(--sidebar-width)`,`sm:h-[calc(var(--header-height) + 0.5rem)]`,`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)`)}),P(`div`,{"data-slot":`sidebar-container`,className:M(`hidden md:flex`,`shadow-nav fixed inset-y-0 top-14 z-10`,`h-[calc(100svh-3.5rem)] w-(--sidebar-width)`,`transition-[left,right,width] duration-200 ease-linear`,e===`left`&&`left-0 group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]`,e===`right`&&`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)))]`:`group-data-[collapsible=icon]:w-(--sidebar-width-icon) group-data-[side=left]:border-r group-data-[side=right]:border-l`,r),...a,children:P(`div`,{"data-sidebar":`sidebar`,"data-slot":`sidebar-inner`,className:M(`flex size-full flex-col`,`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 K({className:t,onClick:n,...r}){let{toggleSidebar:i}=G();return F(e,{"data-sidebar":`trigger`,"data-slot":`sidebar-trigger`,variant:`ghost`,color:`muted`,size:`icon`,className:M(`size-10 rounded-full`,t),onClick:e=>{n?.(e),i()},...r,children:[P(se,{className:`!size-6`}),P(`span`,{className:`sr-only`,children:`Toggle Sidebar`})]})}function me({className:e,children:t,...n}){return F(`main`,{"data-slot":`sidebar-inset`,className:M(`relative flex w-full flex-1 flex-col`,e),...n,children:[P(`div`,{className:`h-(--header-height) w-full sm:h-[calc(var(--header-height)_+_0.5rem)]`}),P(`div`,{className:M(`flex-1 inset-shadow-sm`),children:t})]})}function he({className:e,children:t,...n}){let{open:r}=G();return F(`div`,{"data-slot":`sidebar-footer`,"data-sidebar":`footer`,className:M(`flex flex-col gap-2 p-2`,e),...n,children:[t,r&&P(q,{children:P(J,{children:P(`p`,{className:`text-muted-foreground text-center text-xs`,children:`Copyright © 2025, Lunas.`})})})]})}function ge({className:e,...t}){return P(`div`,{"data-slot":`sidebar-content`,"data-sidebar":`content`,className:M(`flex min-h-0 flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden`,e),...t})}function _e({className:e,...t}){return P(`div`,{"data-slot":`sidebar-group`,"data-sidebar":`group`,className:M(`relative flex w-full min-w-0 flex-col`,e),...t})}function ve({className:e,asChild:t=!1,...n}){let r=t?N.Slot:`div`;return P(r,{"data-slot":`sidebar-group-label`,"data-sidebar":`group-label`,className:M(`flex h-8 shrink-0 items-center rounded-md px-2 text-xs font-medium outline-hidden transition-[margin,opacity] duration-200 ease-linear focus-visible:ring-2`,`text-sidebar-foreground/70`,`ring-sidebar-ring`,`[&>svg]:size-4`,`[&>svg]:shrink-0`,`group-data-[collapsible=icon]:-mt-8`,`group-data-[collapsible=icon]:opacity-0`,e),...n})}function ye({className:e,...t}){return P(`div`,{"data-slot":`sidebar-group-content`,"data-sidebar":`group-content`,className:M(`w-full text-sm`,e),...t})}function q({className:e,...t}){return P(`ul`,{"data-slot":`sidebar-menu`,"data-sidebar":`menu`,className:M(`flex w-full min-w-0 flex-col gap-1`,e),...t})}function J({className:e,...t}){return P(`li`,{"data-slot":`sidebar-menu-item`,"data-sidebar":`menu-item`,className:M(`group/menu-item relative`,e),...t})}const be=le(`peer/menu-button.cursor-pointer.flex w-full items-center gap-2.overflow-hidden rounded-md p-2 outline-hidden.text-left truncate.transition-[color,width,height,padding].hover:bg-sidebar-accent.hover:text-sidebar-accent-foreground.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-medium.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-12!.group-data-[collapsible=icon]:p-3!.group-data-[collapsible=icon]:gap-3!.[&>svg]:size-6.[&>svg]:shrink-0.[&>span:last-child]:truncate`.split(`.`),{variants:{variant:{default:`hover:bg-sidebar-accent/60 hover:text-sidebar-accent-foreground/80`,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-10 text-sm`,sm:`h-7 text-xs`,lg:`h-12 text-sm group-data-[collapsible=icon]:p-0!`}},defaultVariants:{variant:`default`,size:`default`}});function xe({asChild:e=!1,isActive:t=!1,variant:i=`default`,size:o=`default`,tooltip:s,className:c,...l}){let u=e?N.Slot:`button`,{isMobile:d,state:f}=G(),p=P(u,{"data-slot":`sidebar-menu-button`,"data-sidebar":`menu-button`,"data-size":o,"data-active":t,className:M(be({variant:i,size:o}),c),...l});return s?(typeof s==`string`&&(s={children:s}),F(n,{children:[P(a,{asChild:!0,children:p}),P(r,{side:`right`,align:`center`,hidden:f!==`collapsed`||d,...s})]})):p}const Y=I(null),X=()=>{let e=R(Y);if(!e)throw Error(`useServiceLayoutContext must be used within a ServiceLayoutProvider`);return e},Se=({isLoggedIn:e=!1,username:t,email:n,onGoogleLoginSuccess:r,onLogout:i,children:a})=>P(Y.Provider,{value:{isLoggedIn:e,username:t,email:n,onGoogleLoginSuccess:r,onLogout:i},children:a}),Z=({children:e})=>P(fe,{children:e}),Q=({userName:t=`Keith Kennedy`,userEmail:n=`k.kennedy@originui.com`,onLogout:r})=>F(g,{children:[P(y,{asChild:!0,children:P(e,{size:`icon`,variant:`ghost`,color:`secondary`,className:`size-10 rounded-full`,children:F(b,{className:`size-10`,children:[P(ne,{src:``,alt:``}),P(x,{className:`bg-muted-muted size-full`,children:P(ce,{})})]})})}),F(_,{align:`end`,className:`max-w-64`,children:[F(ee,{className:`flex min-w-0 flex-col`,children:[P(`span`,{className:`text-text-positive truncate text-sm font-medium`,children:t}),P(`span`,{className:`text-text-positive-weak truncate text-xs font-normal`,children:n})]}),P(te,{}),F(v,{onClick:r,children:[P(oe,{size:16,"aria-hidden":`true`}),P(`span`,{className:`text-text-positive`,children:`Logout`})]})]})]}),$=()=>F(S,{children:[P(E,{asChild:!0,children:P(e,{size:`icon`,variant:`ghost`,color:`secondary`,className:`size-10 rounded-full`,children:P(j,{})})}),F(C,{className:`w-svw`,children:[P(w,{className:`border-border-weak border-b`,children:P(T,{children:`Giỏ hàng của bạn`})}),P(`section`,{className:`p-4 pt-0`,children:F(D,{defaultValue:`pre_order`,children:[F(k,{className:`w-full`,children:[P(A,{value:`in_stock`,className:``,children:`In Stock`}),P(A,{value:`pre_order`,className:``,children:`Pre Order`})]}),P(O,{value:`pre_order`,children:P(t,{})}),P(O,{value:`in_stock`,children:P(t,{})})]})})]})]}),Ce=()=>{let{isLoggedIn:t,username:n,email:r,onGoogleLoginSuccess:i,onLogout:a}=X(),g=H(`(min-width: 640px)`),[_,v]=V(!1);return F(`header`,{className:M(`bg-card`,`h-(--header-height)`,`sm:h-[calc(var(--header-height)_+_0.5rem)]`,`sm:px-4 sm:pr-6`,`absolute inset-x-0 top-0 z-20 gap-2 px-2 pr-4.5`,`shadow-nav flex items-center`,`transition-[width,height] ease-linear`),children:[P(K,{}),F(`div`,{className:`flex gap-x-2 sm:ml-2.5`,children:[P(`div`,{className:`bg-sidebar-primary text-sidebar-primary-foreground flex aspect-square size-8 items-center justify-center rounded-lg`,children:P(j,{size:20})}),F(`div`,{className:`grid flex-1 text-left text-sm leading-tight`,children:[P(`span`,{className:`truncate font-medium`,children:`Lunas Store`}),P(`span`,{className:`truncate text-xs`,children:`Established 2023`})]})]}),F(`div`,{className:`flex flex-1 items-center justify-end gap-x-2`,children:[!t&&F(e,{className:`w-8 sm:w-fit`,onClick:()=>v(!0),children:[P(ae,{}),P(`span`,{className:`sr-only sm:not-sr-only`,children:`Đăng nhập`})]}),t&&F(ue,{children:[P(Q,{userName:n,userEmail:r,onLogout:a}),P(re,{orientation:`vertical`,className:`min-h-6 w-px`}),P($,{})]})]}),g&&P(o,{open:_,onOpenChange:v,children:F(s,{showCloseButton:!1,className:`flex flex-col gap-0 border-none p-0 sm:max-w-sm`,children:[P(l,{className:`flex-0 gap-2 p-6`,children:P(u,{className:`text-center`,children:`Chào mừng bạn đến với Lunas Store!`})}),P(`div`,{className:`flex flex-1 flex-col`,children:P(`main`,{className:`bg-card size-full flex-1 p-4 pt-0`,children:F(`div`,{className:`flex flex-col items-center gap-y-1`,children:[P(`p`,{className:`text-text-positive-weak text-sm`,children:`Đăng nhập với Google`}),P(U,{size:`large`,theme:`outline`,width:240,onSuccess:async e=>{!e.clientId||!e.credential||!e.select_by||await i?.({clientId:e.clientId,credential:e.credential,select_by:e.select_by})}})]})})}),P(c,{className:`p-2`})]})}),!g&&P(d,{open:_,onOpenChange:v,children:F(f,{children:[P(m,{className:`text-left`,children:P(h,{children:`Chào mừng bạn đến với Lunas Store!`})}),P(`div`,{className:`flex flex-1 flex-col`,children:P(`main`,{className:`flex size-full flex-1 flex-col p-4 pt-0`,children:F(`div`,{className:`flex flex-col items-center gap-y-1`,children:[P(`p`,{className:`text-text-positive-weak text-sm`,children:`Đăng nhập với Google`}),P(U,{size:`large`,theme:`outline`,onSuccess:async e=>{!e.clientId||!e.credential||!e.select_by||await i?.({clientId:e.clientId,credential:e.credential,select_by:e.select_by})}})]})})}),P(p,{})]})})]})},we=({children:e,...t})=>P(pe,{variant:`inset`,collapsible:`icon`,...t,children:e}),Te=({children:e})=>P(me,{children:P(`section`,{className:`relative size-full`,children:P(`div`,{className:`absolute inset-0 flex flex-col`,children:e})})}),Ee=({className:e,children:t})=>P(`div`,{"data-slot":`main-header`,className:M(`flex-0 snap-start`,e),children:t}),De=({className:e,children:t})=>P(`div`,{"data-slot":`main-content`,className:M(`flex w-full flex-1 flex-col gap-4 overflow-y-auto px-2 sm:px-4`,e),children:t}),Oe=({className:e,children:t})=>P(`div`,{"data-slot":`main-footer`,className:M(`border-border-weak hidden w-full flex-0 border-t pt-2 sm:flex`,e),children:t}),ke=({children:e,className:t})=>P(`div`,{"data-slot":`main-group`,className:M(`flex size-full flex-col gap-4`,t),children:e}),Ae=({className:e,children:t})=>P(`div`,{"data-slot":`main-group-content`,className:M(`bg-card shadow-card max-w-8xl size-full flex-1 rounded-md p-4`,e),children:t});export{$ as ServiceLayoutCartInfo,Ce as ServiceLayoutHeader,Te as ServiceLayoutMain,De as ServiceLayoutMainContent,Oe as ServiceLayoutMainFooter,ke as ServiceLayoutMainGroup,Ae as ServiceLayoutMainGroupContent,Ee as ServiceLayoutMainHeader,Se as ServiceLayoutProvider,we as ServiceLayoutSidebar,ge as ServiceLayoutSidebarContent,he as ServiceLayoutSidebarFooter,_e as ServiceLayoutSidebarGroup,ye as ServiceLayoutSidebarGroupContent,ve as ServiceLayoutSidebarGroupLabel,q as ServiceLayoutSidebarMenu,xe as ServiceLayoutSidebarMenuButton,J as ServiceLayoutSidebarMenuItem,Q as ServiceLayoutUserInfo,Z as ServiceLayoutWrapper,X as useServiceLayout};
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["open","ServiceLayoutSidebar","SlotPrimitive","Tooltip","ServiceLayoutProvider: React.FC<React.PropsWithChildren<ServiceLayoutContextProps>>","ServiceLayoutWrapper: React.FC<React.PropsWithChildren>","ServiceLayoutUserInfo: React.FC<ServiceLayoutUserInfoProps>","DropdownMenu","Avatar","ServiceLayoutCartInfo: React.FC","Tabs","ServiceLayoutHeader: React.FC<ServiceLayoutHeaderProps>","Separator","Dialog","ServiceLayoutSidebar: React.FC<React.PropsWithChildren & React.ComponentProps<typeof LayoutSidebar>>","LayoutSidebar","ServiceLayoutMain: React.FC<React.PropsWithChildren>","ServiceLayoutMainHeader: React.FC<React.PropsWithChildren & { className?: string }>","ServiceLayoutMainContent: React.FC<React.PropsWithChildren & { className?: string }>","ServiceLayoutMainFooter: React.FC<React.PropsWithChildren & { className?: string }>","ServiceLayoutMainGroup: React.FC<React.PropsWithChildren<{ className?: string }>>","ServiceLayoutMainGroupContent: React.FC<React.PropsWithChildren & { className?: string }>"],"sources":["../../../packages/components/layouts/service-layout/service-layout-sidebar.tsx","../../../packages/components/layouts/service-layout/service-layout.tsx"],"sourcesContent":["import { createContext, useCallback, useContext, useEffect, useMemo, useState } from 'react'\nimport { useIsMobile } from '@customafk/react-toolkit/hooks/useMobile'\nimport { cn } from '@customafk/react-toolkit/utils'\n\nimport { MenuIcon, ShoppingCartIcon } from 'lucide-react'\n\nimport { Button } from '@/components/ui/button'\nimport { Separator } from '@/components/ui/separator'\nimport { Sheet, SheetContent, SheetDescription, SheetHeader, SheetTitle } from '@/components/ui/sheet'\nimport { Skeleton } from '@/components/ui/skeleton'\nimport { TooltipProvider } from '@/components/ui/tooltip'\nimport { Tooltip, TooltipContent, 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 = 'sidebar_state'\nconst SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7\nconst SIDEBAR_WIDTH = '16rem'\nconst SIDEBAR_WIDTH_MOBILE = '16rem'\nconst SIDEBAR_WIDTH_ICON = '3rem'\nconst SIDEBAR_KEYBOARD_SHORTCUT = 'b'\n\ntype SidebarContextProps = {\n state: 'expanded' | 'collapsed'\n open: boolean\n setOpen: (open: boolean) => void\n openMobile: boolean\n setOpenMobile: (open: boolean) => void\n isMobile: boolean\n toggleSidebar: () => void\n}\n\nconst SidebarContext = createContext<SidebarContextProps | null>(null)\n\nfunction useServiceLayoutSidebar() {\n const context = useContext(SidebarContext)\n if (!context) {\n throw new Error('useSidebar must be used within a SidebarProvider.')\n }\n\n return context\n}\n\nfunction ServiceLayoutSidebarProvider({\n defaultOpen = true,\n open: openProp,\n onOpenChange: setOpenProp,\n className,\n style,\n children,\n ...props\n}: React.ComponentProps<'div'> & {\n defaultOpen?: boolean\n open?: boolean\n onOpenChange?: (open: boolean) => void\n}) {\n const isMobile = useIsMobile()\n const [openMobile, setOpenMobile] = useState(false)\n\n // This is the internal state of the sidebar.\n // We use openProp and setOpenProp for control from outside the component.\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\n // This sets the cookie to keep the sidebar state.\n document.cookie = `${SIDEBAR_COOKIE_NAME}=${openState}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`\n },\n [setOpenProp, open],\n )\n\n // Helper to toggle the sidebar.\n const toggleSidebar = useCallback(() => {\n return isMobile ? setOpenMobile((open) => !open) : setOpen((open) => !open)\n }, [isMobile, setOpen, setOpenMobile])\n\n // Adds a keyboard shortcut to toggle the sidebar.\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\n window.addEventListener('keydown', handleKeyDown)\n return () => window.removeEventListener('keydown', handleKeyDown)\n }, [toggleSidebar])\n\n // We add a state so that we can do data-state=\"expanded\" or \"collapsed\".\n // This makes it easier to style the sidebar with Tailwind classes.\n const state = open ? 'expanded' : 'collapsed'\n\n const contextValue = useMemo<SidebarContextProps>(\n () => ({\n state,\n isMobile,\n\n toggleSidebar,\n\n open,\n setOpen,\n\n openMobile,\n setOpenMobile,\n }),\n [state, open, setOpen, isMobile, openMobile, setOpenMobile, toggleSidebar],\n )\n\n return (\n <SidebarContext.Provider value={contextValue}>\n <TooltipProvider delayDuration={0}>\n <div\n data-slot=\"sidebar-wrapper\"\n style={\n {\n '--sidebar-width': SIDEBAR_WIDTH,\n '--sidebar-width-icon': SIDEBAR_WIDTH_ICON,\n ...style,\n } as React.CSSProperties\n }\n className={cn('group/sidebar-wrapper', 'has-data-[variant=inset]:bg-sidebar', 'flex h-svh w-full', className)}\n {...props}\n >\n {children}\n </div>\n </TooltipProvider>\n </SidebarContext.Provider>\n )\n}\n\nfunction ServiceLayoutSidebar({\n side = 'left',\n variant = 'sidebar',\n collapsible = 'offcanvas',\n className,\n children,\n ...props\n}: React.ComponentProps<'div'> & {\n side?: 'left' | 'right'\n variant?: 'sidebar' | 'floating' | 'inset'\n collapsible?: 'offcanvas' | 'icon' | 'none'\n}) {\n const { isMobile, state, openMobile, setOpenMobile } = useServiceLayoutSidebar()\n\n if (collapsible === 'none') {\n return (\n <aside data-slot=\"sidebar\" className={cn('bg-sidebar', 'text-sidebar-foreground', 'flex h-full w-(--sidebar-width) flex-col', className)} {...props}>\n {children}\n </aside>\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=\"bg-sidebar text-sidebar-foreground w-(--sidebar-width) p-0 [&>button]:hidden\"\n style={\n {\n '--sidebar-width': SIDEBAR_WIDTH_MOBILE,\n } as React.CSSProperties\n }\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 size-full flex-col\">\n <div className=\"border-border-weak flex items-center gap-x-2 border-b p-2 pr-4\">\n <ServiceLayoutSidebarTrigger />\n <div className=\"bg-sidebar-primary text-sidebar-primary-foreground ml-2 flex aspect-square size-8 items-center justify-center rounded-lg\">\n <ShoppingCartIcon size={20} />\n </div>\n <div className=\"grid flex-1 text-left text-sm leading-tight\">\n <span className=\"truncate font-medium\">Lunas Store</span>\n <span className=\"truncate text-xs\">Established 2023</span>\n </div>\n </div>\n {children}\n </div>\n </SheetContent>\n </Sheet>\n )\n }\n\n return (\n <aside\n className=\"group peer text-sidebar-foreground bg-card hidden 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 {/* This is what handles the sidebar gap on desktop */}\n <div\n data-slot=\"sidebar-gap\"\n className={cn(\n 'relative',\n 'bg-transparent',\n 'transition-[width] duration-200 ease-linear',\n 'h-(--header-height) w-(--sidebar-width)',\n 'sm:h-[calc(var(--header-height) + 0.5rem)]',\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 'hidden md:flex',\n 'shadow-nav fixed inset-y-0 top-14 z-10',\n 'h-[calc(100svh-3.5rem)] w-(--sidebar-width)',\n 'transition-[left,right,width] duration-200 ease-linear',\n side === 'left' && 'left-0 group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]',\n side === 'right' && 'right-0 group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]',\n // Adjust the 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)))]'\n : 'group-data-[collapsible=icon]:w-(--sidebar-width-icon) group-data-[side=left]:border-r group-data-[side=right]:border-l',\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',\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 </aside>\n )\n}\n\nfunction ServiceLayoutSidebarTrigger({ className, onClick, ...props }: React.ComponentProps<typeof Button>) {\n const { toggleSidebar } = useServiceLayoutSidebar()\n\n return (\n <Button\n data-sidebar=\"trigger\"\n data-slot=\"sidebar-trigger\"\n variant=\"ghost\"\n color=\"muted\"\n size=\"icon\"\n className={cn('size-10 rounded-full', className)}\n onClick={(event) => {\n onClick?.(event)\n toggleSidebar()\n }}\n {...props}\n >\n <MenuIcon className=\"!size-6\" />\n <span className=\"sr-only\">Toggle Sidebar</span>\n </Button>\n )\n}\n\nfunction ServiceLayoutSidebarRail({ className, ...props }: React.ComponentProps<'button'>) {\n const { toggleSidebar } = useServiceLayoutSidebar()\n\n return (\n <button\n data-sidebar=\"rail\"\n data-slot=\"sidebar-rail\"\n aria-label=\"Toggle Sidebar\"\n tabIndex={-1}\n onClick={toggleSidebar}\n title=\"Toggle Sidebar\"\n className={cn(\n 'absolute inset-y-0 z-20 hidden w-4 -translate-x-1/2 transition-all ease-linear sm:flex',\n 'after:absolute after:inset-y-0 after:left-1/2 after:w-[2px]',\n 'group-data-[side=left]:-right-4',\n 'group-data-[side=right]:left-0',\n 'in-data-[side=left]:cursor-w-resize',\n 'in-data-[side=right]:cursor-e-resize',\n 'hover:after:bg-sidebar-border',\n 'hover:group-data-[collapsible=offcanvas]:bg-sidebar',\n 'group-data-[collapsible=offcanvas]:translate-x-0',\n 'group-data-[collapsible=offcanvas]:after:left-full',\n '[[data-side=left][data-state=collapsed]_&]:cursor-e-resize',\n '[[data-side=right][data-state=collapsed]_&]:cursor-w-resize',\n '[[data-side=left][data-collapsible=offcanvas]_&]:-right-2',\n '[[data-side=right][data-collapsible=offcanvas]_&]:-left-2',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction ServiceLayoutSidebarInset({ className, children, ...props }: React.ComponentProps<'main'>) {\n return (\n <main data-slot=\"sidebar-inset\" className={cn('relative flex w-full flex-1 flex-col', className)} {...props}>\n <div className=\"h-(--header-height) w-full sm:h-[calc(var(--header-height)_+_0.5rem)]\" />\n <div className={cn('flex-1 inset-shadow-sm')}>{children}</div>\n </main>\n )\n}\n\nfunction ServiceLayoutSidebarHeader({ 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 ServiceLayoutSidebarFooter({ className, children, ...props }: React.ComponentProps<'div'>) {\n const { open } = useServiceLayoutSidebar()\n return (\n <div data-slot=\"sidebar-footer\" data-sidebar=\"footer\" className={cn('flex flex-col gap-2 p-2', className)} {...props}>\n {children}\n {open && (\n <ServiceLayoutSidebarMenu>\n <ServiceLayoutSidebarMenuItem>\n <p className=\"text-muted-foreground text-center text-xs\">Copyright © 2025, Lunas.</p>\n </ServiceLayoutSidebarMenuItem>\n </ServiceLayoutSidebarMenu>\n )}\n </div>\n )\n}\n\nfunction ServiceLayoutSidebarSeparator({ className, ...props }: React.ComponentProps<typeof Separator>) {\n return <Separator data-slot=\"sidebar-separator\" data-sidebar=\"separator\" className={cn('bg-sidebar-border mx-2 w-auto', className)} {...props} />\n}\n\nfunction ServiceLayoutSidebarContent({ 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 ServiceLayoutSidebarGroup({ className, ...props }: React.ComponentProps<'div'>) {\n return <div data-slot=\"sidebar-group\" data-sidebar=\"group\" className={cn('relative flex w-full min-w-0 flex-col', className)} {...props} />\n}\n\nfunction ServiceLayoutSidebarGroupLabel({ className, asChild = false, ...props }: React.ComponentProps<'div'> & { asChild?: boolean }) {\n const Comp = asChild ? SlotPrimitive.Slot : 'div'\n\n return (\n <Comp\n data-slot=\"sidebar-group-label\"\n data-sidebar=\"group-label\"\n className={cn(\n 'flex h-8 shrink-0 items-center rounded-md px-2 text-xs font-medium outline-hidden transition-[margin,opacity] duration-200 ease-linear focus-visible:ring-2',\n 'text-sidebar-foreground/70',\n 'ring-sidebar-ring',\n '[&>svg]:size-4',\n '[&>svg]:shrink-0',\n 'group-data-[collapsible=icon]:-mt-8',\n 'group-data-[collapsible=icon]:opacity-0',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction ServiceLayoutSidebarGroupAction({ className, asChild = false, ...props }: React.ComponentProps<'button'> & { asChild?: boolean }) {\n const Comp = asChild ? SlotPrimitive.Slot : 'button'\n\n return (\n <Comp\n data-slot=\"sidebar-group-action\"\n data-sidebar=\"group-action\"\n className={cn(\n 'text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground absolute top-3.5 right-3 flex aspect-square w-5 items-center justify-center rounded-md p-0 outline-hidden transition-transform',\n 'focus-visible:ring-2',\n '[&>svg]:size-4',\n '[&>svg]:shrink-0',\n // Increases the hit area of the button on mobile.\n 'after:absolute after:-inset-2 md:after:hidden',\n 'group-data-[collapsible=icon]:hidden',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction ServiceLayoutSidebarGroupContent({ className, ...props }: React.ComponentProps<'div'>) {\n return <div data-slot=\"sidebar-group-content\" data-sidebar=\"group-content\" className={cn('w-full text-sm', className)} {...props} />\n}\n\nfunction ServiceLayoutSidebarMenu({ 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 ServiceLayoutSidebarMenuItem({ 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 'text-left truncate',\n 'transition-[color,width,height,padding]',\n 'hover:bg-sidebar-accent',\n 'hover:text-sidebar-accent-foreground',\n 'active:bg-sidebar-accent',\n 'active:text-sidebar-accent-foreground',\n 'disabled:pointer-events-none',\n 'disabled:opacity-50',\n 'group-has-data-[sidebar=menu-action]/menu-item:pr-8',\n 'aria-disabled:pointer-events-none',\n 'aria-disabled:opacity-50',\n 'data-[active=true]:bg-sidebar-primary-muted',\n 'data-[active=true]:font-medium',\n 'data-[active=true]:text-sidebar-primary',\n 'data-[state=open]:hover:bg-sidebar-accent',\n 'data-[state=open]:hover:text-sidebar-accent-foreground',\n 'group-data-[collapsible=icon]:size-12!',\n 'group-data-[collapsible=icon]:p-3!',\n 'group-data-[collapsible=icon]:gap-3!',\n '[&>svg]:size-6',\n '[&>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/80',\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-10 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 ServiceLayoutSidebarMenuButton({\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 { isMobile, state } = useServiceLayoutSidebar()\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) {\n return button\n }\n\n if (typeof tooltip === 'string') {\n tooltip = {\n children: tooltip,\n }\n }\n\n return (\n <Tooltip>\n <TooltipTrigger asChild>{button}</TooltipTrigger>\n <TooltipContent side=\"right\" align=\"center\" hidden={state !== 'collapsed' || isMobile} {...tooltip} />\n </Tooltip>\n )\n}\n\nfunction ServiceLayoutSidebarMenuAction({\n className,\n asChild = false,\n showOnHover = false,\n ...props\n}: React.ComponentProps<'button'> & {\n asChild?: boolean\n showOnHover?: boolean\n}) {\n const Comp = asChild ? SlotPrimitive.Slot : 'button'\n\n return (\n <Comp\n data-slot=\"sidebar-menu-action\"\n data-sidebar=\"menu-action\"\n className={cn(\n 'text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground peer-hover/menu-button:text-sidebar-accent-foreground absolute top-1.5 right-1 flex aspect-square w-5 items-center justify-center rounded-md p-0 outline-hidden transition-transform',\n 'focus-visible:ring-2',\n '[&>svg]:size-4',\n '[&>svg]:shrink-0',\n // Increases the hit area of the button on mobile.\n 'after:absolute after:-inset-2 md:after:hidden',\n 'peer-data-[size=sm]/menu-button:top-1',\n 'peer-data-[size=default]/menu-button:top-1.5',\n 'peer-data-[size=lg]/menu-button:top-2.5',\n 'group-data-[collapsible=icon]:hidden',\n showOnHover && 'peer-data-[active=true]/menu-button:text-sidebar-accent-foreground',\n showOnHover && 'group-focus-within/menu-item:opacity-100',\n showOnHover && 'group-hover/menu-item:opacity-100',\n showOnHover && 'data-[state=open]:opacity-100 md:opacity-0',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction ServiceLayoutSidebarMenuBadge({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sidebar-menu-badge\"\n data-sidebar=\"menu-badge\"\n className={cn(\n 'text-sidebar-foreground pointer-events-none absolute right-1 flex h-5 min-w-5 items-center justify-center rounded-md px-1 text-xs font-medium tabular-nums select-none',\n 'peer-hover/menu-button:text-sidebar-accent-foreground',\n 'peer-data-[active=true]/menu-button:text-sidebar-accent-foreground',\n 'peer-data-[size=sm]/menu-button:top-1',\n 'peer-data-[size=default]/menu-button:top-1.5',\n 'peer-data-[size=lg]/menu-button:top-2.5',\n 'group-data-[collapsible=icon]:hidden',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction ServiceLayoutSidebarMenuSkeleton({\n className,\n showIcon = false,\n ...props\n}: React.ComponentProps<'div'> & {\n showIcon?: boolean\n}) {\n // Random width between 50 to 90%.\n const width = useMemo(() => {\n return `${Math.floor(Math.random() * 40) + 50}%`\n }, [])\n\n return (\n <div data-slot=\"sidebar-menu-skeleton\" data-sidebar=\"menu-skeleton\" className={cn('flex h-8 items-center gap-2 rounded-md px-2', className)} {...props}>\n {showIcon && <Skeleton className=\"size-4 rounded-md\" data-sidebar=\"menu-skeleton-icon\" />}\n <Skeleton\n className=\"h-4 max-w-(--skeleton-width) flex-1\"\n data-sidebar=\"menu-skeleton-text\"\n style={\n {\n '--skeleton-width': width,\n } as React.CSSProperties\n }\n />\n </div>\n )\n}\n\nfunction ServiceLayoutSidebarMenuSub({ className, ...props }: React.ComponentProps<'ul'>) {\n return (\n <ul\n data-slot=\"sidebar-menu-sub\"\n data-sidebar=\"menu-sub\"\n className={cn(\n 'border-sidebar-border mx-3.5 flex min-w-0 translate-x-px flex-col gap-1 border-l px-2.5 py-0.5',\n 'group-data-[collapsible=icon]:hidden',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction ServiceLayoutSidebarMenuSubItem({ className, ...props }: React.ComponentProps<'li'>) {\n return <li data-slot=\"sidebar-menu-sub-item\" data-sidebar=\"menu-sub-item\" className={cn('group/menu-sub-item relative', className)} {...props} />\n}\n\nfunction ServiceLayoutSidebarMenuSubButton({\n asChild = false,\n size = 'md',\n isActive = false,\n className,\n ...props\n}: React.ComponentProps<'a'> & {\n asChild?: boolean\n size?: 'sm' | 'md'\n isActive?: boolean\n}) {\n const Comp = asChild ? SlotPrimitive.Slot : 'a'\n\n return (\n <Comp\n data-slot=\"sidebar-menu-sub-button\"\n data-sidebar=\"menu-sub-button\"\n data-size={size}\n data-active={isActive}\n className={cn(\n 'text-sidebar-foreground',\n 'ring-sidebar-ring',\n 'flex h-7 min-w-0 -translate-x-px items-center gap-2 overflow-hidden rounded-md px-2 outline-hidden',\n 'focus-visible:ring-2',\n 'hover:bg-sidebar-accent',\n 'hover:text-sidebar-accent-foreground',\n 'active:bg-sidebar-accent',\n 'active:text-sidebar-accent-foreground',\n 'disabled:pointer-events-none',\n 'disabled:opacity-50',\n 'aria-disabled:pointer-events-none',\n 'aria-disabled:opacity-50',\n '[&>svg]:size-4',\n '[&>svg]:shrink-0',\n '[&>svg]:text-sidebar-accent-foreground',\n '[&>span:last-child]:truncate',\n 'data-[active=true]:bg-sidebar-accent',\n 'data-[active=true]:text-sidebar-accent-foreground',\n size === 'sm' && 'text-xs',\n size === 'md' && 'text-sm',\n 'group-data-[collapsible=icon]:hidden',\n className,\n )}\n {...props}\n />\n )\n}\n\nexport {\n ServiceLayoutSidebar,\n ServiceLayoutSidebarContent,\n ServiceLayoutSidebarFooter,\n ServiceLayoutSidebarGroup,\n ServiceLayoutSidebarGroupAction,\n ServiceLayoutSidebarGroupContent,\n ServiceLayoutSidebarGroupLabel,\n ServiceLayoutSidebarHeader,\n ServiceLayoutSidebarInset,\n ServiceLayoutSidebarMenu,\n ServiceLayoutSidebarMenuAction,\n ServiceLayoutSidebarMenuBadge,\n ServiceLayoutSidebarMenuButton,\n ServiceLayoutSidebarMenuItem,\n ServiceLayoutSidebarMenuSkeleton,\n ServiceLayoutSidebarMenuSub,\n ServiceLayoutSidebarMenuSubButton,\n ServiceLayoutSidebarMenuSubItem,\n ServiceLayoutSidebarProvider,\n ServiceLayoutSidebarRail,\n ServiceLayoutSidebarSeparator,\n ServiceLayoutSidebarTrigger,\n // eslint-disable-next-line react-refresh/only-export-components\n useServiceLayoutSidebar,\n}\n","'use client'\nimport { createContext, useContext, useState } from 'react'\nimport { useMediaQuery } from '@customafk/react-toolkit/hooks/useMediaQuery'\nimport { cn } from '@customafk/react-toolkit/utils'\n\nimport { LogInIcon, LogOutIcon, ShoppingCartIcon, UserIcon } from 'lucide-react'\n\nimport { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar'\nimport { Button } from '@/components/ui/button'\nimport { Card } from '@/components/ui/card'\nimport { Dialog, DialogContent, DialogFooter, DialogHeader, DialogTitle } from '@/components/ui/dialog'\nimport { Drawer, DrawerContent, DrawerFooter, DrawerHeader, DrawerTitle } from '@/components/ui/drawer'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '@/components/ui/dropdown-menu'\nimport { Separator } from '@/components/ui/separator'\nimport { Sheet, SheetContent, SheetHeader, SheetTitle, SheetTrigger } from '@/components/ui/sheet'\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'\nimport { type CredentialResponse, GoogleLogin } from '@react-oauth/google'\n\nimport {\n ServiceLayoutSidebar as LayoutSidebar,\n ServiceLayoutSidebarInset,\n ServiceLayoutSidebarProvider,\n ServiceLayoutSidebarTrigger,\n} from './service-layout-sidebar'\n\ntype ServiceLayoutContextProps = {\n isLoggedIn?: boolean\n username?: string\n email?: string\n onGoogleLoginSuccess?: (params: CredentialResponse) => void | Promise<void>\n onLogout?: () => void | Promise<void>\n}\nconst ServiceLayoutContext = createContext<ServiceLayoutContextProps | null>(null)\n\n// eslint-disable-next-line react-refresh/only-export-components\nexport const useServiceLayout = () => {\n const context = useContext(ServiceLayoutContext)\n if (!context) {\n throw new Error('useServiceLayoutContext must be used within a ServiceLayoutProvider')\n }\n return context\n}\n\nexport const ServiceLayoutProvider: React.FC<React.PropsWithChildren<ServiceLayoutContextProps>> = ({\n isLoggedIn = false,\n username,\n email,\n onGoogleLoginSuccess,\n onLogout,\n children,\n}) => {\n return <ServiceLayoutContext.Provider value={{ isLoggedIn, username, email, onGoogleLoginSuccess, onLogout }}>{children}</ServiceLayoutContext.Provider>\n}\n\nexport const ServiceLayoutWrapper: React.FC<React.PropsWithChildren> = ({ children }) => {\n return <ServiceLayoutSidebarProvider>{children}</ServiceLayoutSidebarProvider>\n}\n\ntype ServiceLayoutUserInfoProps = {\n userName?: string\n userEmail?: string\n onLogout?: () => void | Promise<void>\n}\nexport const ServiceLayoutUserInfo: React.FC<ServiceLayoutUserInfoProps> = ({ userName = 'Keith Kennedy', userEmail = 'k.kennedy@originui.com', onLogout }) => {\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button size=\"icon\" variant=\"ghost\" color=\"secondary\" className=\"size-10 rounded-full\">\n <Avatar className=\"size-10\">\n <AvatarImage src={''} alt={''} />\n <AvatarFallback className=\"bg-muted-muted size-full\">\n <UserIcon />\n </AvatarFallback>\n </Avatar>\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"max-w-64\">\n <DropdownMenuLabel className=\"flex min-w-0 flex-col\">\n <span className=\"text-text-positive truncate text-sm font-medium\">{userName}</span>\n <span className=\"text-text-positive-weak truncate text-xs font-normal\">{userEmail}</span>\n </DropdownMenuLabel>\n <DropdownMenuSeparator />\n <DropdownMenuItem onClick={onLogout}>\n <LogOutIcon size={16} aria-hidden=\"true\" />\n <span className=\"text-text-positive\">Logout</span>\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n )\n}\n\nexport const ServiceLayoutCartInfo: React.FC = () => {\n return (\n <Sheet>\n <SheetTrigger asChild>\n <Button size=\"icon\" variant=\"ghost\" color=\"secondary\" className=\"size-10 rounded-full\">\n <ShoppingCartIcon />\n </Button>\n </SheetTrigger>\n <SheetContent className=\"w-svw\">\n <SheetHeader className=\"border-border-weak border-b\">\n <SheetTitle>Giỏ hàng của bạn</SheetTitle>\n </SheetHeader>\n <section className=\"p-4 pt-0\">\n <Tabs defaultValue=\"pre_order\">\n <TabsList className=\"w-full\">\n <TabsTrigger value=\"in_stock\" className=\"\">\n In Stock\n </TabsTrigger>\n <TabsTrigger value=\"pre_order\" className=\"\">\n Pre Order\n </TabsTrigger>\n </TabsList>\n <TabsContent value=\"pre_order\">\n <Card></Card>\n </TabsContent>\n <TabsContent value=\"in_stock\">\n <Card></Card>\n </TabsContent>\n </Tabs>\n </section>\n </SheetContent>\n </Sheet>\n )\n}\n\ntype ServiceLayoutHeaderProps = {\n isLoggedIn?: boolean\n}\nexport const ServiceLayoutHeader: React.FC<ServiceLayoutHeaderProps> = () => {\n const { isLoggedIn, username, email, onGoogleLoginSuccess, onLogout } = useServiceLayout()\n\n const isDesktop = useMediaQuery('(min-width: 640px)')\n\n const [loginOpen, setLoginOpen] = useState<boolean>(false)\n\n return (\n <header\n className={cn(\n 'bg-card',\n 'h-(--header-height)',\n 'sm:h-[calc(var(--header-height)_+_0.5rem)]',\n 'sm:px-4 sm:pr-6',\n 'absolute inset-x-0 top-0 z-20 gap-2 px-2 pr-4.5',\n 'shadow-nav flex items-center',\n 'transition-[width,height] ease-linear',\n )}\n >\n <ServiceLayoutSidebarTrigger />\n\n <div className=\"flex gap-x-2 sm:ml-2.5\">\n <div className=\"bg-sidebar-primary text-sidebar-primary-foreground flex aspect-square size-8 items-center justify-center rounded-lg\">\n <ShoppingCartIcon size={20} />\n </div>\n <div className=\"grid flex-1 text-left text-sm leading-tight\">\n <span className=\"truncate font-medium\">Lunas Store</span>\n <span className=\"truncate text-xs\">Established 2023</span>\n </div>\n </div>\n\n <div className=\"flex flex-1 items-center justify-end gap-x-2\">\n {!isLoggedIn && (\n <Button className=\"w-8 sm:w-fit\" onClick={() => setLoginOpen(true)}>\n <LogInIcon />\n <span className=\"sr-only sm:not-sr-only\">Đăng nhập</span>\n </Button>\n )}\n {isLoggedIn && (\n <>\n <ServiceLayoutUserInfo userName={username} userEmail={email} onLogout={onLogout} />\n <Separator orientation=\"vertical\" className=\"min-h-6 w-px\" />\n <ServiceLayoutCartInfo />\n </>\n )}\n </div>\n\n {isDesktop && (\n <Dialog open={loginOpen} onOpenChange={setLoginOpen}>\n <DialogContent showCloseButton={false} className=\"flex flex-col gap-0 border-none p-0 sm:max-w-sm\">\n <DialogHeader className=\"flex-0 gap-2 p-6\">\n <DialogTitle className=\"text-center\">Chào mừng bạn đến với Lunas Store!</DialogTitle>\n </DialogHeader>\n <div className=\"flex flex-1 flex-col\">\n <main className=\"bg-card size-full flex-1 p-4 pt-0\">\n <div className=\"flex flex-col items-center gap-y-1\">\n <p className=\"text-text-positive-weak text-sm\">Đăng nhập với Google</p>\n <GoogleLogin\n size=\"large\"\n theme=\"outline\"\n width={240}\n onSuccess={async (response) => {\n if (!response.clientId || !response.credential || !response.select_by) return\n await onGoogleLoginSuccess?.({\n clientId: response.clientId,\n credential: response.credential,\n select_by: response.select_by,\n })\n }}\n />\n </div>\n </main>\n </div>\n <DialogFooter className=\"p-2\" />\n </DialogContent>\n </Dialog>\n )}\n\n {!isDesktop && (\n <Drawer open={loginOpen} onOpenChange={setLoginOpen}>\n <DrawerContent>\n <DrawerHeader className=\"text-left\">\n <DrawerTitle>Chào mừng bạn đến với Lunas Store!</DrawerTitle>\n </DrawerHeader>\n <div className=\"flex flex-1 flex-col\">\n <main className=\"flex size-full flex-1 flex-col p-4 pt-0\">\n <div className=\"flex flex-col items-center gap-y-1\">\n <p className=\"text-text-positive-weak text-sm\">Đăng nhập với Google</p>\n <GoogleLogin\n size=\"large\"\n theme=\"outline\"\n onSuccess={async (response) => {\n if (!response.clientId || !response.credential || !response.select_by) return\n await onGoogleLoginSuccess?.({\n clientId: response.clientId,\n credential: response.credential,\n select_by: response.select_by,\n })\n }}\n />\n </div>\n </main>\n </div>\n <DrawerFooter />\n </DrawerContent>\n </Drawer>\n )}\n </header>\n )\n}\n\nexport const ServiceLayoutSidebar: React.FC<React.PropsWithChildren & React.ComponentProps<typeof LayoutSidebar>> = ({ children, ...props }) => {\n return (\n <LayoutSidebar variant=\"inset\" collapsible=\"icon\" {...props}>\n {children}\n </LayoutSidebar>\n )\n}\n\nexport const ServiceLayoutMain: React.FC<React.PropsWithChildren> = ({ children }) => {\n return (\n <ServiceLayoutSidebarInset>\n <section className=\"relative size-full\">\n <div className=\"absolute inset-0 flex flex-col\">{children}</div>\n </section>\n </ServiceLayoutSidebarInset>\n )\n}\nexport const ServiceLayoutMainHeader: React.FC<React.PropsWithChildren & { className?: string }> = ({ className, children }) => {\n return (\n <div data-slot=\"main-header\" className={cn('flex-0 snap-start', className)}>\n {children}\n </div>\n )\n}\n\nexport const ServiceLayoutMainContent: React.FC<React.PropsWithChildren & { className?: string }> = ({ className, children }) => {\n return (\n <div data-slot=\"main-content\" className={cn('flex w-full flex-1 flex-col gap-4 overflow-y-auto px-2 sm:px-4', className)}>\n {children}\n </div>\n )\n}\n\nexport const ServiceLayoutMainFooter: React.FC<React.PropsWithChildren & { className?: string }> = ({ className, children }) => {\n return (\n <div data-slot=\"main-footer\" className={cn('border-border-weak hidden w-full flex-0 border-t pt-2 sm:flex', className)}>\n {children}\n </div>\n )\n}\n\nexport const ServiceLayoutMainGroup: React.FC<React.PropsWithChildren<{ className?: string }>> = ({ children, className }) => {\n return (\n <div data-slot=\"main-group\" className={cn('flex size-full flex-col gap-4', className)}>\n {children}\n </div>\n )\n}\n\nexport const ServiceLayoutMainGroupContent: React.FC<React.PropsWithChildren & { className?: string }> = ({ className, children }) => {\n return (\n <div data-slot=\"main-group-content\" className={cn('bg-card shadow-card max-w-8xl size-full flex-1 rounded-md p-4', className)}>\n {children}\n </div>\n )\n}\n"],"mappings":"0oDAgBA,MAiBM,EAAiB,EAA0C,MAEjE,SAAS,GAA0B,CACjC,IAAM,EAAU,EAAW,GAC3B,GAAI,CAAC,EACH,MAAU,MAAM,qDAGlB,OAAO,EAGT,SAAS,GAA6B,CACpC,cAAc,GACd,KAAM,EACN,aAAc,EACd,YACA,QACA,WACA,GAAG,GAKF,CACD,IAAM,EAAW,KACX,CAAC,EAAY,GAAiB,EAAS,IAIvC,CAAC,EAAO,GAAY,EAAS,GAC7B,EAAO,GAAY,EACnB,EAAU,EACb,GAAmD,CAClD,IAAM,EAAY,OAAO,GAAU,WAAa,EAAM,GAAQ,EAC1D,EACF,EAAY,GAEZ,EAAS,GAIX,SAAS,OAAS,iBAA0B,EAAU,2BAExD,CAAC,EAAa,IAIV,EAAgB,MACb,EAAW,EAAe,GAAS,CAACA,GAAQ,EAAS,GAAS,CAACA,GACrE,CAAC,EAAU,EAAS,IAGvB,MAAgB,CACd,IAAM,EAAiB,GAAyB,CAC1C,EAAM,MAAQ,MAA8B,EAAM,SAAW,EAAM,WACrE,EAAM,iBACN,MAKJ,OADA,OAAO,iBAAiB,UAAW,OACtB,OAAO,oBAAoB,UAAW,IAClD,CAAC,IAIJ,IAAM,EAAQ,EAAO,WAAa,YAE5B,EAAe,OACZ,CACL,QACA,WAEA,gBAEA,OACA,UAEA,aACA,kBAEF,CAAC,EAAO,EAAM,EAAS,EAAU,EAAY,EAAe,IAG9D,OACE,EAAC,EAAe,SAAA,CAAS,MAAO,WAC9B,EAAC,EAAA,CAAgB,cAAe,WAC9B,EAAC,MAAA,CACC,YAAU,kBACV,MACE,CACE,kBAAmB,QACnB,uBAAwB,OACxB,GAAG,GAGP,UAAW,EAAG,wBAAyB,sCAAuC,oBAAqB,GACnG,GAAI,EAEH,iBAOX,SAASC,GAAqB,CAC5B,OAAO,OACP,UAAU,UACV,cAAc,YACd,YACA,WACA,GAAG,GAKF,CACD,GAAM,CAAE,WAAU,QAAO,aAAY,iBAAkB,IA+CvD,OA7CI,IAAgB,OAEhB,EAAC,QAAA,CAAM,YAAU,UAAU,UAAW,EAAG,aAAc,0BAA2B,2CAA4C,GAAY,GAAI,EAC3I,aAKH,EAEA,EAAC,EAAA,CAAM,KAAM,EAAY,aAAc,EAAe,GAAI,WACxD,EAAC,EAAA,CACC,eAAa,UACb,YAAU,UACV,cAAY,OACZ,UAAU,+EACV,MACE,CACE,kBAAmB,SAGjB,iBAEN,EAAC,EAAA,CAAY,UAAU,oBACrB,EAAC,EAAA,CAAA,SAAW,YACZ,EAAC,GAAA,CAAA,SAAiB,oCAEpB,EAAC,MAAA,CAAI,UAAU,oCACb,EAAC,MAAA,CAAI,UAAU,2EACb,EAAC,EAAA,IACD,EAAC,MAAA,CAAI,UAAU,oIACb,EAAC,EAAA,CAAiB,KAAM,OAE1B,EAAC,MAAA,CAAI,UAAU,wDACb,EAAC,OAAA,CAAK,UAAU,gCAAuB,gBACvC,EAAC,OAAA,CAAK,UAAU,4BAAmB,2BAGtC,UAQT,EAAC,QAAA,CACC,UAAU,6DACV,aAAY,EACZ,mBAAkB,IAAU,YAAc,EAAc,GACxD,eAAc,EACd,YAAW,EACX,YAAU,oBAGV,EAAC,MAAA,CACC,YAAU,cACV,UAAW,EACT,WACA,iBACA,8CACA,0CACA,6CACA,yCACA,qCACA,IAAY,YAAc,IAAY,QAClC,mFACA,4DAGR,EAAC,MAAA,CACC,YAAU,oBACV,UAAW,EACT,iBACA,yCACA,8CACA,yDACA,IAAS,QAAU,iFACnB,IAAS,SAAW,mFAEpB,IAAY,YAAc,IAAY,QAClC,uFACA,0HACJ,GAEF,GAAI,WAEJ,EAAC,MAAA,CACC,eAAa,UACb,YAAU,gBACV,UAAW,EACT,0BACA,2CACA,uCACA,sDACA,2CAGD,kBAOX,SAAS,EAA4B,CAAE,YAAW,UAAS,GAAG,GAA8C,CAC1G,GAAM,CAAE,iBAAkB,IAE1B,OACE,EAAC,EAAA,CACC,eAAa,UACb,YAAU,kBACV,QAAQ,QACR,MAAM,QACN,KAAK,OACL,UAAW,EAAG,uBAAwB,GACtC,QAAU,GAAU,CAClB,IAAU,GACV,KAEF,GAAI,YAEJ,EAAC,GAAA,CAAS,UAAU,YACpB,EAAC,OAAA,CAAK,UAAU,mBAAU,sBAsChC,SAAS,GAA0B,CAAE,YAAW,WAAU,GAAG,GAAuC,CAClG,OACE,EAAC,OAAA,CAAK,YAAU,gBAAgB,UAAW,EAAG,uCAAwC,GAAY,GAAI,YACpG,EAAC,MAAA,CAAI,UAAU,0EACf,EAAC,MAAA,CAAI,UAAW,EAAG,0BAA4B,gBASrD,SAAS,GAA2B,CAAE,YAAW,WAAU,GAAG,GAAsC,CAClG,GAAM,CAAE,QAAS,IACjB,OACE,EAAC,MAAA,CAAI,YAAU,iBAAiB,eAAa,SAAS,UAAW,EAAG,0BAA2B,GAAY,GAAI,YAC5G,EACA,GACC,EAAC,EAAA,CAAA,SACC,EAAC,EAAA,CAAA,SACC,EAAC,IAAA,CAAE,UAAU,qDAA4C,oCAYrE,SAAS,GAA4B,CAAE,YAAW,GAAG,GAAsC,CACzF,OACE,EAAC,MAAA,CACC,YAAU,kBACV,eAAa,UACb,UAAW,EAAG,iGAAkG,GAChH,GAAI,IAKV,SAAS,GAA0B,CAAE,YAAW,GAAG,GAAsC,CACvF,OAAO,EAAC,MAAA,CAAI,YAAU,gBAAgB,eAAa,QAAQ,UAAW,EAAG,wCAAyC,GAAY,GAAI,IAGpI,SAAS,GAA+B,CAAE,YAAW,UAAU,GAAO,GAAG,GAA8D,CACrI,IAAM,EAAO,EAAUC,EAAc,KAAO,MAE5C,OACE,EAAC,EAAA,CACC,YAAU,sBACV,eAAa,cACb,UAAW,EACT,8JACA,6BACA,oBACA,iBACA,mBACA,sCACA,0CACA,GAEF,GAAI,IA2BV,SAAS,GAAiC,CAAE,YAAW,GAAG,GAAsC,CAC9F,OAAO,EAAC,MAAA,CAAI,YAAU,wBAAwB,eAAa,gBAAgB,UAAW,EAAG,iBAAkB,GAAY,GAAI,IAG7H,SAAS,EAAyB,CAAE,YAAW,GAAG,GAAqC,CACrF,OAAO,EAAC,KAAA,CAAG,YAAU,eAAe,eAAa,OAAO,UAAW,EAAG,qCAAsC,GAAY,GAAI,IAG9H,SAAS,EAA6B,CAAE,YAAW,GAAG,GAAqC,CACzF,OAAO,EAAC,KAAA,CAAG,YAAU,oBAAoB,eAAa,YAAY,UAAW,EAAG,2BAA4B,GAAY,GAAI,IAG9H,MAAM,GAA4B,GAChC,i1BA4BA,CACE,SAAU,CACR,QAAS,CACP,QAAS,qEACT,QACE,gLAEJ,KAAM,CACJ,QAAS,eACT,GAAI,cACJ,GAAI,oDAGR,gBAAiB,CACf,QAAS,UACT,KAAM,aAKZ,SAAS,GAA+B,CACtC,UAAU,GACV,WAAW,GACX,UAAU,UACV,OAAO,UACP,UACA,YACA,GAAG,GAK+C,CAClD,IAAM,EAAO,EAAUA,EAAc,KAAO,SACtC,CAAE,WAAU,SAAU,IAEtB,EACJ,EAAC,EAAA,CACC,YAAU,sBACV,eAAa,cACb,YAAW,EACX,cAAa,EACb,UAAW,EAAG,GAA0B,CAAE,UAAS,SAAS,GAC5D,GAAI,IAcR,OAVK,GAID,OAAO,GAAY,WACrB,EAAU,CACR,SAAU,IAKZ,EAACC,EAAAA,CAAAA,SAAAA,CACC,EAAC,EAAA,CAAe,QAAA,YAAS,IACzB,EAAC,EAAA,CAAe,KAAK,QAAQ,MAAM,SAAS,OAAQ,IAAU,aAAe,EAAU,GAAI,QAZtF,ECxcX,MAAM,EAAuB,EAAgD,MAGhE,MAAyB,CACpC,IAAM,EAAU,EAAW,GAC3B,GAAI,CAAC,EACH,MAAU,MAAM,uEAElB,OAAO,GAGIC,IAAuF,CAClG,aAAa,GACb,WACA,QACA,uBACA,WACA,cAEO,EAAC,EAAqB,SAAA,CAAS,MAAO,CAAE,aAAY,WAAU,QAAO,uBAAsB,YAAa,aAGpGC,GAA2D,CAAE,cACjE,EAAC,GAAA,CAA8B,aAQ3BC,GAA+D,CAAE,WAAW,gBAAiB,YAAY,yBAA0B,cAE5I,EAACC,EAAAA,CAAAA,SAAAA,CACC,EAAC,EAAA,CAAoB,QAAA,YACnB,EAAC,EAAA,CAAO,KAAK,OAAO,QAAQ,QAAQ,MAAM,YAAY,UAAU,gCAC9D,EAACC,EAAAA,CAAO,UAAU,oBAChB,EAAC,GAAA,CAAY,IAAK,GAAI,IAAK,KAC3B,EAAC,EAAA,CAAe,UAAU,oCACxB,EAAC,GAAA,aAKT,EAAC,EAAA,CAAoB,MAAM,MAAM,UAAU,qBACzC,EAAC,GAAA,CAAkB,UAAU,kCAC3B,EAAC,OAAA,CAAK,UAAU,2DAAmD,IACnE,EAAC,OAAA,CAAK,UAAU,gEAAwD,OAE1E,EAAC,GAAA,IACD,EAAC,EAAA,CAAiB,QAAS,YACzB,EAAC,GAAA,CAAW,KAAM,GAAI,cAAY,SAClC,EAAC,OAAA,CAAK,UAAU,8BAAqB,oBAOlCC,MAET,EAAC,EAAA,CAAA,SAAA,CACC,EAAC,EAAA,CAAa,QAAA,YACZ,EAAC,EAAA,CAAO,KAAK,OAAO,QAAQ,QAAQ,MAAM,YAAY,UAAU,gCAC9D,EAAC,EAAA,QAGL,EAAC,EAAA,CAAa,UAAU,kBACtB,EAAC,EAAA,CAAY,UAAU,uCACrB,EAAC,EAAA,CAAA,SAAW,uBAEd,EAAC,UAAA,CAAQ,UAAU,oBACjB,EAACC,EAAAA,CAAK,aAAa,sBACjB,EAAC,EAAA,CAAS,UAAU,mBAClB,EAAC,EAAA,CAAY,MAAM,WAAW,UAAU,YAAG,aAG3C,EAAC,EAAA,CAAY,MAAM,YAAY,UAAU,YAAG,iBAI9C,EAAC,EAAA,CAAY,MAAM,qBACjB,EAAC,EAAA,MAEH,EAAC,EAAA,CAAY,MAAM,oBACjB,EAAC,EAAA,iBAYFC,OAAgE,CAC3E,GAAM,CAAE,aAAY,WAAU,QAAO,uBAAsB,YAAa,IAElE,EAAY,EAAc,sBAE1B,CAAC,EAAW,GAAgB,EAAkB,IAEpD,OACE,EAAC,SAAA,CACC,UAAW,EACT,UACA,sBACA,6CACA,kBACA,kDACA,+BACA,mDAGF,EAAC,EAAA,IAED,EAAC,MAAA,CAAI,UAAU,mCACb,EAAC,MAAA,CAAI,UAAU,+HACb,EAAC,EAAA,CAAiB,KAAM,OAE1B,EAAC,MAAA,CAAI,UAAU,wDACb,EAAC,OAAA,CAAK,UAAU,gCAAuB,gBACvC,EAAC,OAAA,CAAK,UAAU,4BAAmB,2BAIvC,EAAC,MAAA,CAAI,UAAU,yDACZ,CAAC,GACA,EAAC,EAAA,CAAO,UAAU,eAAe,YAAe,EAAa,cAC3D,EAAC,GAAA,IACD,EAAC,OAAA,CAAK,UAAU,kCAAyB,iBAG5C,GACC,EAAA,GAAA,CAAA,SAAA,CACE,EAAC,EAAA,CAAsB,SAAU,EAAU,UAAW,EAAiB,aACvE,EAACC,GAAAA,CAAU,YAAY,WAAW,UAAU,iBAC5C,EAAC,EAAA,UAKN,GACC,EAACC,EAAAA,CAAO,KAAM,EAAW,aAAc,WACrC,EAAC,EAAA,CAAc,gBAAiB,GAAO,UAAU,4DAC/C,EAAC,EAAA,CAAa,UAAU,4BACtB,EAAC,EAAA,CAAY,UAAU,uBAAc,yCAEvC,EAAC,MAAA,CAAI,UAAU,gCACb,EAAC,OAAA,CAAK,UAAU,6CACd,EAAC,MAAA,CAAI,UAAU,+CACb,EAAC,IAAA,CAAE,UAAU,2CAAkC,yBAC/C,EAAC,EAAA,CACC,KAAK,QACL,MAAM,UACN,MAAO,IACP,UAAW,KAAO,IAAa,CACzB,CAAC,EAAS,UAAY,CAAC,EAAS,YAAc,CAAC,EAAS,WAC5D,MAAM,IAAuB,CAC3B,SAAU,EAAS,SACnB,WAAY,EAAS,WACrB,UAAW,EAAS,sBAOhC,EAAC,EAAA,CAAa,UAAU,aAK7B,CAAC,GACA,EAAC,EAAA,CAAO,KAAM,EAAW,aAAc,WACrC,EAAC,EAAA,CAAA,SAAA,CACC,EAAC,EAAA,CAAa,UAAU,qBACtB,EAAC,EAAA,CAAA,SAAY,yCAEf,EAAC,MAAA,CAAI,UAAU,gCACb,EAAC,OAAA,CAAK,UAAU,mDACd,EAAC,MAAA,CAAI,UAAU,+CACb,EAAC,IAAA,CAAE,UAAU,2CAAkC,yBAC/C,EAAC,EAAA,CACC,KAAK,QACL,MAAM,UACN,UAAW,KAAO,IAAa,CACzB,CAAC,EAAS,UAAY,CAAC,EAAS,YAAc,CAAC,EAAS,WAC5D,MAAM,IAAuB,CAC3B,SAAU,EAAS,SACnB,WAAY,EAAS,WACrB,UAAW,EAAS,sBAOhC,EAAC,EAAA,aAQAC,IAAwG,CAAE,WAAU,GAAG,KAEhI,EAACC,GAAAA,CAAc,QAAQ,QAAQ,YAAY,OAAO,GAAI,EACnD,aAKMC,IAAwD,CAAE,cAEnE,EAAC,GAAA,CAAA,SACC,EAAC,UAAA,CAAQ,UAAU,8BACjB,EAAC,MAAA,CAAI,UAAU,iCAAkC,iBAK5CC,IAAuF,CAAE,YAAW,cAE7G,EAAC,MAAA,CAAI,YAAU,cAAc,UAAW,EAAG,oBAAqB,GAC7D,aAKMC,IAAwF,CAAE,YAAW,cAE9G,EAAC,MAAA,CAAI,YAAU,eAAe,UAAW,EAAG,iEAAkE,GAC3G,aAKMC,IAAuF,CAAE,YAAW,cAE7G,EAAC,MAAA,CAAI,YAAU,cAAc,UAAW,EAAG,gEAAiE,GACzG,aAKMC,IAAqF,CAAE,WAAU,eAE1G,EAAC,MAAA,CAAI,YAAU,aAAa,UAAW,EAAG,gCAAiC,GACxE,aAKMC,IAA6F,CAAE,YAAW,cAEnH,EAAC,MAAA,CAAI,YAAU,qBAAqB,UAAW,EAAG,gEAAiE,GAChH"}