@tirth_jasoliya/ui 1.0.5 → 1.0.6

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 (307) hide show
  1. package/dist/components/core/error.cjs +3 -0
  2. package/dist/components/core/error.cjs.map +1 -0
  3. package/dist/components/core/error.d.cts +5 -0
  4. package/dist/components/core/error.d.ts +5 -0
  5. package/dist/components/core/error.js +3 -0
  6. package/dist/components/core/error.js.map +1 -0
  7. package/dist/components/core/event-success.cjs +3 -0
  8. package/dist/components/core/event-success.cjs.map +1 -0
  9. package/dist/components/core/event-success.d.cts +5 -0
  10. package/dist/components/core/event-success.d.ts +5 -0
  11. package/dist/components/core/event-success.js +3 -0
  12. package/dist/components/core/event-success.js.map +1 -0
  13. package/dist/components/core/index.cjs +3 -0
  14. package/dist/components/core/index.cjs.map +1 -0
  15. package/dist/components/core/index.d.cts +7 -0
  16. package/dist/components/core/index.d.ts +7 -0
  17. package/dist/components/core/index.js +3 -0
  18. package/dist/components/core/index.js.map +1 -0
  19. package/dist/components/core/loader.cjs +3 -0
  20. package/dist/components/core/loader.cjs.map +1 -0
  21. package/dist/components/core/loader.d.cts +5 -0
  22. package/dist/components/core/loader.d.ts +5 -0
  23. package/dist/components/core/loader.js +3 -0
  24. package/dist/components/core/loader.js.map +1 -0
  25. package/dist/components/core/notfound.cjs +3 -0
  26. package/dist/components/core/notfound.cjs.map +1 -0
  27. package/dist/components/core/notfound.d.cts +5 -0
  28. package/dist/components/core/notfound.d.ts +5 -0
  29. package/dist/components/core/notfound.js +3 -0
  30. package/dist/components/core/notfound.js.map +1 -0
  31. package/dist/components/core/offline-content.cjs +3 -0
  32. package/dist/components/core/offline-content.cjs.map +1 -0
  33. package/dist/components/core/offline-content.d.cts +5 -0
  34. package/dist/components/core/offline-content.d.ts +5 -0
  35. package/dist/components/core/offline-content.js +3 -0
  36. package/dist/components/core/offline-content.js.map +1 -0
  37. package/dist/components/core/unauthorized.cjs +3 -0
  38. package/dist/components/core/unauthorized.cjs.map +1 -0
  39. package/dist/components/core/unauthorized.d.cts +5 -0
  40. package/dist/components/core/unauthorized.d.ts +5 -0
  41. package/dist/components/core/unauthorized.js +3 -0
  42. package/dist/components/core/unauthorized.js.map +1 -0
  43. package/dist/components/data/data-table/data-table-action-bar.cjs +3 -0
  44. package/dist/components/data/data-table/data-table-action-bar.cjs.map +1 -0
  45. package/dist/components/data/data-table/data-table-action-bar.d.cts +26 -0
  46. package/dist/components/data/data-table/data-table-action-bar.d.ts +26 -0
  47. package/dist/components/data/data-table/data-table-action-bar.js +3 -0
  48. package/dist/components/data/data-table/data-table-action-bar.js.map +1 -0
  49. package/dist/components/data/data-table/data-table-column-header.cjs +3 -0
  50. package/dist/components/data/data-table/data-table-column-header.cjs.map +1 -0
  51. package/dist/components/data/data-table/data-table-column-header.d.cts +11 -0
  52. package/dist/components/data/data-table/data-table-column-header.d.ts +11 -0
  53. package/dist/components/data/data-table/data-table-column-header.js +3 -0
  54. package/dist/components/data/data-table/data-table-column-header.js.map +1 -0
  55. package/dist/components/data/data-table/data-table-faceted-filter.cjs +3 -0
  56. package/dist/components/data/data-table/data-table-faceted-filter.cjs.map +1 -0
  57. package/dist/components/data/data-table/data-table-faceted-filter.d.cts +18 -0
  58. package/dist/components/data/data-table/data-table-faceted-filter.d.ts +18 -0
  59. package/dist/components/data/data-table/data-table-faceted-filter.js +3 -0
  60. package/dist/components/data/data-table/data-table-faceted-filter.js.map +1 -0
  61. package/dist/components/data/data-table/data-table-pagination.cjs +3 -0
  62. package/dist/components/data/data-table/data-table-pagination.cjs.map +1 -0
  63. package/dist/components/data/data-table/data-table-pagination.d.cts +12 -0
  64. package/dist/components/data/data-table/data-table-pagination.d.ts +12 -0
  65. package/dist/components/data/data-table/data-table-pagination.js +3 -0
  66. package/dist/components/data/data-table/data-table-pagination.js.map +1 -0
  67. package/dist/components/data/data-table/data-table-toolbar.cjs +3 -0
  68. package/dist/components/data/data-table/data-table-toolbar.cjs.map +1 -0
  69. package/dist/components/data/data-table/data-table-toolbar.d.cts +23 -0
  70. package/dist/components/data/data-table/data-table-toolbar.d.ts +23 -0
  71. package/dist/components/data/data-table/data-table-toolbar.js +3 -0
  72. package/dist/components/data/data-table/data-table-toolbar.js.map +1 -0
  73. package/dist/components/data/data-table/data-table-types.cjs +3 -0
  74. package/dist/components/data/data-table/data-table-types.cjs.map +1 -0
  75. package/dist/components/data/data-table/data-table-types.d.cts +69 -0
  76. package/dist/components/data/data-table/data-table-types.d.ts +69 -0
  77. package/dist/components/data/data-table/data-table-types.js +2 -0
  78. package/dist/components/data/data-table/data-table-types.js.map +1 -0
  79. package/dist/components/data/data-table/data-table-view-options.cjs +3 -0
  80. package/dist/components/data/data-table/data-table-view-options.cjs.map +1 -0
  81. package/dist/components/data/data-table/data-table-view-options.d.cts +9 -0
  82. package/dist/components/data/data-table/data-table-view-options.d.ts +9 -0
  83. package/dist/components/data/data-table/data-table-view-options.js +3 -0
  84. package/dist/components/data/data-table/data-table-view-options.js.map +1 -0
  85. package/dist/components/data/data-table/data-table.cjs +3 -0
  86. package/dist/components/data/data-table/data-table.cjs.map +1 -0
  87. package/dist/components/data/data-table/data-table.d.cts +8 -0
  88. package/dist/components/data/data-table/data-table.d.ts +8 -0
  89. package/dist/components/data/data-table/data-table.js +3 -0
  90. package/dist/components/data/data-table/data-table.js.map +1 -0
  91. package/dist/components/data/data-table/index.cjs +3 -0
  92. package/dist/components/data/data-table/index.cjs.map +1 -0
  93. package/dist/components/data/data-table/index.d.cts +16 -0
  94. package/dist/components/data/data-table/index.d.ts +16 -0
  95. package/dist/components/data/data-table/index.js +3 -0
  96. package/dist/components/data/data-table/index.js.map +1 -0
  97. package/dist/components/data/data-template/data-template-action-bar.cjs +3 -0
  98. package/dist/components/data/data-template/data-template-action-bar.cjs.map +1 -0
  99. package/dist/components/data/data-template/data-template-action-bar.d.cts +14 -0
  100. package/dist/components/data/data-template/data-template-action-bar.d.ts +14 -0
  101. package/dist/components/data/data-template/data-template-action-bar.js +3 -0
  102. package/dist/components/data/data-template/data-template-action-bar.js.map +1 -0
  103. package/dist/components/data/data-template/data-template-pagination.cjs +3 -0
  104. package/dist/components/data/data-template/data-template-pagination.cjs.map +1 -0
  105. package/dist/components/data/data-template/data-template-pagination.d.cts +17 -0
  106. package/dist/components/data/data-template/data-template-pagination.d.ts +17 -0
  107. package/dist/components/data/data-template/data-template-pagination.js +3 -0
  108. package/dist/components/data/data-template/data-template-pagination.js.map +1 -0
  109. package/dist/components/data/data-template/data-template-toolbar.cjs +3 -0
  110. package/dist/components/data/data-template/data-template-toolbar.cjs.map +1 -0
  111. package/dist/components/data/data-template/data-template-toolbar.d.cts +27 -0
  112. package/dist/components/data/data-template/data-template-toolbar.d.ts +27 -0
  113. package/dist/components/data/data-template/data-template-toolbar.js +3 -0
  114. package/dist/components/data/data-template/data-template-toolbar.js.map +1 -0
  115. package/dist/components/data/data-template/data-template-types.cjs +3 -0
  116. package/dist/components/data/data-template/data-template-types.cjs.map +1 -0
  117. package/dist/components/data/data-template/data-template-types.d.cts +107 -0
  118. package/dist/components/data/data-template/data-template-types.d.ts +107 -0
  119. package/dist/components/data/data-template/data-template-types.js +2 -0
  120. package/dist/components/data/data-template/data-template-types.js.map +1 -0
  121. package/dist/components/data/data-template/data-template.cjs +3 -0
  122. package/dist/components/data/data-template/data-template.cjs.map +1 -0
  123. package/dist/components/data/data-template/data-template.d.cts +8 -0
  124. package/dist/components/data/data-template/data-template.d.ts +8 -0
  125. package/dist/components/data/data-template/data-template.js +3 -0
  126. package/dist/components/data/data-template/data-template.js.map +1 -0
  127. package/dist/components/data/data-template/index.cjs +3 -0
  128. package/dist/components/data/data-template/index.cjs.map +1 -0
  129. package/dist/components/data/data-template/index.d.cts +8 -0
  130. package/dist/components/data/data-template/index.d.ts +8 -0
  131. package/dist/components/data/data-template/index.js +3 -0
  132. package/dist/components/data/data-template/index.js.map +1 -0
  133. package/dist/components/general.cjs +3 -0
  134. package/dist/components/general.cjs.map +1 -0
  135. package/dist/components/general.d.cts +51 -0
  136. package/dist/components/general.d.ts +51 -0
  137. package/dist/components/general.js +3 -0
  138. package/dist/components/general.js.map +1 -0
  139. package/dist/components/layouts/app-container.cjs +3 -0
  140. package/dist/components/layouts/app-container.cjs.map +1 -0
  141. package/dist/components/layouts/app-container.d.cts +13 -0
  142. package/dist/components/layouts/app-container.d.ts +13 -0
  143. package/dist/components/layouts/app-container.js +3 -0
  144. package/dist/components/layouts/app-container.js.map +1 -0
  145. package/dist/components/layouts/app-content.cjs +3 -0
  146. package/dist/components/layouts/app-content.cjs.map +1 -0
  147. package/dist/components/layouts/app-content.d.cts +45 -0
  148. package/dist/components/layouts/app-content.d.ts +45 -0
  149. package/dist/components/layouts/app-content.js +3 -0
  150. package/dist/components/layouts/app-content.js.map +1 -0
  151. package/dist/components/layouts/app-footer.cjs +3 -0
  152. package/dist/components/layouts/app-footer.cjs.map +1 -0
  153. package/dist/components/layouts/app-footer.d.cts +18 -0
  154. package/dist/components/layouts/app-footer.d.ts +18 -0
  155. package/dist/components/layouts/app-footer.js +3 -0
  156. package/dist/components/layouts/app-footer.js.map +1 -0
  157. package/dist/components/layouts/app-header.cjs +3 -0
  158. package/dist/components/layouts/app-header.cjs.map +1 -0
  159. package/dist/components/layouts/app-header.d.cts +19 -0
  160. package/dist/components/layouts/app-header.d.ts +19 -0
  161. package/dist/components/layouts/app-header.js +3 -0
  162. package/dist/components/layouts/app-header.js.map +1 -0
  163. package/dist/components/layouts/factories.cjs +3 -0
  164. package/dist/components/layouts/factories.cjs.map +1 -0
  165. package/dist/components/layouts/factories.d.cts +18 -0
  166. package/dist/components/layouts/factories.d.ts +18 -0
  167. package/dist/components/layouts/factories.js +3 -0
  168. package/dist/components/layouts/factories.js.map +1 -0
  169. package/dist/components/layouts/index.cjs +3 -0
  170. package/dist/components/layouts/index.cjs.map +1 -0
  171. package/dist/components/layouts/index.d.cts +8 -0
  172. package/dist/components/layouts/index.d.ts +8 -0
  173. package/dist/components/layouts/index.js +3 -0
  174. package/dist/components/layouts/index.js.map +1 -0
  175. package/dist/components/ui/badge.cjs +3 -0
  176. package/dist/components/ui/badge.cjs.map +1 -0
  177. package/dist/components/ui/badge.d.cts +13 -0
  178. package/dist/components/ui/badge.d.ts +13 -0
  179. package/dist/components/ui/badge.js +3 -0
  180. package/dist/components/ui/badge.js.map +1 -0
  181. package/dist/components/ui/button.cjs +3 -0
  182. package/dist/components/ui/button.cjs.map +1 -0
  183. package/dist/components/ui/button.d.cts +14 -0
  184. package/dist/components/ui/button.d.ts +14 -0
  185. package/dist/components/ui/button.js +3 -0
  186. package/dist/components/ui/button.js.map +1 -0
  187. package/dist/components/ui/card.cjs +3 -0
  188. package/dist/components/ui/card.cjs.map +1 -0
  189. package/dist/components/ui/card.d.cts +12 -0
  190. package/dist/components/ui/card.d.ts +12 -0
  191. package/dist/components/ui/card.js +3 -0
  192. package/dist/components/ui/card.js.map +1 -0
  193. package/dist/components/ui/checkbox.cjs +3 -0
  194. package/dist/components/ui/checkbox.cjs.map +1 -0
  195. package/dist/components/ui/checkbox.d.cts +7 -0
  196. package/dist/components/ui/checkbox.d.ts +7 -0
  197. package/dist/components/ui/checkbox.js +3 -0
  198. package/dist/components/ui/checkbox.js.map +1 -0
  199. package/dist/components/ui/command.cjs +3 -0
  200. package/dist/components/ui/command.cjs.map +1 -0
  201. package/dist/components/ui/command.d.cts +20 -0
  202. package/dist/components/ui/command.d.ts +20 -0
  203. package/dist/components/ui/command.js +3 -0
  204. package/dist/components/ui/command.js.map +1 -0
  205. package/dist/components/ui/dialog.cjs +3 -0
  206. package/dist/components/ui/dialog.cjs.map +1 -0
  207. package/dist/components/ui/dialog.d.cts +16 -0
  208. package/dist/components/ui/dialog.d.ts +16 -0
  209. package/dist/components/ui/dialog.js +3 -0
  210. package/dist/components/ui/dialog.js.map +1 -0
  211. package/dist/components/ui/dropdown-menu.cjs +3 -0
  212. package/dist/components/ui/dropdown-menu.cjs.map +1 -0
  213. package/dist/components/ui/dropdown-menu.d.cts +28 -0
  214. package/dist/components/ui/dropdown-menu.d.ts +28 -0
  215. package/dist/components/ui/dropdown-menu.js +3 -0
  216. package/dist/components/ui/dropdown-menu.js.map +1 -0
  217. package/dist/components/ui/input.cjs +3 -0
  218. package/dist/components/ui/input.cjs.map +1 -0
  219. package/dist/components/ui/input.d.cts +6 -0
  220. package/dist/components/ui/input.d.ts +6 -0
  221. package/dist/components/ui/input.js +3 -0
  222. package/dist/components/ui/input.js.map +1 -0
  223. package/dist/components/ui/popover.cjs +3 -0
  224. package/dist/components/ui/popover.cjs.map +1 -0
  225. package/dist/components/ui/popover.d.cts +10 -0
  226. package/dist/components/ui/popover.d.ts +10 -0
  227. package/dist/components/ui/popover.js +3 -0
  228. package/dist/components/ui/popover.js.map +1 -0
  229. package/dist/components/ui/select.cjs +3 -0
  230. package/dist/components/ui/select.cjs.map +1 -0
  231. package/dist/components/ui/select.d.cts +18 -0
  232. package/dist/components/ui/select.d.ts +18 -0
  233. package/dist/components/ui/select.js +3 -0
  234. package/dist/components/ui/select.js.map +1 -0
  235. package/dist/components/ui/separator.cjs +3 -0
  236. package/dist/components/ui/separator.cjs.map +1 -0
  237. package/dist/components/ui/separator.d.cts +7 -0
  238. package/dist/components/ui/separator.d.ts +7 -0
  239. package/dist/components/ui/separator.js +3 -0
  240. package/dist/components/ui/separator.js.map +1 -0
  241. package/dist/components/ui/sheet.cjs +3 -0
  242. package/dist/components/ui/sheet.cjs.map +1 -0
  243. package/dist/components/ui/sheet.d.cts +18 -0
  244. package/dist/components/ui/sheet.d.ts +18 -0
  245. package/dist/components/ui/sheet.js +3 -0
  246. package/dist/components/ui/sheet.js.map +1 -0
  247. package/dist/components/ui/table.cjs +3 -0
  248. package/dist/components/ui/table.cjs.map +1 -0
  249. package/dist/components/ui/table.d.cts +13 -0
  250. package/dist/components/ui/table.d.ts +13 -0
  251. package/dist/components/ui/table.js +3 -0
  252. package/dist/components/ui/table.js.map +1 -0
  253. package/dist/components/ui/toggle.cjs +3 -0
  254. package/dist/components/ui/toggle.cjs.map +1 -0
  255. package/dist/components/ui/toggle.d.cts +16 -0
  256. package/dist/components/ui/toggle.d.ts +16 -0
  257. package/dist/components/ui/toggle.js +3 -0
  258. package/dist/components/ui/toggle.js.map +1 -0
  259. package/dist/components/ui/tooltip.cjs +3 -0
  260. package/dist/components/ui/tooltip.cjs.map +1 -0
  261. package/dist/components/ui/tooltip.d.cts +10 -0
  262. package/dist/components/ui/tooltip.d.ts +10 -0
  263. package/dist/components/ui/tooltip.js +3 -0
  264. package/dist/components/ui/tooltip.js.map +1 -0
  265. package/dist/context/app-meta/context.cjs +3 -0
  266. package/dist/context/app-meta/context.cjs.map +1 -0
  267. package/dist/context/app-meta/context.d.cts +18 -0
  268. package/dist/context/app-meta/context.d.ts +18 -0
  269. package/dist/context/app-meta/context.js +3 -0
  270. package/dist/context/app-meta/context.js.map +1 -0
  271. package/dist/context/app-meta/hooks.cjs +3 -0
  272. package/dist/context/app-meta/hooks.cjs.map +1 -0
  273. package/dist/context/app-meta/hooks.d.cts +10 -0
  274. package/dist/context/app-meta/hooks.d.ts +10 -0
  275. package/dist/context/app-meta/hooks.js +3 -0
  276. package/dist/context/app-meta/hooks.js.map +1 -0
  277. package/dist/context/app-meta/index.cjs +3 -0
  278. package/dist/context/app-meta/index.cjs.map +1 -0
  279. package/dist/context/app-meta/index.d.cts +5 -0
  280. package/dist/context/app-meta/index.d.ts +5 -0
  281. package/dist/context/app-meta/index.js +3 -0
  282. package/dist/context/app-meta/index.js.map +1 -0
  283. package/dist/context/app-meta/types.cjs +3 -0
  284. package/dist/context/app-meta/types.cjs.map +1 -0
  285. package/dist/context/app-meta/types.d.cts +48 -0
  286. package/dist/context/app-meta/types.d.ts +48 -0
  287. package/dist/context/app-meta/types.js +2 -0
  288. package/dist/context/app-meta/types.js.map +1 -0
  289. package/dist/context/index.cjs +3 -0
  290. package/dist/context/index.cjs.map +1 -0
  291. package/dist/context/index.d.cts +5 -0
  292. package/dist/context/index.d.ts +5 -0
  293. package/dist/context/index.js +3 -0
  294. package/dist/context/index.js.map +1 -0
  295. package/dist/index.cjs +2 -3490
  296. package/dist/index.cjs.map +1 -1
  297. package/dist/index.d.cts +29 -410
  298. package/dist/index.d.ts +29 -410
  299. package/dist/index.js +2 -3442
  300. package/dist/index.js.map +1 -1
  301. package/dist/lib/utils.cjs +3 -0
  302. package/dist/lib/utils.cjs.map +1 -0
  303. package/dist/lib/utils.d.cts +5 -0
  304. package/dist/lib/utils.d.ts +5 -0
  305. package/dist/lib/utils.js +3 -0
  306. package/dist/lib/utils.js.map +1 -0
  307. package/package.json +32 -11
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/components/general.tsx","../../src/components/ui/button.tsx","../../src/lib/utils.ts","../../src/components/ui/tooltip.tsx"],"sourcesContent":["import { useState } from \"react\";\r\nimport { Copy, Check, Loader2Icon } from \"lucide-react\";\r\nimport { Button } from \"../components/ui/button.jsx\";\r\nimport { Tooltip, TooltipContent, TooltipTrigger } from \"../components/ui/tooltip.jsx\";\r\nimport { cn } from \"../lib/utils.js\";\r\n\r\ntype CopyToClipboardProps = {\r\n text: string;\r\n children?: React.ReactNode;\r\n className?: string;\r\n size?: \"sm\" | \"default\" | \"lg\" | \"icon\";\r\n variant?: \"ghost\" | \"outline\" | \"default\" | \"secondary\" | \"destructive\" | \"link\";\r\n};\r\n\r\ntype FormatINROptions = {\r\n prefix?: string;\r\n suffix?: string;\r\n withSymbol?: boolean;\r\n compact?: boolean;\r\n};\r\n\r\ntype FormatDateOptions = {\r\n format?: \"dd-mm-yyyy\" | \"dd-mmm-yyyy\" | \"iso\" | \"long\" | \"short\";\r\n separator?: string;\r\n};\r\n\r\ntype StatusBadgeProps = {\r\n status: string | boolean | number;\r\n className?: string;\r\n showDot?: boolean;\r\n capitalize?: boolean;\r\n size?: 'sm' | 'md' | 'lg';\r\n variant?: 'solid' | 'outline' | 'subtle';\r\n customColors?: {\r\n bg?: string;\r\n text?: string;\r\n border?: string;\r\n dot?: string;\r\n }; icon?: React.ReactNode;\r\n};\r\n\r\nclass GeneralHelper {\r\n private static currencyFormatter = new Intl.NumberFormat(\"en-IN\", {\r\n style: \"currency\",\r\n currency: \"INR\",\r\n maximumFractionDigits: 2,\r\n });\r\n\r\n private static compactFormatter = new Intl.NumberFormat(\"en-IN\", {\r\n style: \"currency\",\r\n currency: \"INR\",\r\n notation: \"compact\",\r\n maximumFractionDigits: 1,\r\n });\r\n\r\n private static MONTH_NAMES_SHORT = [\r\n \"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\",\r\n \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"\r\n ];\r\n\r\n /**\r\n * Copies text to clipboard\r\n * @param text Text to copy\r\n * @returns Promise that resolves when copy is complete\r\n */\r\n static async copyToClipboard(text: string): Promise<void> {\r\n if (!text) return;\r\n try {\r\n await navigator.clipboard.writeText(text);\r\n } catch (error) {\r\n console.error(\"Failed to copy text:\", error);\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * React component for copy to clipboard functionality\r\n */\r\n static CopyToClipboard = ({\r\n text,\r\n children,\r\n className,\r\n size = \"icon\",\r\n variant = \"ghost\",\r\n }: CopyToClipboardProps) => {\r\n const [isCopied, setIsCopied] = useState(false);\r\n const [isLoading, setIsLoading] = useState(false);\r\n\r\n const handleCopy = async () => {\r\n if (!text || isLoading) return;\r\n\r\n setIsLoading(true);\r\n try {\r\n await this.copyToClipboard(text);\r\n setIsCopied(true);\r\n setTimeout(() => setIsCopied(false), 2000);\r\n } catch (error) {\r\n console.error(\"Failed to copy text:\", error);\r\n } finally {\r\n setIsLoading(false);\r\n }\r\n };\r\n\r\n return (\r\n <Tooltip>\r\n <TooltipTrigger asChild>\r\n <Button\r\n variant={variant}\r\n size={size}\r\n className={cn(\r\n size === \"icon\" && \"size-6\",\r\n className\r\n )}\r\n onClick={handleCopy}\r\n disabled={isLoading || !text}\r\n >\r\n {isLoading ? (\r\n <Loader2Icon className=\"animate-spin\" />\r\n ) : isCopied ? (\r\n <Check className=\"h-3 w-3\" />\r\n ) : children ? (\r\n children\r\n ) : (\r\n <Copy className=\"h-3 w-3\" />\r\n )}\r\n </Button>\r\n </TooltipTrigger>\r\n <TooltipContent>\r\n {isCopied ? \"Copied!\" : isLoading ? \"Copying...\" : \"Copy to clipboard\"}\r\n </TooltipContent>\r\n </Tooltip>\r\n );\r\n };\r\n\r\n /**\r\n * Formats a number as Indian Rupees (INR)\r\n * @param amount Amount to format\r\n * @param options Formatting options\r\n * @returns Formatted currency string\r\n */\r\n static formatINR(\r\n amount: number,\r\n options: FormatINROptions = {}\r\n ): string {\r\n const { prefix = \"\", suffix = \"\", withSymbol = true, compact = false } = options;\r\n\r\n if (typeof amount !== \"number\" || isNaN(amount)) {\r\n return `${prefix}${withSymbol ? \"₹ \" : \"\"}0.00${suffix}`;\r\n }\r\n\r\n const isNegative = amount < 0;\r\n const absoluteAmount = Math.abs(amount);\r\n\r\n const formatter = compact && absoluteAmount >= 100000 ?\r\n this.compactFormatter :\r\n this.currencyFormatter;\r\n const formatted = formatter.format(absoluteAmount).replace(\"₹\", \"\");\r\n\r\n return `${prefix}${isNegative ? \"- \" : \"\"}${withSymbol ? \"₹ \" : \"\"}${formatted}${suffix}`;\r\n }\r\n\r\n /**\r\n * Formats a date according to specified options\r\n * @param input Date input (string, number, or Date object)\r\n * @param options Formatting options\r\n * @returns Formatted date string\r\n */\r\n static formatDate(\r\n input: string | number | Date,\r\n options: FormatDateOptions = {}\r\n ): string {\r\n const { format = \"dd-mm-yyyy\", separator = \"-\" } = options;\r\n\r\n const dateObj = new Date(input);\r\n if (isNaN(dateObj.getTime())) return \"\";\r\n\r\n const dd = String(dateObj.getDate()).padStart(2, \"0\");\r\n const mm = String(dateObj.getMonth() + 1).padStart(2, \"0\");\r\n const mmm = this.MONTH_NAMES_SHORT[dateObj.getMonth()];\r\n const yyyy = dateObj.getFullYear();\r\n\r\n switch (format) {\r\n case \"dd-mmm-yyyy\":\r\n return `${dd}${separator}${mmm}${separator}${yyyy}`;\r\n case \"iso\":\r\n return dateObj.toISOString().split(\"T\")[0];\r\n case \"long\":\r\n return dateObj.toLocaleDateString(\"en-IN\", {\r\n year: \"numeric\",\r\n month: \"long\",\r\n day: \"numeric\"\r\n });\r\n case \"short\":\r\n return dateObj.toLocaleDateString(\"en-IN\");\r\n default:\r\n return `${dd}${separator}${mm}${separator}${yyyy}`;\r\n }\r\n }\r\n\r\n static toProperCase(text: string): string {\r\n if (!text) return \"\";\r\n return text\r\n .toLowerCase()\r\n .split(' ')\r\n .map(word => word.charAt(0).toUpperCase() + word.slice(1))\r\n .join(' ');\r\n }\r\n\r\n /**\r\n * Advanced proper case conversion that handles hyphenated words and apostrophes\r\n * @param text Text to convert\r\n * @returns Text in proper case with special handling\r\n */\r\n static toProperCaseAdvanced(text: string): string {\r\n if (!text) return \"\";\r\n return text\r\n .toLowerCase()\r\n .split(/(\\s+|['-])/)\r\n .map((part, index, array) => {\r\n if ([\"-\", \"'\", \" \"].includes(part) ||\r\n (index > 0 && [\"-\", \"'\"].includes(array[index - 1]))) {\r\n return part;\r\n }\r\n return part.charAt(0).toUpperCase() + part.slice(1);\r\n })\r\n .join('');\r\n }\r\n\r\n static StatusBadge = ({\r\n status,\r\n className,\r\n showDot = true,\r\n capitalize = true,\r\n size = 'md',\r\n variant = 'outline',\r\n customColors,\r\n icon,\r\n trueMessage = 'active',\r\n falseMessage = 'inactive',\r\n }: StatusBadgeProps & {\r\n trueMessage?: string;\r\n falseMessage?: string;\r\n }) => {\r\n const normalizedStatus = typeof status === 'boolean'\r\n ? (status ? trueMessage : falseMessage)\r\n : typeof status === 'number'\r\n ? (status > 0 ? trueMessage : falseMessage)\r\n : status.toLowerCase();\r\n\r\n const statusConfig = {\r\n active: {\r\n label: 'active',\r\n solid: {\r\n bg: 'bg-emerald-500',\r\n text: 'text-white',\r\n border: 'border-emerald-600',\r\n dot: 'bg-white',\r\n },\r\n outline: {\r\n bg: 'bg-emerald-50',\r\n text: 'text-emerald-700',\r\n border: 'border-emerald-100',\r\n dot: 'bg-emerald-500',\r\n },\r\n subtle: {\r\n bg: 'bg-emerald-50',\r\n text: 'text-emerald-700',\r\n border: 'border-transparent',\r\n dot: 'bg-emerald-500',\r\n },\r\n },\r\n pending: {\r\n label: 'pending',\r\n solid: {\r\n bg: 'bg-amber-500',\r\n text: 'text-white',\r\n border: 'border-amber-600',\r\n dot: 'bg-white',\r\n },\r\n outline: {\r\n bg: 'bg-amber-50',\r\n text: 'text-amber-700',\r\n border: 'border-amber-100',\r\n dot: 'bg-amber-500',\r\n },\r\n subtle: {\r\n bg: 'bg-amber-50',\r\n text: 'text-amber-700',\r\n border: 'border-transparent',\r\n dot: 'bg-amber-500',\r\n },\r\n },\r\n inactive: {\r\n label: 'inactive',\r\n solid: {\r\n bg: 'bg-rose-500',\r\n text: 'text-white',\r\n border: 'border-rose-600',\r\n dot: 'bg-white',\r\n },\r\n outline: {\r\n bg: 'bg-rose-50',\r\n text: 'text-rose-700',\r\n border: 'border-rose-100',\r\n dot: 'bg-rose-500',\r\n },\r\n subtle: {\r\n bg: 'bg-rose-50',\r\n text: 'text-rose-700',\r\n border: 'border-transparent',\r\n dot: 'bg-rose-500',\r\n },\r\n },\r\n draft: {\r\n label: 'draft',\r\n solid: {\r\n bg: 'bg-gray-500',\r\n text: 'text-white',\r\n border: 'border-gray-600',\r\n dot: 'bg-white',\r\n },\r\n outline: {\r\n bg: 'bg-gray-50',\r\n text: 'text-gray-700',\r\n border: 'border-gray-100',\r\n dot: 'bg-gray-500',\r\n },\r\n subtle: {\r\n bg: 'bg-gray-50',\r\n text: 'text-gray-700',\r\n border: 'border-transparent',\r\n dot: 'bg-gray-500',\r\n },\r\n },\r\n completed: {\r\n label: 'completed',\r\n solid: {\r\n bg: 'bg-indigo-500',\r\n text: 'text-white',\r\n border: 'border-indigo-600',\r\n dot: 'bg-white',\r\n },\r\n outline: {\r\n bg: 'bg-indigo-50',\r\n text: 'text-indigo-700',\r\n border: 'border-indigo-100',\r\n dot: 'bg-indigo-500',\r\n },\r\n subtle: {\r\n bg: 'bg-indigo-50',\r\n text: 'text-indigo-700',\r\n border: 'border-transparent',\r\n dot: 'bg-indigo-500',\r\n },\r\n },\r\n };\r\n\r\n const config = statusConfig[normalizedStatus.toLowerCase() as keyof typeof statusConfig] || statusConfig.inactive;\r\n const colors = customColors || config[variant];\r\n\r\n const sizeClasses = {\r\n sm: 'text-xs px-2 py-0.5',\r\n md: 'text-xs px-2.5 py-0.5',\r\n lg: 'text-sm px-3 py-1',\r\n };\r\n\r\n const displayText = capitalize\r\n ? normalizedStatus.charAt(0).toUpperCase() + normalizedStatus.slice(1)\r\n : normalizedStatus;\r\n\r\n return (\r\n <div className=\"flex justify-center\">\r\n <span\r\n className={cn(\r\n \"inline-flex items-center gap-1.5 rounded-full border font-medium\",\r\n colors.bg,\r\n colors.text,\r\n colors.border,\r\n sizeClasses[size],\r\n className\r\n )}\r\n >\r\n {showDot && (icon ? (\r\n <span className=\"flex items-center\">\r\n {icon}\r\n </span>\r\n ) : (\r\n <span\r\n className={cn('size-2 rounded-full', colors.dot)}\r\n aria-hidden=\"true\"\r\n />\r\n ))}\r\n {displayText}\r\n </span>\r\n </div>\r\n );\r\n };\r\n}\r\n\r\nexport { GeneralHelper };","import * as React from \"react\"\nimport { Slot as SlotPrimitive } from \"radix-ui\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../../lib/utils.js\"\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n {\n variants: {\n variant: {\n default:\n \"bg-primary text-primary-foreground shadow-xs hover:bg-primary/90\",\n destructive:\n \"bg-destructive text-white shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60\",\n outline:\n \"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50\",\n secondary:\n \"bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80\",\n ghost:\n \"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n default: \"h-9 px-4 py-2 has-[>svg]:px-3\",\n sm: \"h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5\",\n lg: \"h-10 rounded-md px-6 has-[>svg]:px-4\",\n icon: \"size-9\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nfunction Button({\n className,\n variant,\n size,\n asChild = false,\n ...props\n}: React.ComponentProps<\"button\"> &\n VariantProps<typeof buttonVariants> & {\n asChild?: boolean\n }) {\n const Comp = asChild ? SlotPrimitive.Slot : \"button\"\n\n return (\n <Comp\n data-slot=\"button\"\n className={cn(buttonVariants({ variant, size, className }), \"transition-none\")}\n {...props}\n />\n )\n}\n\nexport { Button, buttonVariants }\n","import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}","import * as React from \"react\"\nimport { Tooltip as TooltipPrimitive } from \"radix-ui\"\n\nimport { cn } from \"../../lib/utils.js\"\n\nfunction TooltipProvider({\n delayDuration = 0,\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Provider>) {\n return (\n <TooltipPrimitive.Provider\n data-slot=\"tooltip-provider\"\n delayDuration={delayDuration}\n {...props}\n />\n )\n}\n\nfunction Tooltip({\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Root>) {\n return (\n <TooltipProvider>\n <TooltipPrimitive.Root data-slot=\"tooltip\" {...props} />\n </TooltipProvider>\n )\n}\n\nfunction TooltipTrigger({\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Trigger>) {\n return <TooltipPrimitive.Trigger data-slot=\"tooltip-trigger\" {...props} />\n}\n\nfunction TooltipContent({\n className,\n sideOffset = 0,\n children,\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Content>) {\n return (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n data-slot=\"tooltip-content\"\n sideOffset={sideOffset}\n className={cn(\n \"bg-primary text-primary-foreground animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-fit origin-(--radix-tooltip-content-transform-origin) rounded-md px-3 py-1.5 text-xs text-balance\",\n className\n )}\n {...props}\n >\n {children}\n <TooltipPrimitive.Arrow className=\"bg-primary fill-primary z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px]\" />\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n )\n}\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider }\n"],"mappings":"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","names":["useState","Copy","Check","Loader2Icon","SlotPrimitive","cva","clsx","twMerge","cn","inputs","jsx","buttonVariants","cva","Button","className","variant","size","asChild","props","Comp","SlotPrimitive","cn","TooltipPrimitive","jsx","jsxs","TooltipProvider","delayDuration","props","TooltipPrimitive","Tooltip","TooltipTrigger","TooltipContent","className","sideOffset","children","cn","jsx","jsxs","GeneralHelper","text","error","children","className","size","variant","isCopied","setIsCopied","useState","isLoading","setIsLoading","handleCopy","Tooltip","TooltipTrigger","Button","cn","Loader2Icon","Check","Copy","TooltipContent","amount","options","prefix","suffix","withSymbol","compact","isNegative","absoluteAmount","formatted","input","format","separator","dateObj","dd","mm","mmm","yyyy","word","part","index","array","status","showDot","capitalize","customColors","icon","trueMessage","falseMessage","normalizedStatus","statusConfig","config","colors","sizeClasses","displayText"]}
@@ -0,0 +1,3 @@
1
+ "use client"
2
+ "use strict";var a=Object.defineProperty;var g=Object.getOwnPropertyDescriptor;var c=Object.getOwnPropertyNames;var d=Object.prototype.hasOwnProperty;var f=(e,o)=>{for(var t in o)a(e,t,{get:o[t],enumerable:!0})},u=(e,o,t,p)=>{if(o&&typeof o=="object"||typeof o=="function")for(let n of c(o))!d.call(e,n)&&n!==t&&a(e,n,{get:()=>o[n],enumerable:!(p=g(o,n))||p.enumerable});return e};var m=e=>u(a({},"__esModule",{value:!0}),e);var N={};f(N,{AppContainer:()=>x});module.exports=m(N);var s=require("clsx"),i=require("tailwind-merge");function r(...e){return(0,i.twMerge)((0,s.clsx)(e))}var l=require("react/jsx-runtime"),C={none:"gap-0",tight:"gap-2",default:"gap-4",loose:"gap-6","extra-loose":"gap-8"},h={none:"p-0",tight:"p-2",default:"p-4",loose:"p-6"},x=({children:e,className:o,spacing:t="tight",padding:p="none"})=>(0,l.jsx)("div",{className:r("flex flex-col h-full",C[t],h[p],o),children:e});0&&(module.exports={AppContainer});
3
+ //# sourceMappingURL=app-container.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/layouts/app-container.tsx","../../../src/lib/utils.ts"],"sourcesContent":["import { cn } from '../../lib/utils.js';\r\nimport type { ReactNode } from 'react';\r\n\r\ntype SpacingSize = 'none' | 'tight' | 'default' | 'loose' | 'extra-loose';\r\n\r\nconst spacingClasses: Record<SpacingSize, string> = {\r\n 'none': 'gap-0',\r\n 'tight': 'gap-2',\r\n 'default': 'gap-4',\r\n 'loose': 'gap-6',\r\n 'extra-loose': 'gap-8'\r\n};\r\n\r\nexport type AppContainerProps = {\r\n children: ReactNode;\r\n className?: string;\r\n spacing?: SpacingSize;\r\n padding?: 'none' | 'tight' | 'default' | 'loose';\r\n};\r\n\r\nconst paddingClasses: Record<NonNullable<AppContainerProps['padding']>, string> = {\r\n 'none': 'p-0',\r\n 'tight': 'p-2',\r\n 'default': 'p-4',\r\n 'loose': 'p-6'\r\n};\r\n\r\nexport const AppContainer = ({\r\n children,\r\n className,\r\n spacing = 'tight',\r\n padding = 'none',\r\n}: AppContainerProps) => {\r\n return (\r\n <div className={cn(\r\n 'flex flex-col h-full',\r\n spacingClasses[spacing],\r\n paddingClasses[padding],\r\n className\r\n )}>\r\n {children}\r\n </div>\r\n );\r\n};","import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}"],"mappings":";yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,kBAAAE,IAAA,eAAAC,EAAAH,GCAA,IAAAI,EAAsC,gBACtCC,EAAwB,0BAEjB,SAASC,KAAMC,EAAsB,CAC1C,SAAO,cAAQ,QAAKA,CAAM,CAAC,CAC7B,CD6BI,IAAAC,EAAA,6BA7BEC,EAA8C,CAClD,KAAQ,QACR,MAAS,QACT,QAAW,QACX,MAAS,QACT,cAAe,OACjB,EASMC,EAA4E,CAChF,KAAQ,MACR,MAAS,MACT,QAAW,MACX,MAAS,KACX,EAEaC,EAAe,CAAC,CAC3B,SAAAC,EACA,UAAAC,EACA,QAAAC,EAAU,QACV,QAAAC,EAAU,MACZ,OAEI,OAAC,OAAI,UAAWC,EACd,uBACAP,EAAeK,CAAO,EACtBJ,EAAeK,CAAO,EACtBF,CACF,EACG,SAAAD,EACH","names":["app_container_exports","__export","AppContainer","__toCommonJS","import_clsx","import_tailwind_merge","cn","inputs","import_jsx_runtime","spacingClasses","paddingClasses","AppContainer","children","className","spacing","padding","cn"]}
@@ -0,0 +1,13 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { ReactNode } from 'react';
3
+
4
+ type SpacingSize = 'none' | 'tight' | 'default' | 'loose' | 'extra-loose';
5
+ type AppContainerProps = {
6
+ children: ReactNode;
7
+ className?: string;
8
+ spacing?: SpacingSize;
9
+ padding?: 'none' | 'tight' | 'default' | 'loose';
10
+ };
11
+ declare const AppContainer: ({ children, className, spacing, padding, }: AppContainerProps) => react_jsx_runtime.JSX.Element;
12
+
13
+ export { AppContainer, type AppContainerProps };
@@ -0,0 +1,13 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { ReactNode } from 'react';
3
+
4
+ type SpacingSize = 'none' | 'tight' | 'default' | 'loose' | 'extra-loose';
5
+ type AppContainerProps = {
6
+ children: ReactNode;
7
+ className?: string;
8
+ spacing?: SpacingSize;
9
+ padding?: 'none' | 'tight' | 'default' | 'loose';
10
+ };
11
+ declare const AppContainer: ({ children, className, spacing, padding, }: AppContainerProps) => react_jsx_runtime.JSX.Element;
12
+
13
+ export { AppContainer, type AppContainerProps };
@@ -0,0 +1,3 @@
1
+ "use client"
2
+ import{clsx as a}from"clsx";import{twMerge as s}from"tailwind-merge";function o(...e){return s(a(e))}import{jsx as l}from"react/jsx-runtime";var i={none:"gap-0",tight:"gap-2",default:"gap-4",loose:"gap-6","extra-loose":"gap-8"},r={none:"p-0",tight:"p-2",default:"p-4",loose:"p-6"},u=({children:e,className:t,spacing:n="tight",padding:p="none"})=>l("div",{className:o("flex flex-col h-full",i[n],r[p],t),children:e});export{u as AppContainer};
3
+ //# sourceMappingURL=app-container.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/lib/utils.ts","../../../src/components/layouts/app-container.tsx"],"sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}","import { cn } from '../../lib/utils.js';\r\nimport type { ReactNode } from 'react';\r\n\r\ntype SpacingSize = 'none' | 'tight' | 'default' | 'loose' | 'extra-loose';\r\n\r\nconst spacingClasses: Record<SpacingSize, string> = {\r\n 'none': 'gap-0',\r\n 'tight': 'gap-2',\r\n 'default': 'gap-4',\r\n 'loose': 'gap-6',\r\n 'extra-loose': 'gap-8'\r\n};\r\n\r\nexport type AppContainerProps = {\r\n children: ReactNode;\r\n className?: string;\r\n spacing?: SpacingSize;\r\n padding?: 'none' | 'tight' | 'default' | 'loose';\r\n};\r\n\r\nconst paddingClasses: Record<NonNullable<AppContainerProps['padding']>, string> = {\r\n 'none': 'p-0',\r\n 'tight': 'p-2',\r\n 'default': 'p-4',\r\n 'loose': 'p-6'\r\n};\r\n\r\nexport const AppContainer = ({\r\n children,\r\n className,\r\n spacing = 'tight',\r\n padding = 'none',\r\n}: AppContainerProps) => {\r\n return (\r\n <div className={cn(\r\n 'flex flex-col h-full',\r\n spacingClasses[spacing],\r\n paddingClasses[padding],\r\n className\r\n )}>\r\n {children}\r\n </div>\r\n );\r\n};"],"mappings":";AAAA,OAAS,QAAAA,MAA6B,OACtC,OAAS,WAAAC,MAAe,iBAEjB,SAASC,KAAMC,EAAsB,CAC1C,OAAOF,EAAQD,EAAKG,CAAM,CAAC,CAC7B,CC6BI,cAAAC,MAAA,oBA7BJ,IAAMC,EAA8C,CAClD,KAAQ,QACR,MAAS,QACT,QAAW,QACX,MAAS,QACT,cAAe,OACjB,EASMC,EAA4E,CAChF,KAAQ,MACR,MAAS,MACT,QAAW,MACX,MAAS,KACX,EAEaC,EAAe,CAAC,CAC3B,SAAAC,EACA,UAAAC,EACA,QAAAC,EAAU,QACV,QAAAC,EAAU,MACZ,IAEIP,EAAC,OAAI,UAAWQ,EACd,uBACAP,EAAeK,CAAO,EACtBJ,EAAeK,CAAO,EACtBF,CACF,EACG,SAAAD,EACH","names":["clsx","twMerge","cn","inputs","jsx","spacingClasses","paddingClasses","AppContainer","children","className","spacing","padding","cn"]}
@@ -0,0 +1,3 @@
1
+ "use client"
2
+ "use strict";var U=Object.create;var x=Object.defineProperty;var Y=Object.getOwnPropertyDescriptor;var Z=Object.getOwnPropertyNames;var _=Object.getPrototypeOf,$=Object.prototype.hasOwnProperty;var j=(e,t)=>{for(var s in t)x(e,s,{get:t[s],enumerable:!0})},M=(e,t,s,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let c of Z(t))!$.call(e,c)&&c!==s&&x(e,c,{get:()=>t[c],enumerable:!(n=Y(t,c))||n.enumerable});return e};var ee=(e,t,s)=>(s=e!=null?U(_(e)):{},M(t||!e||!e.__esModule?x(s,"default",{value:e,enumerable:!0}):s,e)),te=e=>M(x({},"__esModule",{value:!0}),e);var re={};j(re,{AppContent:()=>ne});module.exports=te(re);var B=require("clsx"),D=require("tailwind-merge");function a(...e){return(0,D.twMerge)((0,B.clsx)(e))}var h=ee(require("react"),1);var p=require("radix-ui"),F=require("lucide-react");var r=require("react/jsx-runtime");function I({...e}){return(0,r.jsx)(p.Dialog.Root,{"data-slot":"sheet",...e})}function V({...e}){return(0,r.jsx)(p.Dialog.Trigger,{"data-slot":"sheet-trigger",...e})}function O({...e}){return(0,r.jsx)(p.Dialog.Portal,{"data-slot":"sheet-portal",...e})}function A({className:e,...t}){return(0,r.jsx)(p.Dialog.Overlay,{"data-slot":"sheet-overlay",className:a("data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50",e),...t})}function q({className:e,children:t,side:s="right",...n}){return(0,r.jsxs)(O,{children:[(0,r.jsx)(A,{}),(0,r.jsxs)(p.Dialog.Content,{"data-slot":"sheet-content",className:a("bg-background data-[state=open]:animate-in data-[state=closed]:animate-out fixed z-50 flex flex-col gap-4 shadow-lg transition ease-in-out data-[state=closed]:duration-300 data-[state=open]:duration-500",s==="right"&&"data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right inset-y-0 right-0 h-full w-3/4 border-l sm:max-w-sm",s==="left"&&"data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left inset-y-0 left-0 h-full w-3/4 border-r sm:max-w-sm",s==="top"&&"data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top inset-x-0 top-0 h-auto border-b",s==="bottom"&&"data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom inset-x-0 bottom-0 h-auto border-t",e),...n,children:[t,(0,r.jsxs)(p.Dialog.Close,{className:"ring-offset-background focus:ring-ring data-[state=open]:bg-secondary absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none",children:[(0,r.jsx)(F.XIcon,{className:"size-4"}),(0,r.jsx)("span",{className:"sr-only",children:"Close"})]})]})]})}var o=require("react/jsx-runtime"),E=(0,h.createContext)(!1),k={"one-half":["w-1/2","w-1/2"],"one-third":["w-1/3","w-2/3"],"two-third":["w-2/3","w-1/3"],"one-fourth":["w-1/4","w-3/4"],"three-fourth":["w-3/4","w-1/4"],"one-fifth":["w-1/5","w-4/5"],"four-fifth":["w-4/5","w-1/5"]},S={none:"p-0",tight:"p-2",default:"p-4",loose:"p-6"},oe=(e,t)=>{let[s,n]=k[t];return{container:"inset-y-0 z-50 transition-all duration-500 ease-in-out",content:a("h-full bg-background transition-all duration-500 ease-in-out",e==="right"?"border-l":"border-r"),transform:e==="right"?"translate-x-full":"-translate-x-full",transformOpen:"translate-x-0",contentPushClass:e==="right"?s:n,sheetPushClass:e==="right"?n:s}},ae="flex flex-col overflow-hidden rounded-2xl relative",se={default:"bg-background",card:"bg-background shadow-sm border",border:"bg-background border-2",transparent:"bg-transparent"},ne=e=>{let{children:t,className:s,variant:n="default",layout:c="full",header:T,footer:L,headerClassName:H,footerClassName:X,parentContainer:i=!1,padding:f=i?"none":"tight"}=e,G=(0,h.useContext)(E),[J,K]=(0,h.useState)(!1),w=h.default.useCallback(u=>(0,o.jsx)("div",{className:a("flex-1 overflow-auto h-full no-scrollbar",i&&"flex",!i&&S[f]),children:u}),[f,i]),Q=()=>{switch(c){case"split":{let{splitRatio:u="three-fourth",reverse:v=!1}=e;if(!Array.isArray(t)||t.length!==2)return(0,o.jsx)("div",{className:"flex items-center justify-center h-full text-red-500",children:'Error: AppContent with layout="split" requires exactly 2 children'});let[d,b]=k[u],[m,y]=v?[t[1],t[0]]:[t[0],t[1]],[P,N]=v?[b,d]:[d,b];return(0,o.jsxs)("div",{className:"flex h-full gap-2",children:[(0,o.jsx)("div",{className:a(P,"overflow-auto"),children:w(m)}),(0,o.jsx)("div",{className:a(N,"overflow-auto"),children:w(y)})]})}case"with-sheet":{let{sheetContent:u,sheetWidth:v="four-fifth",sheetSide:d="right",sheetMode:b="container",sheetTrigger:m,sheetClassName:y,isSheetOpen:P,onSheetOpenChange:N,showSheetOverlay:W=!0,disableOverlay:C=!0}=e,z=P!==void 0,l=z?P:J,R=z?N:K;if(b==="container"){let g=oe(d,v);return(0,o.jsxs)("div",{className:a("flex relative flex-1 overflow-hidden",l&&C&&["left","right"].includes(d)),children:[(0,o.jsxs)("div",{className:a("h-full overflow-auto transition-all duration-500",l&&C&&["left","right"].includes(d)?g.contentPushClass:"w-full",l&&C&&"overflow-y-auto overflow-x-hidden"),children:[m&&(0,o.jsx)("div",{onClick:()=>R?.(!l),children:m}),(0,o.jsx)("div",{className:a("h-full",!i&&S[f]),children:t})]}),(0,o.jsx)("div",{className:a(g.container,"transition-all duration-500 ease-in-out",l&&C&&["left","right"].includes(d)?a(g.sheetPushClass,"overflow-y-auto"):l?g.transformOpen:a(g.transform,"hidden"),"overflow-y-auto"),children:(0,o.jsx)("div",{className:a(g.content,y,"h-full"),children:u})}),l&&W&&!C&&(0,o.jsx)("div",{className:a("absolute inset-0 bg-secondary/20 z-40","transition-opacity duration-500 ease-in-out","opacity-0",l?"opacity-100":"opacity-0"),onClick:()=>R?.(!1)})]})}return(0,o.jsxs)(I,{open:l,onOpenChange:R,children:[m&&(0,o.jsx)(V,{asChild:!0,children:m}),(0,o.jsxs)(O,{children:[W&&(0,o.jsx)(A,{className:"fixed inset-0 bg-secondary/50 z-50"}),(0,o.jsx)(q,{side:d,className:a("fixed bg-background border","transition-all duration-500 ease-in-out",k[v][1],y),children:u})]})]})}default:return w(t)}};return(0,o.jsx)(E.Provider,{value:!0,children:(0,o.jsxs)("div",{className:a(ae,se[n],S[f],G&&"flex-1",i&&"h-full",!i&&"rounded-2xl",s),children:[T&&(0,o.jsx)("div",{className:a("border-b",H,n==="card"&&!i&&"rounded-t-2xl",n==="border"&&"border-b-2",S[f]),children:T}),Q(),L&&(0,o.jsx)("div",{className:a("border-t",X,n==="card"&&!i&&"rounded-b-2xl",n==="border"&&"border-t-2",S[f]),children:L})]})})};0&&(module.exports={AppContent});
3
+ //# sourceMappingURL=app-content.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/layouts/app-content.tsx","../../../src/lib/utils.ts","../../../src/components/ui/sheet.tsx"],"sourcesContent":["import { cn } from \"../../lib/utils.js\"\r\nimport React, { useState, createContext, useContext } from \"react\"\r\nimport {\r\n Sheet,\r\n SheetTrigger,\r\n SheetContent,\r\n SheetPortal,\r\n SheetOverlay\r\n} from \"../../components/ui/sheet.jsx\"\r\n\r\nconst AppContentContext = createContext(false)\r\n\r\ntype SplitRatio = \"one-half\" | \"one-third\" | \"two-third\" | \"one-fourth\" | \"three-fourth\" | \"one-fifth\" | \"four-fifth\"\r\n\r\ntype SheetSide = \"right\" | \"bottom\" | \"left\" | \"top\"\r\ntype SheetMode = \"fullscreen\" | \"container\"\r\n\r\ntype BaseAppContentProps = {\r\n children: React.ReactNode\r\n className?: string\r\n variant?: \"default\" | \"card\" | \"border\" | \"transparent\"\r\n header?: React.ReactNode\r\n footer?: React.ReactNode\r\n headerClassName?: string\r\n footerClassName?: string\r\n parentContainer?: boolean\r\n padding?: \"none\" | \"tight\" | \"default\" | \"loose\"\r\n}\r\n\r\ntype FullLayoutProps = BaseAppContentProps & {\r\n layout?: \"full\"\r\n}\r\n\r\ntype SplitLayoutProps = BaseAppContentProps & {\r\n layout: \"split\"\r\n splitRatio?: SplitRatio\r\n reverse?: boolean\r\n}\r\n\r\ntype SheetOptions = {\r\n sheetContent: React.ReactNode\r\n sheetWidth?: SplitRatio\r\n sheetSide?: SheetSide\r\n sheetMode?: SheetMode\r\n onSheetClose?: () => void\r\n showSheetOverlay?: boolean\r\n sheetClassName?: string\r\n isSheetOpen?: boolean\r\n onSheetOpenChange?: (open: boolean) => void\r\n sheetTrigger?: React.ReactNode\r\n disableOverlay?: boolean\r\n}\r\n\r\ntype WithSheetLayoutProps = BaseAppContentProps & {\r\n layout: \"with-sheet\"\r\n} & SheetOptions\r\n\r\nexport type AppContentProps = FullLayoutProps | SplitLayoutProps | WithSheetLayoutProps\r\n\r\nconst splitRatioClasses: Record<SplitRatio, [string, string]> = {\r\n \"one-half\": [\"w-1/2\", \"w-1/2\"],\r\n \"one-third\": [\"w-1/3\", \"w-2/3\"],\r\n \"two-third\": [\"w-2/3\", \"w-1/3\"],\r\n \"one-fourth\": [\"w-1/4\", \"w-3/4\"],\r\n \"three-fourth\": [\"w-3/4\", \"w-1/4\"],\r\n \"one-fifth\": [\"w-1/5\", \"w-4/5\"],\r\n \"four-fifth\": [\"w-4/5\", \"w-1/5\"],\r\n}\r\n\r\nconst paddingClasses = {\r\n none: \"p-0\",\r\n tight: \"p-2\",\r\n default: \"p-4\",\r\n loose: \"p-6\",\r\n}\r\n\r\nconst getContainerSheetClasses = (side: SheetSide, width: SplitRatio) => {\r\n const [contentWidth, sheetWidth] = splitRatioClasses[width]\r\n\r\n return {\r\n container: \"inset-y-0 z-50 transition-all duration-500 ease-in-out\",\r\n content: cn(\r\n \"h-full bg-background transition-all duration-500 ease-in-out\",\r\n side === \"right\" ? \"border-l\" : \"border-r\"\r\n ),\r\n transform: side === \"right\" ? \"translate-x-full\" : \"-translate-x-full\",\r\n transformOpen: \"translate-x-0\",\r\n contentPushClass: side === \"right\" ? contentWidth : sheetWidth,\r\n sheetPushClass: side === \"right\" ? sheetWidth : contentWidth,\r\n }\r\n}\r\n\r\nconst baseClasses = \"flex flex-col overflow-hidden rounded-2xl relative\"\r\nconst variantClasses = {\r\n default: \"bg-background\",\r\n card: \"bg-background shadow-sm border\",\r\n border: \"bg-background border-2\",\r\n transparent: \"bg-transparent\",\r\n}\r\n\r\nexport const AppContent = (props: AppContentProps) => {\r\n const {\r\n children,\r\n className,\r\n variant = \"default\",\r\n layout = \"full\",\r\n header,\r\n footer,\r\n headerClassName,\r\n footerClassName,\r\n parentContainer = false,\r\n padding = parentContainer ? \"none\" : \"tight\",\r\n } = props\r\n\r\n const isNested = useContext(AppContentContext)\r\n const [internalSheetOpen, setInternalSheetOpen] = useState(false)\r\n\r\n const contentWrapper = React.useCallback(\r\n (content: React.ReactNode) => (\r\n <div className={cn(\r\n \"flex-1 overflow-auto h-full no-scrollbar\",\r\n parentContainer && \"flex\",\r\n !parentContainer && paddingClasses[padding]\r\n )}>\r\n {content}\r\n </div>\r\n ),\r\n [padding, parentContainer]\r\n )\r\n\r\n const renderContent = () => {\r\n switch (layout) {\r\n case \"split\": {\r\n const { splitRatio = \"three-fourth\", reverse = false } = props as SplitLayoutProps\r\n if (!Array.isArray(children) || children.length !== 2) {\r\n return (\r\n <div className=\"flex items-center justify-center h-full text-red-500\">\r\n Error: AppContent with layout=\"split\" requires exactly 2 children\r\n </div>\r\n )\r\n }\r\n\r\n const [leftClass, rightClass] = splitRatioClasses[splitRatio]\r\n const [firstChild, secondChild] = reverse ? [children[1], children[0]] : [children[0], children[1]]\r\n const [firstClass, secondClass] = reverse ? [rightClass, leftClass] : [leftClass, rightClass]\r\n\r\n return (\r\n <div className=\"flex h-full gap-2\">\r\n <div className={cn(firstClass, \"overflow-auto\")}>\r\n {contentWrapper(firstChild)}\r\n </div>\r\n <div className={cn(secondClass, \"overflow-auto\")}>\r\n {contentWrapper(secondChild)}\r\n </div>\r\n </div>\r\n )\r\n }\r\n\r\n case \"with-sheet\": {\r\n const {\r\n sheetContent,\r\n sheetWidth = \"four-fifth\",\r\n sheetSide = \"right\",\r\n sheetMode = \"container\",\r\n sheetTrigger,\r\n sheetClassName,\r\n isSheetOpen,\r\n onSheetOpenChange,\r\n showSheetOverlay = true,\r\n disableOverlay = true,\r\n } = props as WithSheetLayoutProps\r\n\r\n const isControlled = isSheetOpen !== undefined\r\n const sheetOpen = isControlled ? isSheetOpen : internalSheetOpen\r\n const setSheetOpen = isControlled ? onSheetOpenChange : setInternalSheetOpen\r\n\r\n if (sheetMode === \"container\") {\r\n const sheetClasses = getContainerSheetClasses(sheetSide, sheetWidth)\r\n\r\n return (\r\n <div className={cn(\r\n \"flex relative flex-1 overflow-hidden\",\r\n sheetOpen && disableOverlay && [\"left\", \"right\"].includes(sheetSide)\r\n )}>\r\n {/* Main content area */}\r\n <div className={cn(\r\n \"h-full overflow-auto transition-all duration-500\",\r\n sheetOpen && disableOverlay && [\"left\", \"right\"].includes(sheetSide)\r\n ? sheetClasses.contentPushClass\r\n : \"w-full\",\r\n sheetOpen && disableOverlay && \"overflow-y-auto overflow-x-hidden\"\r\n )}>\r\n {sheetTrigger && (\r\n <div onClick={() => setSheetOpen?.(!sheetOpen)}>\r\n {sheetTrigger}\r\n </div>\r\n )}\r\n <div className={cn(\"h-full\", !parentContainer && paddingClasses[padding])}>\r\n {children}\r\n </div>\r\n </div>\r\n\r\n {/* Container sheet */}\r\n <div\r\n className={cn(\r\n sheetClasses.container,\r\n \"transition-all duration-500 ease-in-out\",\r\n sheetOpen && disableOverlay && [\"left\", \"right\"].includes(sheetSide)\r\n ? cn(sheetClasses.sheetPushClass, \"overflow-y-auto\")\r\n : sheetOpen\r\n ? sheetClasses.transformOpen\r\n : cn(sheetClasses.transform, \"hidden\"),\r\n \"overflow-y-auto\"\r\n )}\r\n >\r\n <div className={cn(sheetClasses.content, sheetClassName, \"h-full\")}>\r\n {sheetContent}\r\n </div>\r\n </div>\r\n\r\n {/* Container overlay */}\r\n {sheetOpen && showSheetOverlay && !disableOverlay && (\r\n <div\r\n className={cn(\r\n \"absolute inset-0 bg-secondary/20 z-40\",\r\n \"transition-opacity duration-500 ease-in-out\",\r\n \"opacity-0\",\r\n sheetOpen ? \"opacity-100\" : \"opacity-0\"\r\n )}\r\n onClick={() => setSheetOpen?.(false)}\r\n />\r\n )}\r\n </div>\r\n )\r\n }\r\n\r\n return (\r\n <Sheet open={sheetOpen} onOpenChange={setSheetOpen}>\r\n {sheetTrigger && <SheetTrigger asChild>{sheetTrigger}</SheetTrigger>}\r\n <SheetPortal>\r\n {showSheetOverlay && <SheetOverlay className=\"fixed inset-0 bg-secondary/50 z-50\" />}\r\n <SheetContent\r\n side={sheetSide}\r\n className={cn(\r\n \"fixed bg-background border\",\r\n \"transition-all duration-500 ease-in-out\",\r\n splitRatioClasses[sheetWidth][1],\r\n sheetClassName\r\n )}\r\n >\r\n {sheetContent}\r\n </SheetContent>\r\n </SheetPortal>\r\n </Sheet>\r\n )\r\n }\r\n\r\n default:\r\n return contentWrapper(children)\r\n }\r\n }\r\n\r\n return (\r\n <AppContentContext.Provider value={true}>\r\n <div className={cn(\r\n baseClasses,\r\n variantClasses[variant],\r\n paddingClasses[padding],\r\n isNested && \"flex-1\",\r\n parentContainer && \"h-full\",\r\n !parentContainer && \"rounded-2xl\",\r\n className\r\n )}>\r\n {header && (\r\n <div\r\n className={cn(\r\n \"border-b\",\r\n headerClassName,\r\n variant === \"card\" && !parentContainer && \"rounded-t-2xl\",\r\n variant === \"border\" && \"border-b-2\",\r\n paddingClasses[padding]\r\n )}\r\n >\r\n {header}\r\n </div>\r\n )}\r\n {renderContent()}\r\n {footer && (\r\n <div\r\n className={cn(\r\n \"border-t\",\r\n footerClassName,\r\n variant === \"card\" && !parentContainer && \"rounded-b-2xl\",\r\n variant === \"border\" && \"border-t-2\",\r\n paddingClasses[padding]\r\n )}\r\n >\r\n {footer}\r\n </div>\r\n )}\r\n </div>\r\n </AppContentContext.Provider>\r\n )\r\n}\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n// import { cn } from \"@/lib/utils\"\r\n// import React, { useState, createContext, useContext } from \"react\"\r\n// import {\r\n// Sheet,\r\n// SheetTrigger,\r\n// SheetContent,\r\n// SheetPortal,\r\n// SheetOverlay\r\n// } from \"@/components/ui/sheet\"\r\n\r\n// const AppContentContext = createContext(false)\r\n\r\n// type SplitRatio = \"one-half\" | \"one-third\" | \"two-third\" | \"one-fourth\" | \"three-fourth\" | \"one-fifth\" | \"four-fifth\"\r\n\r\n// type SheetSide = \"right\" | \"bottom\" | \"left\" | \"top\"\r\n// type SheetMode = \"fullscreen\" | \"container\"\r\n\r\n// type BaseAppContentProps = {\r\n// children: React.ReactNode\r\n// className?: string\r\n// variant?: \"default\" | \"card\" | \"border\" | \"transparent\"\r\n// header?: React.ReactNode\r\n// footer?: React.ReactNode\r\n// headerClassName?: string\r\n// footerClassName?: string\r\n// parentContainer?: boolean\r\n// padding?: \"none\" | \"tight\" | \"default\" | \"loose\"\r\n// }\r\n\r\n// type FullLayoutProps = BaseAppContentProps & {\r\n// layout?: \"full\"\r\n// }\r\n\r\n// type SplitLayoutProps = BaseAppContentProps & {\r\n// layout: \"split\"\r\n// splitRatio?: SplitRatio\r\n// reverse?: boolean\r\n// }\r\n\r\n// type SheetOptions = {\r\n// sheetContent: React.ReactNode\r\n// sheetWidth?: SplitRatio\r\n// sheetSide?: SheetSide\r\n// sheetMode?: SheetMode\r\n// onSheetClose?: () => void\r\n// showSheetOverlay?: boolean\r\n// sheetClassName?: string\r\n// isSheetOpen?: boolean\r\n// onSheetOpenChange?: (open: boolean) => void\r\n// sheetTrigger?: React.ReactNode\r\n// disableOverlay?: boolean\r\n// }\r\n\r\n// type WithSheetLayoutProps = BaseAppContentProps & {\r\n// layout: \"with-sheet\"\r\n// } & SheetOptions\r\n\r\n// type AppContentProps = FullLayoutProps | SplitLayoutProps | WithSheetLayoutProps\r\n\r\n// const splitRatioClasses: Record<SplitRatio, [string, string]> = {\r\n// \"one-half\": [\"w-1/2\", \"w-1/2\"],\r\n// \"one-third\": [\"w-1/3\", \"w-2/3\"],\r\n// \"two-third\": [\"w-2/3\", \"w-1/3\"],\r\n// \"one-fourth\": [\"w-1/4\", \"w-3/4\"],\r\n// \"three-fourth\": [\"w-3/4\", \"w-1/4\"],\r\n// \"one-fifth\": [\"w-1/5\", \"w-4/5\"],\r\n// \"four-fifth\": [\"w-4/5\", \"w-1/5\"],\r\n// }\r\n\r\n// const paddingClasses = {\r\n// none: \"p-0\",\r\n// tight: \"p-2\",\r\n// default: \"p-4\",\r\n// loose: \"p-6\",\r\n// }\r\n\r\n// const getContainerSheetClasses = (side: SheetSide, width: SplitRatio) => {\r\n// const [contentWidth, sheetWidth] = splitRatioClasses[width]\r\n\r\n// return {\r\n// container: \"inset-y-0 z-50\",\r\n// content: cn(\"h-full bg-background\", side === \"right\" ? \"border-l\" : \"border-r\"),\r\n// transform: side === \"right\" ? \"translate-x-full\" : \"-translate-x-full\",\r\n// transformOpen: \"translate-x-0\",\r\n// contentPushClass: side === \"right\" ? contentWidth : sheetWidth,\r\n// sheetPushClass: side === \"right\" ? sheetWidth : contentWidth,\r\n// }\r\n// }\r\n\r\n// const baseClasses = \"flex flex-col overflow-hidden rounded-2xl relative\"\r\n// const variantClasses = {\r\n// default: \"bg-background\",\r\n// card: \"bg-background shadow-sm border\",\r\n// border: \"bg-background border-2\",\r\n// transparent: \"bg-transparent\",\r\n// }\r\n\r\n// export const AppContent = (props: AppContentProps) => {\r\n// const {\r\n// children,\r\n// className,\r\n// variant = \"default\",\r\n// layout = \"full\",\r\n// header,\r\n// footer,\r\n// headerClassName,\r\n// footerClassName,\r\n// parentContainer = false,\r\n// padding = parentContainer ? \"none\" : \"tight\",\r\n// } = props\r\n\r\n// const isNested = useContext(AppContentContext)\r\n// const [internalSheetOpen, setInternalSheetOpen] = useState(false)\r\n\r\n// const contentWrapper = React.useCallback(\r\n// (content: React.ReactNode) => (\r\n// <div className={cn(\r\n// \"flex-1 overflow-auto h-full\",\r\n// !parentContainer && paddingClasses[padding]\r\n// )}>\r\n// {content}\r\n// </div>\r\n// ),\r\n// [padding, parentContainer]\r\n// )\r\n\r\n// const renderContent = () => {\r\n// switch (layout) {\r\n// case \"split\": {\r\n// const { splitRatio = \"three-fourth\", reverse = false } = props as SplitLayoutProps\r\n// if (!Array.isArray(children) || children.length !== 2) {\r\n// return (\r\n// <div className=\"flex items-center justify-center h-full text-red-500\">\r\n// Error: AppContent with layout=\"split\" requires exactly 2 children\r\n// </div>\r\n// )\r\n// }\r\n\r\n// const [leftClass, rightClass] = splitRatioClasses[splitRatio]\r\n// const [firstChild, secondChild] = reverse ? [children[1], children[0]] : [children[0], children[1]]\r\n// const [firstClass, secondClass] = reverse ? [rightClass, leftClass] : [leftClass, rightClass]\r\n\r\n// return (\r\n// <div className=\"flex h-full gap-4\">\r\n// <div className={cn(firstClass, \"overflow-auto\")}>\r\n// {contentWrapper(firstChild)}\r\n// </div>\r\n// <div className={cn(secondClass, \"overflow-auto\")}>\r\n// {contentWrapper(secondChild)}\r\n// </div>\r\n// </div>\r\n// )\r\n// }\r\n\r\n// case \"with-sheet\": {\r\n// const {\r\n// sheetContent,\r\n// sheetWidth = \"four-fifth\",\r\n// sheetSide = \"right\",\r\n// sheetMode = \"container\",\r\n// sheetTrigger,\r\n// sheetClassName,\r\n// isSheetOpen,\r\n// onSheetOpenChange,\r\n// showSheetOverlay = true,\r\n// disableOverlay = false,\r\n// } = props as WithSheetLayoutProps\r\n\r\n// const isControlled = isSheetOpen !== undefined\r\n// const sheetOpen = isControlled ? isSheetOpen : internalSheetOpen\r\n// const setSheetOpen = isControlled ? onSheetOpenChange : setInternalSheetOpen\r\n\r\n// if (sheetMode === \"container\") {\r\n// const sheetClasses = getContainerSheetClasses(sheetSide, sheetWidth)\r\n\r\n// return (\r\n// <div className={cn(\r\n// \"flex relative flex-1 overflow-hidden\",\r\n// sheetOpen && disableOverlay && [\"left\", \"right\"].includes(sheetSide)\r\n// )}>\r\n// {/* Main content area */}\r\n// <div className={cn(\r\n// \"h-full overflow-auto transition-all duration-500\",\r\n// sheetOpen && disableOverlay && [\"left\", \"right\"].includes(sheetSide)\r\n// ? sheetClasses.contentPushClass\r\n// : \"w-full\",\r\n// sheetOpen && disableOverlay && \"overflow-y-auto overflow-x-hidden\"\r\n// )}>\r\n// {sheetTrigger && (\r\n// <div onClick={() => setSheetOpen?.(!sheetOpen)}>\r\n// {sheetTrigger}\r\n// </div>\r\n// )}\r\n// <div className={cn(!parentContainer && paddingClasses[padding])}>\r\n// {children}\r\n// </div>\r\n// </div>\r\n\r\n// {/* Container sheet */}\r\n// <div\r\n// className={cn(\r\n// sheetClasses.container,\r\n// \"transition-all duration-500 ease-out\",\r\n// sheetOpen && disableOverlay && [\"left\", \"right\"].includes(sheetSide)\r\n// ? cn(sheetClasses.sheetPushClass, \"overflow-y-auto\")\r\n// : sheetOpen\r\n// ? sheetClasses.transformOpen\r\n// : cn(sheetClasses.transform, \"hidden\"),\r\n// \"overflow-y-auto\"\r\n// )}\r\n// >\r\n// <div className={cn(sheetClasses.content, sheetClassName, \"h-full\")}>\r\n// {sheetContent}\r\n// </div>\r\n// </div>\r\n\r\n// {/* Container overlay */}\r\n// {sheetOpen && showSheetOverlay && !disableOverlay && (\r\n// <div\r\n// className={cn(\"absolute inset-0 bg-secondary/20 z-40\")}\r\n// onClick={() => setSheetOpen?.(false)}\r\n// />\r\n// )}\r\n// </div>\r\n// )\r\n// }\r\n\r\n// return (\r\n// <Sheet open={sheetOpen} onOpenChange={setSheetOpen}>\r\n// {sheetTrigger && <SheetTrigger asChild>{sheetTrigger}</SheetTrigger>}\r\n// <SheetPortal>\r\n// {showSheetOverlay && <SheetOverlay className=\"fixed inset-0 bg-secondary/50 z-50\" />}\r\n// <SheetContent\r\n// side={sheetSide}\r\n// className={cn(\r\n// \"fixed bg-background border\",\r\n// splitRatioClasses[sheetWidth][1],\r\n// sheetClassName\r\n// )}\r\n// >\r\n// {sheetContent}\r\n// </SheetContent>\r\n// </SheetPortal>\r\n// </Sheet>\r\n// )\r\n// }\r\n\r\n// default:\r\n// return contentWrapper(children)\r\n// }\r\n// }\r\n\r\n// return (\r\n// <AppContentContext.Provider value={true}>\r\n// <div className={cn(\r\n// baseClasses,\r\n// variantClasses[variant],\r\n// paddingClasses[padding],\r\n// isNested && \"flex-1\",\r\n// parentContainer && \"h-full\",\r\n// !parentContainer && \"rounded-2xl\",\r\n// className\r\n// )}>\r\n// {header && (\r\n// <div\r\n// className={cn(\r\n// \"border-b\",\r\n// headerClassName,\r\n// variant === \"card\" && !parentContainer && \"rounded-t-2xl\",\r\n// variant === \"border\" && \"border-b-2\",\r\n// paddingClasses[padding]\r\n// )}\r\n// >\r\n// {header}\r\n// </div>\r\n// )}\r\n// {renderContent()}\r\n// {footer && (\r\n// <div\r\n// className={cn(\r\n// \"border-t\",\r\n// footerClassName,\r\n// variant === \"card\" && !parentContainer && \"rounded-b-2xl\",\r\n// variant === \"border\" && \"border-t-2\",\r\n// paddingClasses[padding]\r\n// )}\r\n// >\r\n// {footer}\r\n// </div>\r\n// )}\r\n// </div>\r\n// </AppContentContext.Provider>\r\n// )\r\n// }\r\n\r\n","import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}","import * as React from \"react\"\nimport { Dialog as SheetPrimitive } from \"radix-ui\"\nimport { XIcon } from \"lucide-react\"\nimport { cn } from \"../../lib/utils.js\"\n\nfunction Sheet({ ...props }: React.ComponentProps<typeof SheetPrimitive.Root>) {\n return <SheetPrimitive.Root data-slot=\"sheet\" {...props} />\n}\n\nfunction SheetTrigger({\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Trigger>) {\n return <SheetPrimitive.Trigger data-slot=\"sheet-trigger\" {...props} />\n}\n\nfunction SheetClose({\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Close>) {\n return <SheetPrimitive.Close data-slot=\"sheet-close\" {...props} />\n}\n\nfunction SheetPortal({\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Portal>) {\n return <SheetPrimitive.Portal data-slot=\"sheet-portal\" {...props} />\n}\n\nfunction SheetOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Overlay>) {\n return (\n <SheetPrimitive.Overlay\n data-slot=\"sheet-overlay\"\n className={cn(\n \"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SheetContent({\n className,\n children,\n side = \"right\",\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Content> & {\n side?: \"top\" | \"right\" | \"bottom\" | \"left\"\n}) {\n return (\n <SheetPortal>\n <SheetOverlay />\n <SheetPrimitive.Content\n data-slot=\"sheet-content\"\n className={cn(\n \"bg-background data-[state=open]:animate-in data-[state=closed]:animate-out fixed z-50 flex flex-col gap-4 shadow-lg transition ease-in-out data-[state=closed]:duration-300 data-[state=open]:duration-500\",\n side === \"right\" &&\n \"data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right inset-y-0 right-0 h-full w-3/4 border-l sm:max-w-sm\",\n side === \"left\" &&\n \"data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left inset-y-0 left-0 h-full w-3/4 border-r sm:max-w-sm\",\n side === \"top\" &&\n \"data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top inset-x-0 top-0 h-auto border-b\",\n side === \"bottom\" &&\n \"data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom inset-x-0 bottom-0 h-auto border-t\",\n className\n )}\n {...props}\n >\n {children}\n <SheetPrimitive.Close className=\"ring-offset-background focus:ring-ring data-[state=open]:bg-secondary absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none\">\n <XIcon className=\"size-4\" />\n <span className=\"sr-only\">Close</span>\n </SheetPrimitive.Close>\n </SheetPrimitive.Content>\n </SheetPortal>\n )\n}\n\nfunction SheetHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sheet-header\"\n className={cn(\"flex flex-col gap-1.5 p-4\", className)}\n {...props}\n />\n )\n}\n\nfunction SheetFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sheet-footer\"\n className={cn(\"mt-auto flex flex-col gap-2 p-4\", className)}\n {...props}\n />\n )\n}\n\nfunction SheetTitle({\n className,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Title>) {\n return (\n <SheetPrimitive.Title\n data-slot=\"sheet-title\"\n className={cn(\"text-foreground font-semibold\", className)}\n {...props}\n />\n )\n}\n\nfunction SheetDescription({\n className,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Description>) {\n return (\n <SheetPrimitive.Description\n data-slot=\"sheet-description\"\n className={cn(\"text-muted-foreground text-sm\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Sheet,\n SheetTrigger,\n SheetClose,\n SheetOverlay,\n SheetPortal,\n SheetContent,\n SheetHeader,\n SheetFooter,\n SheetTitle,\n SheetDescription,\n}\n"],"mappings":"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","names":["app_content_exports","__export","AppContent","__toCommonJS","import_clsx","import_tailwind_merge","cn","inputs","import_react","import_radix_ui","import_lucide_react","import_jsx_runtime","Sheet","props","SheetPrimitive","SheetTrigger","SheetPortal","props","SheetPrimitive","SheetOverlay","className","cn","SheetContent","children","side","import_jsx_runtime","AppContentContext","splitRatioClasses","paddingClasses","getContainerSheetClasses","side","width","contentWidth","sheetWidth","cn","baseClasses","variantClasses","AppContent","props","children","className","variant","layout","header","footer","headerClassName","footerClassName","parentContainer","padding","isNested","internalSheetOpen","setInternalSheetOpen","contentWrapper","React","content","renderContent","splitRatio","reverse","leftClass","rightClass","firstChild","secondChild","firstClass","secondClass","sheetContent","sheetSide","sheetMode","sheetTrigger","sheetClassName","isSheetOpen","onSheetOpenChange","showSheetOverlay","disableOverlay","isControlled","sheetOpen","setSheetOpen","sheetClasses","Sheet","SheetTrigger","SheetPortal","SheetOverlay","SheetContent"]}
@@ -0,0 +1,45 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import React__default from 'react';
3
+
4
+ type SplitRatio = "one-half" | "one-third" | "two-third" | "one-fourth" | "three-fourth" | "one-fifth" | "four-fifth";
5
+ type SheetSide = "right" | "bottom" | "left" | "top";
6
+ type SheetMode = "fullscreen" | "container";
7
+ type BaseAppContentProps = {
8
+ children: React__default.ReactNode;
9
+ className?: string;
10
+ variant?: "default" | "card" | "border" | "transparent";
11
+ header?: React__default.ReactNode;
12
+ footer?: React__default.ReactNode;
13
+ headerClassName?: string;
14
+ footerClassName?: string;
15
+ parentContainer?: boolean;
16
+ padding?: "none" | "tight" | "default" | "loose";
17
+ };
18
+ type FullLayoutProps = BaseAppContentProps & {
19
+ layout?: "full";
20
+ };
21
+ type SplitLayoutProps = BaseAppContentProps & {
22
+ layout: "split";
23
+ splitRatio?: SplitRatio;
24
+ reverse?: boolean;
25
+ };
26
+ type SheetOptions = {
27
+ sheetContent: React__default.ReactNode;
28
+ sheetWidth?: SplitRatio;
29
+ sheetSide?: SheetSide;
30
+ sheetMode?: SheetMode;
31
+ onSheetClose?: () => void;
32
+ showSheetOverlay?: boolean;
33
+ sheetClassName?: string;
34
+ isSheetOpen?: boolean;
35
+ onSheetOpenChange?: (open: boolean) => void;
36
+ sheetTrigger?: React__default.ReactNode;
37
+ disableOverlay?: boolean;
38
+ };
39
+ type WithSheetLayoutProps = BaseAppContentProps & {
40
+ layout: "with-sheet";
41
+ } & SheetOptions;
42
+ type AppContentProps = FullLayoutProps | SplitLayoutProps | WithSheetLayoutProps;
43
+ declare const AppContent: (props: AppContentProps) => react_jsx_runtime.JSX.Element;
44
+
45
+ export { AppContent, type AppContentProps };
@@ -0,0 +1,45 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import React__default from 'react';
3
+
4
+ type SplitRatio = "one-half" | "one-third" | "two-third" | "one-fourth" | "three-fourth" | "one-fifth" | "four-fifth";
5
+ type SheetSide = "right" | "bottom" | "left" | "top";
6
+ type SheetMode = "fullscreen" | "container";
7
+ type BaseAppContentProps = {
8
+ children: React__default.ReactNode;
9
+ className?: string;
10
+ variant?: "default" | "card" | "border" | "transparent";
11
+ header?: React__default.ReactNode;
12
+ footer?: React__default.ReactNode;
13
+ headerClassName?: string;
14
+ footerClassName?: string;
15
+ parentContainer?: boolean;
16
+ padding?: "none" | "tight" | "default" | "loose";
17
+ };
18
+ type FullLayoutProps = BaseAppContentProps & {
19
+ layout?: "full";
20
+ };
21
+ type SplitLayoutProps = BaseAppContentProps & {
22
+ layout: "split";
23
+ splitRatio?: SplitRatio;
24
+ reverse?: boolean;
25
+ };
26
+ type SheetOptions = {
27
+ sheetContent: React__default.ReactNode;
28
+ sheetWidth?: SplitRatio;
29
+ sheetSide?: SheetSide;
30
+ sheetMode?: SheetMode;
31
+ onSheetClose?: () => void;
32
+ showSheetOverlay?: boolean;
33
+ sheetClassName?: string;
34
+ isSheetOpen?: boolean;
35
+ onSheetOpenChange?: (open: boolean) => void;
36
+ sheetTrigger?: React__default.ReactNode;
37
+ disableOverlay?: boolean;
38
+ };
39
+ type WithSheetLayoutProps = BaseAppContentProps & {
40
+ layout: "with-sheet";
41
+ } & SheetOptions;
42
+ type AppContentProps = FullLayoutProps | SplitLayoutProps | WithSheetLayoutProps;
43
+ declare const AppContent: (props: AppContentProps) => react_jsx_runtime.JSX.Element;
44
+
45
+ export { AppContent, type AppContentProps };
@@ -0,0 +1,3 @@
1
+ "use client"
2
+ import{clsx as G}from"clsx";import{twMerge as J}from"tailwind-merge";function t(...e){return J(G(e))}import Q,{useState as U,createContext as Y,useContext as Z}from"react";import{Dialog as u}from"radix-ui";import{XIcon as K}from"lucide-react";import{jsx as d,jsxs as N}from"react/jsx-runtime";function z({...e}){return d(u.Root,{"data-slot":"sheet",...e})}function M({...e}){return d(u.Trigger,{"data-slot":"sheet-trigger",...e})}function R({...e}){return d(u.Portal,{"data-slot":"sheet-portal",...e})}function O({className:e,...a}){return d(u.Overlay,{"data-slot":"sheet-overlay",className:t("data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50",e),...a})}function B({className:e,children:a,side:n="right",...s}){return N(R,{children:[d(O,{}),N(u.Content,{"data-slot":"sheet-content",className:t("bg-background data-[state=open]:animate-in data-[state=closed]:animate-out fixed z-50 flex flex-col gap-4 shadow-lg transition ease-in-out data-[state=closed]:duration-300 data-[state=open]:duration-500",n==="right"&&"data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right inset-y-0 right-0 h-full w-3/4 border-l sm:max-w-sm",n==="left"&&"data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left inset-y-0 left-0 h-full w-3/4 border-r sm:max-w-sm",n==="top"&&"data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top inset-x-0 top-0 h-auto border-b",n==="bottom"&&"data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom inset-x-0 bottom-0 h-auto border-t",e),...s,children:[a,N(u.Close,{className:"ring-offset-background focus:ring-ring data-[state=open]:bg-secondary absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none",children:[d(K,{className:"size-4"}),d("span",{className:"sr-only",children:"Close"})]})]})]})}import{jsx as o,jsxs as m}from"react/jsx-runtime";var D=Y(!1),A={"one-half":["w-1/2","w-1/2"],"one-third":["w-1/3","w-2/3"],"two-third":["w-2/3","w-1/3"],"one-fourth":["w-1/4","w-3/4"],"three-fourth":["w-3/4","w-1/4"],"one-fifth":["w-1/5","w-4/5"],"four-fifth":["w-4/5","w-1/5"]},C={none:"p-0",tight:"p-2",default:"p-4",loose:"p-6"},_=(e,a)=>{let[n,s]=A[a];return{container:"inset-y-0 z-50 transition-all duration-500 ease-in-out",content:t("h-full bg-background transition-all duration-500 ease-in-out",e==="right"?"border-l":"border-r"),transform:e==="right"?"translate-x-full":"-translate-x-full",transformOpen:"translate-x-0",contentPushClass:e==="right"?n:s,sheetPushClass:e==="right"?s:n}},$="flex flex-col overflow-hidden rounded-2xl relative",j={default:"bg-background",card:"bg-background shadow-sm border",border:"bg-background border-2",transparent:"bg-transparent"},ce=e=>{let{children:a,className:n,variant:s="default",layout:F="full",header:k,footer:T,headerClassName:I,footerClassName:V,parentContainer:r=!1,padding:h=r?"none":"tight"}=e,q=Z(D),[E,H]=U(!1),P=Q.useCallback(c=>o("div",{className:t("flex-1 overflow-auto h-full no-scrollbar",r&&"flex",!r&&C[h]),children:c}),[h,r]),X=()=>{switch(F){case"split":{let{splitRatio:c="three-fourth",reverse:g=!1}=e;if(!Array.isArray(a)||a.length!==2)return o("div",{className:"flex items-center justify-center h-full text-red-500",children:'Error: AppContent with layout="split" requires exactly 2 children'});let[l,S]=A[c],[p,b]=g?[a[1],a[0]]:[a[0],a[1]],[y,x]=g?[S,l]:[l,S];return m("div",{className:"flex h-full gap-2",children:[o("div",{className:t(y,"overflow-auto"),children:P(p)}),o("div",{className:t(x,"overflow-auto"),children:P(b)})]})}case"with-sheet":{let{sheetContent:c,sheetWidth:g="four-fifth",sheetSide:l="right",sheetMode:S="container",sheetTrigger:p,sheetClassName:b,isSheetOpen:y,onSheetOpenChange:x,showSheetOverlay:L=!0,disableOverlay:v=!0}=e,W=y!==void 0,i=W?y:E,w=W?x:H;if(S==="container"){let f=_(l,g);return m("div",{className:t("flex relative flex-1 overflow-hidden",i&&v&&["left","right"].includes(l)),children:[m("div",{className:t("h-full overflow-auto transition-all duration-500",i&&v&&["left","right"].includes(l)?f.contentPushClass:"w-full",i&&v&&"overflow-y-auto overflow-x-hidden"),children:[p&&o("div",{onClick:()=>w?.(!i),children:p}),o("div",{className:t("h-full",!r&&C[h]),children:a})]}),o("div",{className:t(f.container,"transition-all duration-500 ease-in-out",i&&v&&["left","right"].includes(l)?t(f.sheetPushClass,"overflow-y-auto"):i?f.transformOpen:t(f.transform,"hidden"),"overflow-y-auto"),children:o("div",{className:t(f.content,b,"h-full"),children:c})}),i&&L&&!v&&o("div",{className:t("absolute inset-0 bg-secondary/20 z-40","transition-opacity duration-500 ease-in-out","opacity-0",i?"opacity-100":"opacity-0"),onClick:()=>w?.(!1)})]})}return m(z,{open:i,onOpenChange:w,children:[p&&o(M,{asChild:!0,children:p}),m(R,{children:[L&&o(O,{className:"fixed inset-0 bg-secondary/50 z-50"}),o(B,{side:l,className:t("fixed bg-background border","transition-all duration-500 ease-in-out",A[g][1],b),children:c})]})]})}default:return P(a)}};return o(D.Provider,{value:!0,children:m("div",{className:t($,j[s],C[h],q&&"flex-1",r&&"h-full",!r&&"rounded-2xl",n),children:[k&&o("div",{className:t("border-b",I,s==="card"&&!r&&"rounded-t-2xl",s==="border"&&"border-b-2",C[h]),children:k}),X(),T&&o("div",{className:t("border-t",V,s==="card"&&!r&&"rounded-b-2xl",s==="border"&&"border-t-2",C[h]),children:T})]})})};export{ce as AppContent};
3
+ //# sourceMappingURL=app-content.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/lib/utils.ts","../../../src/components/layouts/app-content.tsx","../../../src/components/ui/sheet.tsx"],"sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}","import { cn } from \"../../lib/utils.js\"\r\nimport React, { useState, createContext, useContext } from \"react\"\r\nimport {\r\n Sheet,\r\n SheetTrigger,\r\n SheetContent,\r\n SheetPortal,\r\n SheetOverlay\r\n} from \"../../components/ui/sheet.jsx\"\r\n\r\nconst AppContentContext = createContext(false)\r\n\r\ntype SplitRatio = \"one-half\" | \"one-third\" | \"two-third\" | \"one-fourth\" | \"three-fourth\" | \"one-fifth\" | \"four-fifth\"\r\n\r\ntype SheetSide = \"right\" | \"bottom\" | \"left\" | \"top\"\r\ntype SheetMode = \"fullscreen\" | \"container\"\r\n\r\ntype BaseAppContentProps = {\r\n children: React.ReactNode\r\n className?: string\r\n variant?: \"default\" | \"card\" | \"border\" | \"transparent\"\r\n header?: React.ReactNode\r\n footer?: React.ReactNode\r\n headerClassName?: string\r\n footerClassName?: string\r\n parentContainer?: boolean\r\n padding?: \"none\" | \"tight\" | \"default\" | \"loose\"\r\n}\r\n\r\ntype FullLayoutProps = BaseAppContentProps & {\r\n layout?: \"full\"\r\n}\r\n\r\ntype SplitLayoutProps = BaseAppContentProps & {\r\n layout: \"split\"\r\n splitRatio?: SplitRatio\r\n reverse?: boolean\r\n}\r\n\r\ntype SheetOptions = {\r\n sheetContent: React.ReactNode\r\n sheetWidth?: SplitRatio\r\n sheetSide?: SheetSide\r\n sheetMode?: SheetMode\r\n onSheetClose?: () => void\r\n showSheetOverlay?: boolean\r\n sheetClassName?: string\r\n isSheetOpen?: boolean\r\n onSheetOpenChange?: (open: boolean) => void\r\n sheetTrigger?: React.ReactNode\r\n disableOverlay?: boolean\r\n}\r\n\r\ntype WithSheetLayoutProps = BaseAppContentProps & {\r\n layout: \"with-sheet\"\r\n} & SheetOptions\r\n\r\nexport type AppContentProps = FullLayoutProps | SplitLayoutProps | WithSheetLayoutProps\r\n\r\nconst splitRatioClasses: Record<SplitRatio, [string, string]> = {\r\n \"one-half\": [\"w-1/2\", \"w-1/2\"],\r\n \"one-third\": [\"w-1/3\", \"w-2/3\"],\r\n \"two-third\": [\"w-2/3\", \"w-1/3\"],\r\n \"one-fourth\": [\"w-1/4\", \"w-3/4\"],\r\n \"three-fourth\": [\"w-3/4\", \"w-1/4\"],\r\n \"one-fifth\": [\"w-1/5\", \"w-4/5\"],\r\n \"four-fifth\": [\"w-4/5\", \"w-1/5\"],\r\n}\r\n\r\nconst paddingClasses = {\r\n none: \"p-0\",\r\n tight: \"p-2\",\r\n default: \"p-4\",\r\n loose: \"p-6\",\r\n}\r\n\r\nconst getContainerSheetClasses = (side: SheetSide, width: SplitRatio) => {\r\n const [contentWidth, sheetWidth] = splitRatioClasses[width]\r\n\r\n return {\r\n container: \"inset-y-0 z-50 transition-all duration-500 ease-in-out\",\r\n content: cn(\r\n \"h-full bg-background transition-all duration-500 ease-in-out\",\r\n side === \"right\" ? \"border-l\" : \"border-r\"\r\n ),\r\n transform: side === \"right\" ? \"translate-x-full\" : \"-translate-x-full\",\r\n transformOpen: \"translate-x-0\",\r\n contentPushClass: side === \"right\" ? contentWidth : sheetWidth,\r\n sheetPushClass: side === \"right\" ? sheetWidth : contentWidth,\r\n }\r\n}\r\n\r\nconst baseClasses = \"flex flex-col overflow-hidden rounded-2xl relative\"\r\nconst variantClasses = {\r\n default: \"bg-background\",\r\n card: \"bg-background shadow-sm border\",\r\n border: \"bg-background border-2\",\r\n transparent: \"bg-transparent\",\r\n}\r\n\r\nexport const AppContent = (props: AppContentProps) => {\r\n const {\r\n children,\r\n className,\r\n variant = \"default\",\r\n layout = \"full\",\r\n header,\r\n footer,\r\n headerClassName,\r\n footerClassName,\r\n parentContainer = false,\r\n padding = parentContainer ? \"none\" : \"tight\",\r\n } = props\r\n\r\n const isNested = useContext(AppContentContext)\r\n const [internalSheetOpen, setInternalSheetOpen] = useState(false)\r\n\r\n const contentWrapper = React.useCallback(\r\n (content: React.ReactNode) => (\r\n <div className={cn(\r\n \"flex-1 overflow-auto h-full no-scrollbar\",\r\n parentContainer && \"flex\",\r\n !parentContainer && paddingClasses[padding]\r\n )}>\r\n {content}\r\n </div>\r\n ),\r\n [padding, parentContainer]\r\n )\r\n\r\n const renderContent = () => {\r\n switch (layout) {\r\n case \"split\": {\r\n const { splitRatio = \"three-fourth\", reverse = false } = props as SplitLayoutProps\r\n if (!Array.isArray(children) || children.length !== 2) {\r\n return (\r\n <div className=\"flex items-center justify-center h-full text-red-500\">\r\n Error: AppContent with layout=\"split\" requires exactly 2 children\r\n </div>\r\n )\r\n }\r\n\r\n const [leftClass, rightClass] = splitRatioClasses[splitRatio]\r\n const [firstChild, secondChild] = reverse ? [children[1], children[0]] : [children[0], children[1]]\r\n const [firstClass, secondClass] = reverse ? [rightClass, leftClass] : [leftClass, rightClass]\r\n\r\n return (\r\n <div className=\"flex h-full gap-2\">\r\n <div className={cn(firstClass, \"overflow-auto\")}>\r\n {contentWrapper(firstChild)}\r\n </div>\r\n <div className={cn(secondClass, \"overflow-auto\")}>\r\n {contentWrapper(secondChild)}\r\n </div>\r\n </div>\r\n )\r\n }\r\n\r\n case \"with-sheet\": {\r\n const {\r\n sheetContent,\r\n sheetWidth = \"four-fifth\",\r\n sheetSide = \"right\",\r\n sheetMode = \"container\",\r\n sheetTrigger,\r\n sheetClassName,\r\n isSheetOpen,\r\n onSheetOpenChange,\r\n showSheetOverlay = true,\r\n disableOverlay = true,\r\n } = props as WithSheetLayoutProps\r\n\r\n const isControlled = isSheetOpen !== undefined\r\n const sheetOpen = isControlled ? isSheetOpen : internalSheetOpen\r\n const setSheetOpen = isControlled ? onSheetOpenChange : setInternalSheetOpen\r\n\r\n if (sheetMode === \"container\") {\r\n const sheetClasses = getContainerSheetClasses(sheetSide, sheetWidth)\r\n\r\n return (\r\n <div className={cn(\r\n \"flex relative flex-1 overflow-hidden\",\r\n sheetOpen && disableOverlay && [\"left\", \"right\"].includes(sheetSide)\r\n )}>\r\n {/* Main content area */}\r\n <div className={cn(\r\n \"h-full overflow-auto transition-all duration-500\",\r\n sheetOpen && disableOverlay && [\"left\", \"right\"].includes(sheetSide)\r\n ? sheetClasses.contentPushClass\r\n : \"w-full\",\r\n sheetOpen && disableOverlay && \"overflow-y-auto overflow-x-hidden\"\r\n )}>\r\n {sheetTrigger && (\r\n <div onClick={() => setSheetOpen?.(!sheetOpen)}>\r\n {sheetTrigger}\r\n </div>\r\n )}\r\n <div className={cn(\"h-full\", !parentContainer && paddingClasses[padding])}>\r\n {children}\r\n </div>\r\n </div>\r\n\r\n {/* Container sheet */}\r\n <div\r\n className={cn(\r\n sheetClasses.container,\r\n \"transition-all duration-500 ease-in-out\",\r\n sheetOpen && disableOverlay && [\"left\", \"right\"].includes(sheetSide)\r\n ? cn(sheetClasses.sheetPushClass, \"overflow-y-auto\")\r\n : sheetOpen\r\n ? sheetClasses.transformOpen\r\n : cn(sheetClasses.transform, \"hidden\"),\r\n \"overflow-y-auto\"\r\n )}\r\n >\r\n <div className={cn(sheetClasses.content, sheetClassName, \"h-full\")}>\r\n {sheetContent}\r\n </div>\r\n </div>\r\n\r\n {/* Container overlay */}\r\n {sheetOpen && showSheetOverlay && !disableOverlay && (\r\n <div\r\n className={cn(\r\n \"absolute inset-0 bg-secondary/20 z-40\",\r\n \"transition-opacity duration-500 ease-in-out\",\r\n \"opacity-0\",\r\n sheetOpen ? \"opacity-100\" : \"opacity-0\"\r\n )}\r\n onClick={() => setSheetOpen?.(false)}\r\n />\r\n )}\r\n </div>\r\n )\r\n }\r\n\r\n return (\r\n <Sheet open={sheetOpen} onOpenChange={setSheetOpen}>\r\n {sheetTrigger && <SheetTrigger asChild>{sheetTrigger}</SheetTrigger>}\r\n <SheetPortal>\r\n {showSheetOverlay && <SheetOverlay className=\"fixed inset-0 bg-secondary/50 z-50\" />}\r\n <SheetContent\r\n side={sheetSide}\r\n className={cn(\r\n \"fixed bg-background border\",\r\n \"transition-all duration-500 ease-in-out\",\r\n splitRatioClasses[sheetWidth][1],\r\n sheetClassName\r\n )}\r\n >\r\n {sheetContent}\r\n </SheetContent>\r\n </SheetPortal>\r\n </Sheet>\r\n )\r\n }\r\n\r\n default:\r\n return contentWrapper(children)\r\n }\r\n }\r\n\r\n return (\r\n <AppContentContext.Provider value={true}>\r\n <div className={cn(\r\n baseClasses,\r\n variantClasses[variant],\r\n paddingClasses[padding],\r\n isNested && \"flex-1\",\r\n parentContainer && \"h-full\",\r\n !parentContainer && \"rounded-2xl\",\r\n className\r\n )}>\r\n {header && (\r\n <div\r\n className={cn(\r\n \"border-b\",\r\n headerClassName,\r\n variant === \"card\" && !parentContainer && \"rounded-t-2xl\",\r\n variant === \"border\" && \"border-b-2\",\r\n paddingClasses[padding]\r\n )}\r\n >\r\n {header}\r\n </div>\r\n )}\r\n {renderContent()}\r\n {footer && (\r\n <div\r\n className={cn(\r\n \"border-t\",\r\n footerClassName,\r\n variant === \"card\" && !parentContainer && \"rounded-b-2xl\",\r\n variant === \"border\" && \"border-t-2\",\r\n paddingClasses[padding]\r\n )}\r\n >\r\n {footer}\r\n </div>\r\n )}\r\n </div>\r\n </AppContentContext.Provider>\r\n )\r\n}\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n// import { cn } from \"@/lib/utils\"\r\n// import React, { useState, createContext, useContext } from \"react\"\r\n// import {\r\n// Sheet,\r\n// SheetTrigger,\r\n// SheetContent,\r\n// SheetPortal,\r\n// SheetOverlay\r\n// } from \"@/components/ui/sheet\"\r\n\r\n// const AppContentContext = createContext(false)\r\n\r\n// type SplitRatio = \"one-half\" | \"one-third\" | \"two-third\" | \"one-fourth\" | \"three-fourth\" | \"one-fifth\" | \"four-fifth\"\r\n\r\n// type SheetSide = \"right\" | \"bottom\" | \"left\" | \"top\"\r\n// type SheetMode = \"fullscreen\" | \"container\"\r\n\r\n// type BaseAppContentProps = {\r\n// children: React.ReactNode\r\n// className?: string\r\n// variant?: \"default\" | \"card\" | \"border\" | \"transparent\"\r\n// header?: React.ReactNode\r\n// footer?: React.ReactNode\r\n// headerClassName?: string\r\n// footerClassName?: string\r\n// parentContainer?: boolean\r\n// padding?: \"none\" | \"tight\" | \"default\" | \"loose\"\r\n// }\r\n\r\n// type FullLayoutProps = BaseAppContentProps & {\r\n// layout?: \"full\"\r\n// }\r\n\r\n// type SplitLayoutProps = BaseAppContentProps & {\r\n// layout: \"split\"\r\n// splitRatio?: SplitRatio\r\n// reverse?: boolean\r\n// }\r\n\r\n// type SheetOptions = {\r\n// sheetContent: React.ReactNode\r\n// sheetWidth?: SplitRatio\r\n// sheetSide?: SheetSide\r\n// sheetMode?: SheetMode\r\n// onSheetClose?: () => void\r\n// showSheetOverlay?: boolean\r\n// sheetClassName?: string\r\n// isSheetOpen?: boolean\r\n// onSheetOpenChange?: (open: boolean) => void\r\n// sheetTrigger?: React.ReactNode\r\n// disableOverlay?: boolean\r\n// }\r\n\r\n// type WithSheetLayoutProps = BaseAppContentProps & {\r\n// layout: \"with-sheet\"\r\n// } & SheetOptions\r\n\r\n// type AppContentProps = FullLayoutProps | SplitLayoutProps | WithSheetLayoutProps\r\n\r\n// const splitRatioClasses: Record<SplitRatio, [string, string]> = {\r\n// \"one-half\": [\"w-1/2\", \"w-1/2\"],\r\n// \"one-third\": [\"w-1/3\", \"w-2/3\"],\r\n// \"two-third\": [\"w-2/3\", \"w-1/3\"],\r\n// \"one-fourth\": [\"w-1/4\", \"w-3/4\"],\r\n// \"three-fourth\": [\"w-3/4\", \"w-1/4\"],\r\n// \"one-fifth\": [\"w-1/5\", \"w-4/5\"],\r\n// \"four-fifth\": [\"w-4/5\", \"w-1/5\"],\r\n// }\r\n\r\n// const paddingClasses = {\r\n// none: \"p-0\",\r\n// tight: \"p-2\",\r\n// default: \"p-4\",\r\n// loose: \"p-6\",\r\n// }\r\n\r\n// const getContainerSheetClasses = (side: SheetSide, width: SplitRatio) => {\r\n// const [contentWidth, sheetWidth] = splitRatioClasses[width]\r\n\r\n// return {\r\n// container: \"inset-y-0 z-50\",\r\n// content: cn(\"h-full bg-background\", side === \"right\" ? \"border-l\" : \"border-r\"),\r\n// transform: side === \"right\" ? \"translate-x-full\" : \"-translate-x-full\",\r\n// transformOpen: \"translate-x-0\",\r\n// contentPushClass: side === \"right\" ? contentWidth : sheetWidth,\r\n// sheetPushClass: side === \"right\" ? sheetWidth : contentWidth,\r\n// }\r\n// }\r\n\r\n// const baseClasses = \"flex flex-col overflow-hidden rounded-2xl relative\"\r\n// const variantClasses = {\r\n// default: \"bg-background\",\r\n// card: \"bg-background shadow-sm border\",\r\n// border: \"bg-background border-2\",\r\n// transparent: \"bg-transparent\",\r\n// }\r\n\r\n// export const AppContent = (props: AppContentProps) => {\r\n// const {\r\n// children,\r\n// className,\r\n// variant = \"default\",\r\n// layout = \"full\",\r\n// header,\r\n// footer,\r\n// headerClassName,\r\n// footerClassName,\r\n// parentContainer = false,\r\n// padding = parentContainer ? \"none\" : \"tight\",\r\n// } = props\r\n\r\n// const isNested = useContext(AppContentContext)\r\n// const [internalSheetOpen, setInternalSheetOpen] = useState(false)\r\n\r\n// const contentWrapper = React.useCallback(\r\n// (content: React.ReactNode) => (\r\n// <div className={cn(\r\n// \"flex-1 overflow-auto h-full\",\r\n// !parentContainer && paddingClasses[padding]\r\n// )}>\r\n// {content}\r\n// </div>\r\n// ),\r\n// [padding, parentContainer]\r\n// )\r\n\r\n// const renderContent = () => {\r\n// switch (layout) {\r\n// case \"split\": {\r\n// const { splitRatio = \"three-fourth\", reverse = false } = props as SplitLayoutProps\r\n// if (!Array.isArray(children) || children.length !== 2) {\r\n// return (\r\n// <div className=\"flex items-center justify-center h-full text-red-500\">\r\n// Error: AppContent with layout=\"split\" requires exactly 2 children\r\n// </div>\r\n// )\r\n// }\r\n\r\n// const [leftClass, rightClass] = splitRatioClasses[splitRatio]\r\n// const [firstChild, secondChild] = reverse ? [children[1], children[0]] : [children[0], children[1]]\r\n// const [firstClass, secondClass] = reverse ? [rightClass, leftClass] : [leftClass, rightClass]\r\n\r\n// return (\r\n// <div className=\"flex h-full gap-4\">\r\n// <div className={cn(firstClass, \"overflow-auto\")}>\r\n// {contentWrapper(firstChild)}\r\n// </div>\r\n// <div className={cn(secondClass, \"overflow-auto\")}>\r\n// {contentWrapper(secondChild)}\r\n// </div>\r\n// </div>\r\n// )\r\n// }\r\n\r\n// case \"with-sheet\": {\r\n// const {\r\n// sheetContent,\r\n// sheetWidth = \"four-fifth\",\r\n// sheetSide = \"right\",\r\n// sheetMode = \"container\",\r\n// sheetTrigger,\r\n// sheetClassName,\r\n// isSheetOpen,\r\n// onSheetOpenChange,\r\n// showSheetOverlay = true,\r\n// disableOverlay = false,\r\n// } = props as WithSheetLayoutProps\r\n\r\n// const isControlled = isSheetOpen !== undefined\r\n// const sheetOpen = isControlled ? isSheetOpen : internalSheetOpen\r\n// const setSheetOpen = isControlled ? onSheetOpenChange : setInternalSheetOpen\r\n\r\n// if (sheetMode === \"container\") {\r\n// const sheetClasses = getContainerSheetClasses(sheetSide, sheetWidth)\r\n\r\n// return (\r\n// <div className={cn(\r\n// \"flex relative flex-1 overflow-hidden\",\r\n// sheetOpen && disableOverlay && [\"left\", \"right\"].includes(sheetSide)\r\n// )}>\r\n// {/* Main content area */}\r\n// <div className={cn(\r\n// \"h-full overflow-auto transition-all duration-500\",\r\n// sheetOpen && disableOverlay && [\"left\", \"right\"].includes(sheetSide)\r\n// ? sheetClasses.contentPushClass\r\n// : \"w-full\",\r\n// sheetOpen && disableOverlay && \"overflow-y-auto overflow-x-hidden\"\r\n// )}>\r\n// {sheetTrigger && (\r\n// <div onClick={() => setSheetOpen?.(!sheetOpen)}>\r\n// {sheetTrigger}\r\n// </div>\r\n// )}\r\n// <div className={cn(!parentContainer && paddingClasses[padding])}>\r\n// {children}\r\n// </div>\r\n// </div>\r\n\r\n// {/* Container sheet */}\r\n// <div\r\n// className={cn(\r\n// sheetClasses.container,\r\n// \"transition-all duration-500 ease-out\",\r\n// sheetOpen && disableOverlay && [\"left\", \"right\"].includes(sheetSide)\r\n// ? cn(sheetClasses.sheetPushClass, \"overflow-y-auto\")\r\n// : sheetOpen\r\n// ? sheetClasses.transformOpen\r\n// : cn(sheetClasses.transform, \"hidden\"),\r\n// \"overflow-y-auto\"\r\n// )}\r\n// >\r\n// <div className={cn(sheetClasses.content, sheetClassName, \"h-full\")}>\r\n// {sheetContent}\r\n// </div>\r\n// </div>\r\n\r\n// {/* Container overlay */}\r\n// {sheetOpen && showSheetOverlay && !disableOverlay && (\r\n// <div\r\n// className={cn(\"absolute inset-0 bg-secondary/20 z-40\")}\r\n// onClick={() => setSheetOpen?.(false)}\r\n// />\r\n// )}\r\n// </div>\r\n// )\r\n// }\r\n\r\n// return (\r\n// <Sheet open={sheetOpen} onOpenChange={setSheetOpen}>\r\n// {sheetTrigger && <SheetTrigger asChild>{sheetTrigger}</SheetTrigger>}\r\n// <SheetPortal>\r\n// {showSheetOverlay && <SheetOverlay className=\"fixed inset-0 bg-secondary/50 z-50\" />}\r\n// <SheetContent\r\n// side={sheetSide}\r\n// className={cn(\r\n// \"fixed bg-background border\",\r\n// splitRatioClasses[sheetWidth][1],\r\n// sheetClassName\r\n// )}\r\n// >\r\n// {sheetContent}\r\n// </SheetContent>\r\n// </SheetPortal>\r\n// </Sheet>\r\n// )\r\n// }\r\n\r\n// default:\r\n// return contentWrapper(children)\r\n// }\r\n// }\r\n\r\n// return (\r\n// <AppContentContext.Provider value={true}>\r\n// <div className={cn(\r\n// baseClasses,\r\n// variantClasses[variant],\r\n// paddingClasses[padding],\r\n// isNested && \"flex-1\",\r\n// parentContainer && \"h-full\",\r\n// !parentContainer && \"rounded-2xl\",\r\n// className\r\n// )}>\r\n// {header && (\r\n// <div\r\n// className={cn(\r\n// \"border-b\",\r\n// headerClassName,\r\n// variant === \"card\" && !parentContainer && \"rounded-t-2xl\",\r\n// variant === \"border\" && \"border-b-2\",\r\n// paddingClasses[padding]\r\n// )}\r\n// >\r\n// {header}\r\n// </div>\r\n// )}\r\n// {renderContent()}\r\n// {footer && (\r\n// <div\r\n// className={cn(\r\n// \"border-t\",\r\n// footerClassName,\r\n// variant === \"card\" && !parentContainer && \"rounded-b-2xl\",\r\n// variant === \"border\" && \"border-t-2\",\r\n// paddingClasses[padding]\r\n// )}\r\n// >\r\n// {footer}\r\n// </div>\r\n// )}\r\n// </div>\r\n// </AppContentContext.Provider>\r\n// )\r\n// }\r\n\r\n","import * as React from \"react\"\nimport { Dialog as SheetPrimitive } from \"radix-ui\"\nimport { XIcon } from \"lucide-react\"\nimport { cn } from \"../../lib/utils.js\"\n\nfunction Sheet({ ...props }: React.ComponentProps<typeof SheetPrimitive.Root>) {\n return <SheetPrimitive.Root data-slot=\"sheet\" {...props} />\n}\n\nfunction SheetTrigger({\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Trigger>) {\n return <SheetPrimitive.Trigger data-slot=\"sheet-trigger\" {...props} />\n}\n\nfunction SheetClose({\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Close>) {\n return <SheetPrimitive.Close data-slot=\"sheet-close\" {...props} />\n}\n\nfunction SheetPortal({\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Portal>) {\n return <SheetPrimitive.Portal data-slot=\"sheet-portal\" {...props} />\n}\n\nfunction SheetOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Overlay>) {\n return (\n <SheetPrimitive.Overlay\n data-slot=\"sheet-overlay\"\n className={cn(\n \"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SheetContent({\n className,\n children,\n side = \"right\",\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Content> & {\n side?: \"top\" | \"right\" | \"bottom\" | \"left\"\n}) {\n return (\n <SheetPortal>\n <SheetOverlay />\n <SheetPrimitive.Content\n data-slot=\"sheet-content\"\n className={cn(\n \"bg-background data-[state=open]:animate-in data-[state=closed]:animate-out fixed z-50 flex flex-col gap-4 shadow-lg transition ease-in-out data-[state=closed]:duration-300 data-[state=open]:duration-500\",\n side === \"right\" &&\n \"data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right inset-y-0 right-0 h-full w-3/4 border-l sm:max-w-sm\",\n side === \"left\" &&\n \"data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left inset-y-0 left-0 h-full w-3/4 border-r sm:max-w-sm\",\n side === \"top\" &&\n \"data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top inset-x-0 top-0 h-auto border-b\",\n side === \"bottom\" &&\n \"data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom inset-x-0 bottom-0 h-auto border-t\",\n className\n )}\n {...props}\n >\n {children}\n <SheetPrimitive.Close className=\"ring-offset-background focus:ring-ring data-[state=open]:bg-secondary absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none\">\n <XIcon className=\"size-4\" />\n <span className=\"sr-only\">Close</span>\n </SheetPrimitive.Close>\n </SheetPrimitive.Content>\n </SheetPortal>\n )\n}\n\nfunction SheetHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sheet-header\"\n className={cn(\"flex flex-col gap-1.5 p-4\", className)}\n {...props}\n />\n )\n}\n\nfunction SheetFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sheet-footer\"\n className={cn(\"mt-auto flex flex-col gap-2 p-4\", className)}\n {...props}\n />\n )\n}\n\nfunction SheetTitle({\n className,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Title>) {\n return (\n <SheetPrimitive.Title\n data-slot=\"sheet-title\"\n className={cn(\"text-foreground font-semibold\", className)}\n {...props}\n />\n )\n}\n\nfunction SheetDescription({\n className,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Description>) {\n return (\n <SheetPrimitive.Description\n data-slot=\"sheet-description\"\n className={cn(\"text-muted-foreground text-sm\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Sheet,\n SheetTrigger,\n SheetClose,\n SheetOverlay,\n SheetPortal,\n SheetContent,\n SheetHeader,\n SheetFooter,\n SheetTitle,\n SheetDescription,\n}\n"],"mappings":"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","names":["clsx","twMerge","cn","inputs","React","useState","createContext","useContext","SheetPrimitive","XIcon","jsx","jsxs","Sheet","props","SheetPrimitive","SheetTrigger","SheetPortal","props","jsx","SheetPrimitive","SheetOverlay","className","cn","SheetContent","children","side","jsxs","XIcon","jsx","jsxs","AppContentContext","createContext","splitRatioClasses","paddingClasses","getContainerSheetClasses","side","width","contentWidth","sheetWidth","cn","baseClasses","variantClasses","AppContent","props","children","className","variant","layout","header","footer","headerClassName","footerClassName","parentContainer","padding","isNested","useContext","internalSheetOpen","setInternalSheetOpen","useState","contentWrapper","React","content","renderContent","splitRatio","reverse","leftClass","rightClass","firstChild","secondChild","firstClass","secondClass","sheetContent","sheetSide","sheetMode","sheetTrigger","sheetClassName","isSheetOpen","onSheetOpenChange","showSheetOverlay","disableOverlay","isControlled","sheetOpen","setSheetOpen","sheetClasses","Sheet","SheetTrigger","SheetPortal","SheetOverlay","SheetContent"]}
@@ -0,0 +1,3 @@
1
+ "use client"
2
+ "use strict";var a=Object.defineProperty;var m=Object.getOwnPropertyDescriptor;var g=Object.getOwnPropertyNames;var C=Object.prototype.hasOwnProperty;var u=(t,e)=>{for(var o in e)a(t,o,{get:e[o],enumerable:!0})},d=(t,e,o,l)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of g(e))!C.call(t,n)&&n!==o&&a(t,n,{get:()=>e[n],enumerable:!(l=m(e,n))||l.enumerable});return t};var y=t=>d(a({},"__esModule",{value:!0}),t);var x={};u(x,{AppFooter:()=>h});module.exports=y(x);var f=require("clsx"),p=require("tailwind-merge");function r(...t){return(0,p.twMerge)((0,f.clsx)(t))}var s=require("react/jsx-runtime"),h=({className:t,columns:e=[],meta:o={title:""}})=>{let l={content:(0,s.jsx)("div",{className:"flex items-center gap-4 p-2",children:o.secondaryActions}),align:"right",width:"fill"},n=[...e.filter(i=>i!==void 0),l];return(0,s.jsx)("div",{className:r("flex items-center w-full gap-4",t),children:n.map((i,c)=>(0,s.jsx)("div",{className:r("flex items-center h-full",i.className,{"justify-start":i.align==="left","justify-center":i.align==="center","justify-end":i.align==="right","flex-1":i.width==="fill"}),children:i.content},c))})};0&&(module.exports={AppFooter});
3
+ //# sourceMappingURL=app-footer.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/layouts/app-footer.tsx","../../../src/lib/utils.ts"],"sourcesContent":["import { AppMeta, useAppMeta } from '../../context/index.js';\r\nimport { cn } from '../../lib/utils.js';\r\n\r\ntype ColumnConfig = {\r\n content: React.ReactNode;\r\n align?: 'left' | 'center' | 'right';\r\n width?: 'auto' | 'fill';\r\n className?: string;\r\n};\r\n\r\nexport type AppFooterProps = {\r\n className?: string;\r\n columns?: [ColumnConfig?, ColumnConfig?, ColumnConfig?];\r\n meta?: AppMeta;\r\n};\r\n\r\nexport const AppFooter = ({\r\n className,\r\n columns = [],\r\n meta = { title: \"\" },\r\n}: AppFooterProps) => {\r\n // const { meta } = useAppMeta();\r\n\r\n // const renderPagination = () => {\r\n // if (!meta.pagination) return null;\r\n\r\n // return (\r\n // <div className=\"flex items-center gap-2\">\r\n // <Button\r\n // variant=\"outline\"\r\n // size=\"sm\"\r\n // disabled={!meta.pagination.hasPrevious}\r\n // onClick={meta.pagination.onPrevious}\r\n // >\r\n // <ChevronLeft className=\"h-4 w-4 mr-1\" />\r\n // {meta.pagination.previousLabel || 'Previous'}\r\n // </Button>\r\n // <Button\r\n // variant=\"outline\"\r\n // size=\"sm\"\r\n // disabled={!meta.pagination.hasNext}\r\n // onClick={meta.pagination.onNext}\r\n // >\r\n // {meta.pagination.nextLabel || 'Next'}\r\n // <ChevronRight className=\"h-4 w-4 ml-1\" />\r\n // </Button>\r\n // </div>\r\n // );\r\n // };\r\n\r\n const actionsColumn: ColumnConfig = {\r\n content: (\r\n <div className=\"flex items-center gap-4 p-2\">\r\n {/* {renderPagination()} */}\r\n {meta.secondaryActions}\r\n </div>\r\n ),\r\n align: 'right',\r\n width: 'fill',\r\n };\r\n\r\n const allColumns: ColumnConfig[] = [\r\n ...columns.filter((col): col is ColumnConfig => col !== undefined),\r\n actionsColumn\r\n ];\r\n\r\n return (\r\n <div className={cn('flex items-center w-full gap-4', className)}>\r\n {allColumns.map((column, index) => (\r\n <div\r\n key={index}\r\n className={cn(\r\n 'flex items-center h-full',\r\n column.className,\r\n {\r\n 'justify-start': column.align === 'left',\r\n 'justify-center': column.align === 'center',\r\n 'justify-end': column.align === 'right',\r\n 'flex-1': column.width === 'fill',\r\n }\r\n )}\r\n >\r\n {column.content}\r\n </div>\r\n ))}\r\n </div>\r\n );\r\n};","import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}"],"mappings":";yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,eAAAE,IAAA,eAAAC,EAAAH,GCAA,IAAAI,EAAsC,gBACtCC,EAAwB,0BAEjB,SAASC,KAAMC,EAAsB,CAC1C,SAAO,cAAQ,QAAKA,CAAM,CAAC,CAC7B,CD+CM,IAAAC,EAAA,6BApCOC,EAAY,CAAC,CACxB,UAAAC,EACA,QAAAC,EAAU,CAAC,EACX,KAAAC,EAAO,CAAE,MAAO,EAAG,CACrB,IAAsB,CA8BpB,IAAMC,EAA8B,CAClC,WACE,OAAC,OAAI,UAAU,8BAEZ,SAAAD,EAAK,iBACR,EAEF,MAAO,QACP,MAAO,MACT,EAEME,EAA6B,CACjC,GAAGH,EAAQ,OAAQI,GAA6BA,IAAQ,MAAS,EACjEF,CACF,EAEA,SACE,OAAC,OAAI,UAAWG,EAAG,iCAAkCN,CAAS,EAC3D,SAAAI,EAAW,IAAI,CAACG,EAAQC,OACvB,OAAC,OAEC,UAAWF,EACT,2BACAC,EAAO,UACP,CACE,gBAAiBA,EAAO,QAAU,OAClC,iBAAkBA,EAAO,QAAU,SACnC,cAAeA,EAAO,QAAU,QAChC,SAAUA,EAAO,QAAU,MAC7B,CACF,EAEC,SAAAA,EAAO,SAZHC,CAaP,CACD,EACH,CAEJ","names":["app_footer_exports","__export","AppFooter","__toCommonJS","import_clsx","import_tailwind_merge","cn","inputs","import_jsx_runtime","AppFooter","className","columns","meta","actionsColumn","allColumns","col","cn","column","index"]}
@@ -0,0 +1,18 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { AppMeta } from '../../context/app-meta/types.cjs';
3
+ import 'react';
4
+
5
+ type ColumnConfig = {
6
+ content: React.ReactNode;
7
+ align?: 'left' | 'center' | 'right';
8
+ width?: 'auto' | 'fill';
9
+ className?: string;
10
+ };
11
+ type AppFooterProps = {
12
+ className?: string;
13
+ columns?: [ColumnConfig?, ColumnConfig?, ColumnConfig?];
14
+ meta?: AppMeta;
15
+ };
16
+ declare const AppFooter: ({ className, columns, meta, }: AppFooterProps) => react_jsx_runtime.JSX.Element;
17
+
18
+ export { AppFooter, type AppFooterProps };
@@ -0,0 +1,18 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { AppMeta } from '../../context/app-meta/types.js';
3
+ import 'react';
4
+
5
+ type ColumnConfig = {
6
+ content: React.ReactNode;
7
+ align?: 'left' | 'center' | 'right';
8
+ width?: 'auto' | 'fill';
9
+ className?: string;
10
+ };
11
+ type AppFooterProps = {
12
+ className?: string;
13
+ columns?: [ColumnConfig?, ColumnConfig?, ColumnConfig?];
14
+ meta?: AppMeta;
15
+ };
16
+ declare const AppFooter: ({ className, columns, meta, }: AppFooterProps) => react_jsx_runtime.JSX.Element;
17
+
18
+ export { AppFooter, type AppFooterProps };
@@ -0,0 +1,3 @@
1
+ "use client"
2
+ import{clsx as f}from"clsx";import{twMerge as p}from"tailwind-merge";function i(...e){return p(f(e))}import{jsx as n}from"react/jsx-runtime";var u=({className:e,columns:o=[],meta:l={title:""}})=>{let s={content:n("div",{className:"flex items-center gap-4 p-2",children:l.secondaryActions}),align:"right",width:"fill"},a=[...o.filter(t=>t!==void 0),s];return n("div",{className:i("flex items-center w-full gap-4",e),children:a.map((t,r)=>n("div",{className:i("flex items-center h-full",t.className,{"justify-start":t.align==="left","justify-center":t.align==="center","justify-end":t.align==="right","flex-1":t.width==="fill"}),children:t.content},r))})};export{u as AppFooter};
3
+ //# sourceMappingURL=app-footer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/lib/utils.ts","../../../src/components/layouts/app-footer.tsx"],"sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}","import { AppMeta, useAppMeta } from '../../context/index.js';\r\nimport { cn } from '../../lib/utils.js';\r\n\r\ntype ColumnConfig = {\r\n content: React.ReactNode;\r\n align?: 'left' | 'center' | 'right';\r\n width?: 'auto' | 'fill';\r\n className?: string;\r\n};\r\n\r\nexport type AppFooterProps = {\r\n className?: string;\r\n columns?: [ColumnConfig?, ColumnConfig?, ColumnConfig?];\r\n meta?: AppMeta;\r\n};\r\n\r\nexport const AppFooter = ({\r\n className,\r\n columns = [],\r\n meta = { title: \"\" },\r\n}: AppFooterProps) => {\r\n // const { meta } = useAppMeta();\r\n\r\n // const renderPagination = () => {\r\n // if (!meta.pagination) return null;\r\n\r\n // return (\r\n // <div className=\"flex items-center gap-2\">\r\n // <Button\r\n // variant=\"outline\"\r\n // size=\"sm\"\r\n // disabled={!meta.pagination.hasPrevious}\r\n // onClick={meta.pagination.onPrevious}\r\n // >\r\n // <ChevronLeft className=\"h-4 w-4 mr-1\" />\r\n // {meta.pagination.previousLabel || 'Previous'}\r\n // </Button>\r\n // <Button\r\n // variant=\"outline\"\r\n // size=\"sm\"\r\n // disabled={!meta.pagination.hasNext}\r\n // onClick={meta.pagination.onNext}\r\n // >\r\n // {meta.pagination.nextLabel || 'Next'}\r\n // <ChevronRight className=\"h-4 w-4 ml-1\" />\r\n // </Button>\r\n // </div>\r\n // );\r\n // };\r\n\r\n const actionsColumn: ColumnConfig = {\r\n content: (\r\n <div className=\"flex items-center gap-4 p-2\">\r\n {/* {renderPagination()} */}\r\n {meta.secondaryActions}\r\n </div>\r\n ),\r\n align: 'right',\r\n width: 'fill',\r\n };\r\n\r\n const allColumns: ColumnConfig[] = [\r\n ...columns.filter((col): col is ColumnConfig => col !== undefined),\r\n actionsColumn\r\n ];\r\n\r\n return (\r\n <div className={cn('flex items-center w-full gap-4', className)}>\r\n {allColumns.map((column, index) => (\r\n <div\r\n key={index}\r\n className={cn(\r\n 'flex items-center h-full',\r\n column.className,\r\n {\r\n 'justify-start': column.align === 'left',\r\n 'justify-center': column.align === 'center',\r\n 'justify-end': column.align === 'right',\r\n 'flex-1': column.width === 'fill',\r\n }\r\n )}\r\n >\r\n {column.content}\r\n </div>\r\n ))}\r\n </div>\r\n );\r\n};"],"mappings":";AAAA,OAAS,QAAAA,MAA6B,OACtC,OAAS,WAAAC,MAAe,iBAEjB,SAASC,KAAMC,EAAsB,CAC1C,OAAOF,EAAQD,EAAKG,CAAM,CAAC,CAC7B,CC+CM,cAAAC,MAAA,oBApCC,IAAMC,EAAY,CAAC,CACxB,UAAAC,EACA,QAAAC,EAAU,CAAC,EACX,KAAAC,EAAO,CAAE,MAAO,EAAG,CACrB,IAAsB,CA8BpB,IAAMC,EAA8B,CAClC,QACEL,EAAC,OAAI,UAAU,8BAEZ,SAAAI,EAAK,iBACR,EAEF,MAAO,QACP,MAAO,MACT,EAEME,EAA6B,CACjC,GAAGH,EAAQ,OAAQI,GAA6BA,IAAQ,MAAS,EACjEF,CACF,EAEA,OACEL,EAAC,OAAI,UAAWQ,EAAG,iCAAkCN,CAAS,EAC3D,SAAAI,EAAW,IAAI,CAACG,EAAQC,IACvBV,EAAC,OAEC,UAAWQ,EACT,2BACAC,EAAO,UACP,CACE,gBAAiBA,EAAO,QAAU,OAClC,iBAAkBA,EAAO,QAAU,SACnC,cAAeA,EAAO,QAAU,QAChC,SAAUA,EAAO,QAAU,MAC7B,CACF,EAEC,SAAAA,EAAO,SAZHC,CAaP,CACD,EACH,CAEJ","names":["clsx","twMerge","cn","inputs","jsx","AppFooter","className","columns","meta","actionsColumn","allColumns","col","cn","column","index"]}
@@ -0,0 +1,3 @@
1
+ "use client"
2
+ "use strict";var u=Object.defineProperty;var N=Object.getOwnPropertyDescriptor;var w=Object.getOwnPropertyNames;var A=Object.prototype.hasOwnProperty;var z=(r,o)=>{for(var a in o)u(r,a,{get:o[a],enumerable:!0})},B=(r,o,a,e)=>{if(o&&typeof o=="object"||typeof o=="function")for(let s of w(o))!A.call(r,s)&&s!==a&&u(r,s,{get:()=>o[s],enumerable:!(e=N(o,s))||e.enumerable});return r};var P=r=>B(u({},"__esModule",{value:!0}),r);var R={};z(R,{AppHeader:()=>M});module.exports=P(R);var c=require("lucide-react");var f=require("clsx"),g=require("tailwind-merge");function l(...r){return(0,g.twMerge)((0,f.clsx)(r))}var m=require("radix-ui"),v=require("class-variance-authority");var b=require("react/jsx-runtime"),V=(0,v.cva)("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",{variants:{variant:{default:"bg-primary text-primary-foreground shadow-xs hover:bg-primary/90",destructive:"bg-destructive text-white shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60",outline:"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50",secondary:"bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80",ghost:"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-9 px-4 py-2 has-[>svg]:px-3",sm:"h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5",lg:"h-10 rounded-md px-6 has-[>svg]:px-4",icon:"size-9"}},defaultVariants:{variant:"default",size:"default"}});function p({className:r,variant:o,size:a,asChild:e=!1,...s}){let d=e?m.Slot.Slot:"button";return(0,b.jsx)(d,{"data-slot":"button",className:l(V({variant:o,size:a,className:r}),"transition-none"),...s})}var h=require("react-router"),t=require("react/jsx-runtime"),M=({className:r,columns:o=[],showBackButton:a=!0,meta:e={title:""}})=>{let s=()=>{if(!e.backAction||!a)return null;let n={variant:"secondary",size:"icon",className:"hover:bg-primary/20 inline-flex"};return e.backAction.href?(0,t.jsx)(h.NavLink,{to:e.backAction.href,children:(0,t.jsxs)(p,{...n,children:[(0,t.jsx)(c.ArrowLeftIcon,{className:"size-6"}),e.backAction.content]})}):(0,t.jsxs)(p,{...n,onClick:e.backAction.onClick,children:[(0,t.jsx)(c.ArrowLeftIcon,{className:"size-6"}),e.backAction.content]})},d=()=>!e.metadata||e.metadata.length===0?null:(0,t.jsx)("div",{className:"flex gap-4",children:e.metadata.map((n,i)=>n.value&&(0,t.jsxs)("div",{className:"text-sm",children:[(0,t.jsxs)("span",{className:"text-muted-foreground",children:[n.label," "]}),(0,t.jsx)("span",{children:n.value})]},i))}),x=()=>e.status?(0,t.jsx)("span",{className:l("inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium",{success:"bg-green-100 text-green-800",warning:"bg-yellow-100 text-yellow-800",critical:"bg-red-100 text-red-800",info:"bg-blue-100 text-blue-800",default:"bg-gray-100 text-gray-800"}[e.status.color]),children:e.status.content}):null,y={content:(0,t.jsxs)("div",{className:"flex gap-2 items-center",children:[s(),(0,t.jsxs)("div",{className:"flex flex-col gap-2 w-max",children:[(0,t.jsx)("h1",{className:"text-2xl font-bold tracking-tight",children:e.title}),x(),e.description&&(0,t.jsx)("p",{className:"text-muted-foreground",children:e.description}),d(),e.breadcrumbs&&e.breadcrumbs.length>0&&(0,t.jsx)("div",{className:"flex items-center text-sm text-muted-foreground",children:e.breadcrumbs.map((n,i)=>(0,t.jsxs)("div",{className:"flex items-center",children:[n.href?(0,t.jsx)("span",{className:"hover:text-primary hover:underline",children:n.label}):(0,t.jsx)("span",{children:n.label}),i<e.breadcrumbs.length-1&&(0,t.jsx)(c.ChevronRight,{className:"mx-2 h-4 w-4"})]},i))})]})]}),align:"left",width:"fill"},C={content:e.primaryActions,align:"right",width:"auto"},k=[y,...o.filter(n=>n!==void 0),C];return(0,t.jsx)("div",{className:l("flex items-center w-full gap-4 p-2",r),children:k.map((n,i)=>(0,t.jsx)("div",{className:l("flex items-center h-full",n.className,{"justify-start":n.align==="left","justify-center":n.align==="center","justify-end":n.align==="right","flex-1":n.width==="fill"}),children:n.content},i))})};0&&(module.exports={AppHeader});
3
+ //# sourceMappingURL=app-header.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/layouts/app-header.tsx","../../../src/lib/utils.ts","../../../src/components/ui/button.tsx"],"sourcesContent":["import { AppMeta, useAppMeta } from '../../context/index.js';\r\nimport { ArrowLeftIcon, ChevronRight } from 'lucide-react';\r\nimport { cn } from '../../lib/utils.js';\r\nimport { Button } from '../../components/ui/button.jsx';\r\nimport type { ReactNode } from 'react';\r\nimport { NavLink } from 'react-router';\r\n\r\ntype ColumnConfig = {\r\n content: ReactNode;\r\n align?: 'left' | 'center' | 'right';\r\n width?: 'auto' | 'fill';\r\n className?: string;\r\n};\r\n\r\nexport type AppHeaderProps = {\r\n className?: string;\r\n columns?: [ColumnConfig?, ColumnConfig?, ColumnConfig?];\r\n showBackButton?: boolean;\r\n meta?: AppMeta;\r\n};\r\n\r\nexport const AppHeader = ({\r\n className,\r\n columns = [],\r\n showBackButton = true,\r\n meta = { title: \"\" },\r\n}: AppHeaderProps) => {\r\n // const { meta } = useAppMeta();\r\n\r\n const renderBackAction = () => {\r\n if (!meta.backAction || !showBackButton) return null;\r\n\r\n const buttonProps = {\r\n variant: 'secondary',\r\n size: 'icon',\r\n className: 'hover:bg-primary/20 inline-flex',\r\n } as const;\r\n\r\n if (meta.backAction.href) {\r\n return (\r\n <NavLink to={meta.backAction.href}>\r\n <Button {...buttonProps}>\r\n <ArrowLeftIcon className=\"size-6\" />\r\n {meta.backAction.content}\r\n </Button>\r\n </NavLink>\r\n );\r\n }\r\n\r\n return (\r\n <Button {...buttonProps} onClick={meta.backAction.onClick}>\r\n <ArrowLeftIcon className=\"size-6\" />\r\n {meta.backAction.content}\r\n </Button>\r\n );\r\n };\r\n\r\n const renderMetadata = () => {\r\n if (!meta.metadata || meta.metadata.length === 0) return null;\r\n\r\n return (\r\n <div className=\"flex gap-4\">\r\n {meta.metadata.map((item, index) => (\r\n item.value && (\r\n <div key={index} className=\"text-sm\">\r\n <span className=\"text-muted-foreground\">{item.label} </span>\r\n <span>{item.value}</span>\r\n </div>\r\n )\r\n ))}\r\n </div>\r\n );\r\n };\r\n\r\n const renderStatus = () => {\r\n if (!meta.status) return null;\r\n\r\n const colorClasses = {\r\n success: 'bg-green-100 text-green-800',\r\n warning: 'bg-yellow-100 text-yellow-800',\r\n critical: 'bg-red-100 text-red-800',\r\n info: 'bg-blue-100 text-blue-800',\r\n default: 'bg-gray-100 text-gray-800',\r\n };\r\n\r\n return (\r\n <span className={cn(\r\n 'inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium',\r\n colorClasses[meta.status.color as keyof typeof colorClasses]\r\n )}>\r\n {meta.status.content}\r\n </span>\r\n );\r\n };\r\n\r\n const reservedColumn: ColumnConfig = {\r\n content: (\r\n <div className=\"flex gap-2 items-center\">\r\n {renderBackAction()}\r\n <div className=\"flex flex-col gap-2 w-max\">\r\n <h1 className=\"text-2xl font-bold tracking-tight\">{meta.title}</h1>\r\n {renderStatus()}\r\n {meta.description && (\r\n <p className=\"text-muted-foreground\">{meta.description}</p>\r\n )}\r\n {renderMetadata()}\r\n {meta.breadcrumbs && meta.breadcrumbs.length > 0 && (\r\n <div className=\"flex items-center text-sm text-muted-foreground\">\r\n {meta.breadcrumbs.map((crumb, index) => (\r\n <div key={index} className=\"flex items-center\">\r\n {crumb.href ? (\r\n <span className=\"hover:text-primary hover:underline\">\r\n {crumb.label}\r\n </span>\r\n ) : (\r\n <span>{crumb.label}</span>\r\n )}\r\n {index < meta.breadcrumbs!.length - 1 && (\r\n <ChevronRight className=\"mx-2 h-4 w-4\" />\r\n )}\r\n </div>\r\n ))}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n ),\r\n align: 'left',\r\n width: 'fill',\r\n };\r\n\r\n const actionsColumn: ColumnConfig = {\r\n content: meta.primaryActions,\r\n align: 'right',\r\n width: 'auto',\r\n };\r\n\r\n const allColumns: ColumnConfig[] = [\r\n reservedColumn,\r\n ...columns.filter((col): col is ColumnConfig => col !== undefined),\r\n actionsColumn\r\n ];\r\n\r\n return (\r\n <div className={cn('flex items-center w-full gap-4 p-2', className)}>\r\n {allColumns.map((column, index) => (\r\n <div\r\n key={index}\r\n className={cn(\r\n 'flex items-center h-full',\r\n column.className,\r\n {\r\n 'justify-start': column.align === 'left',\r\n 'justify-center': column.align === 'center',\r\n 'justify-end': column.align === 'right',\r\n 'flex-1': column.width === 'fill',\r\n }\r\n )}\r\n >\r\n {column.content}\r\n </div>\r\n ))}\r\n </div>\r\n );\r\n};","import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}","import * as React from \"react\"\nimport { Slot as SlotPrimitive } from \"radix-ui\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../../lib/utils.js\"\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n {\n variants: {\n variant: {\n default:\n \"bg-primary text-primary-foreground shadow-xs hover:bg-primary/90\",\n destructive:\n \"bg-destructive text-white shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60\",\n outline:\n \"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50\",\n secondary:\n \"bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80\",\n ghost:\n \"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n default: \"h-9 px-4 py-2 has-[>svg]:px-3\",\n sm: \"h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5\",\n lg: \"h-10 rounded-md px-6 has-[>svg]:px-4\",\n icon: \"size-9\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nfunction Button({\n className,\n variant,\n size,\n asChild = false,\n ...props\n}: React.ComponentProps<\"button\"> &\n VariantProps<typeof buttonVariants> & {\n asChild?: boolean\n }) {\n const Comp = asChild ? SlotPrimitive.Slot : \"button\"\n\n return (\n <Comp\n data-slot=\"button\"\n className={cn(buttonVariants({ variant, size, className }), \"transition-none\")}\n {...props}\n />\n )\n}\n\nexport { Button, buttonVariants }\n"],"mappings":"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","names":["app_header_exports","__export","AppHeader","__toCommonJS","import_lucide_react","import_clsx","import_tailwind_merge","cn","inputs","import_radix_ui","import_class_variance_authority","import_jsx_runtime","buttonVariants","Button","className","variant","size","asChild","props","Comp","SlotPrimitive","cn","import_react_router","import_jsx_runtime","AppHeader","className","columns","showBackButton","meta","renderBackAction","buttonProps","Button","renderMetadata","item","index","renderStatus","cn","reservedColumn","crumb","actionsColumn","allColumns","col","column"]}
@@ -0,0 +1,19 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { ReactNode } from 'react';
3
+ import { AppMeta } from '../../context/app-meta/types.cjs';
4
+
5
+ type ColumnConfig = {
6
+ content: ReactNode;
7
+ align?: 'left' | 'center' | 'right';
8
+ width?: 'auto' | 'fill';
9
+ className?: string;
10
+ };
11
+ type AppHeaderProps = {
12
+ className?: string;
13
+ columns?: [ColumnConfig?, ColumnConfig?, ColumnConfig?];
14
+ showBackButton?: boolean;
15
+ meta?: AppMeta;
16
+ };
17
+ declare const AppHeader: ({ className, columns, showBackButton, meta, }: AppHeaderProps) => react_jsx_runtime.JSX.Element;
18
+
19
+ export { AppHeader, type AppHeaderProps };