@egose/shadcn-theme-ng 0.0.26 → 0.0.28

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 (333) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +107 -2
  3. package/accordion/fesm2022/accordion.mjs +42 -37
  4. package/accordion/fesm2022/accordion.mjs.map +1 -1
  5. package/accordion/package.json +25 -0
  6. package/accordion/{index.d.ts → types/accordion.d.ts} +1 -1
  7. package/alert/fesm2022/alert.mjs +32 -27
  8. package/alert/fesm2022/alert.mjs.map +1 -1
  9. package/alert/package.json +25 -0
  10. package/alert-dialog/README.md +11 -0
  11. package/alert-dialog/fesm2022/alert-dialog.mjs +287 -0
  12. package/alert-dialog/fesm2022/alert-dialog.mjs.map +1 -0
  13. package/alert-dialog/package.json +25 -0
  14. package/alert-dialog/types/alert-dialog.d.ts +90 -0
  15. package/aspect-ratio/README.md +11 -0
  16. package/aspect-ratio/fesm2022/aspect-ratio.mjs +62 -0
  17. package/aspect-ratio/fesm2022/aspect-ratio.mjs.map +1 -0
  18. package/aspect-ratio/package.json +25 -0
  19. package/aspect-ratio/types/aspect-ratio.d.ts +21 -0
  20. package/autocomplete/fesm2022/autocomplete.mjs +323 -457
  21. package/autocomplete/fesm2022/autocomplete.mjs.map +1 -1
  22. package/autocomplete/package.json +24 -0
  23. package/autocomplete/types/autocomplete.d.ts +96 -0
  24. package/avatar/README.md +11 -0
  25. package/avatar/fesm2022/avatar.mjs +178 -0
  26. package/avatar/fesm2022/avatar.mjs.map +1 -0
  27. package/avatar/package.json +25 -0
  28. package/avatar/types/avatar.d.ts +50 -0
  29. package/badge/fesm2022/badge.mjs +16 -10
  30. package/badge/fesm2022/badge.mjs.map +1 -1
  31. package/badge/package.json +25 -0
  32. package/basic-alert/fesm2022/basic-alert.mjs +12 -8
  33. package/basic-alert/fesm2022/basic-alert.mjs.map +1 -1
  34. package/basic-alert/package.json +24 -0
  35. package/breadcrumb/README.md +11 -0
  36. package/breadcrumb/fesm2022/breadcrumb.mjs +224 -0
  37. package/breadcrumb/fesm2022/breadcrumb.mjs.map +1 -0
  38. package/breadcrumb/package.json +25 -0
  39. package/breadcrumb/types/breadcrumb.d.ts +57 -0
  40. package/button/fesm2022/button.mjs +100 -26
  41. package/button/fesm2022/button.mjs.map +1 -1
  42. package/button/package.json +25 -0
  43. package/button/{index.d.ts → types/button.d.ts} +30 -9
  44. package/button-group/README.md +11 -0
  45. package/button-group/fesm2022/button-group.mjs +102 -0
  46. package/button-group/fesm2022/button-group.mjs.map +1 -0
  47. package/button-group/package.json +25 -0
  48. package/button-group/types/button-group.d.ts +30 -0
  49. package/calendar/fesm2022/calendar.mjs +868 -546
  50. package/calendar/fesm2022/calendar.mjs.map +1 -1
  51. package/calendar/package.json +24 -0
  52. package/calendar/types/calendar.d.ts +94 -0
  53. package/card/README.md +11 -0
  54. package/card/fesm2022/card.mjs +169 -0
  55. package/card/fesm2022/card.mjs.map +1 -0
  56. package/card/package.json +25 -0
  57. package/card/types/card.d.ts +54 -0
  58. package/carousel/README.md +11 -0
  59. package/carousel/fesm2022/carousel.mjs +309 -0
  60. package/carousel/fesm2022/carousel.mjs.map +1 -0
  61. package/carousel/package.json +25 -0
  62. package/carousel/types/carousel.d.ts +84 -0
  63. package/checkbox/fesm2022/checkbox.mjs +25 -20
  64. package/checkbox/fesm2022/checkbox.mjs.map +1 -1
  65. package/checkbox/package.json +24 -0
  66. package/collapsible/README.md +11 -0
  67. package/collapsible/fesm2022/collapsible.mjs +77 -0
  68. package/collapsible/fesm2022/collapsible.mjs.map +1 -0
  69. package/collapsible/package.json +25 -0
  70. package/collapsible/types/collapsible.d.ts +27 -0
  71. package/combobox/README.md +11 -0
  72. package/combobox/fesm2022/combobox.mjs +683 -0
  73. package/combobox/fesm2022/combobox.mjs.map +1 -0
  74. package/combobox/package.json +25 -0
  75. package/combobox/types/combobox.d.ts +151 -0
  76. package/command/README.md +11 -0
  77. package/command/fesm2022/command.mjs +361 -0
  78. package/command/fesm2022/command.mjs.map +1 -0
  79. package/command/package.json +25 -0
  80. package/command/types/command.d.ts +89 -0
  81. package/confirmation-dialog/fesm2022/confirmation-dialog.mjs +19 -8
  82. package/confirmation-dialog/fesm2022/confirmation-dialog.mjs.map +1 -1
  83. package/confirmation-dialog/package.json +24 -0
  84. package/context-menu/README.md +11 -0
  85. package/context-menu/fesm2022/context-menu.mjs +89 -0
  86. package/context-menu/fesm2022/context-menu.mjs.map +1 -0
  87. package/context-menu/package.json +25 -0
  88. package/context-menu/types/context-menu.d.ts +34 -0
  89. package/date-picker/fesm2022/date-picker.mjs +1262 -307
  90. package/date-picker/fesm2022/date-picker.mjs.map +1 -1
  91. package/date-picker/package.json +24 -0
  92. package/date-picker/types/date-picker.d.ts +551 -0
  93. package/dialog/fesm2022/dialog.mjs +137 -108
  94. package/dialog/fesm2022/dialog.mjs.map +1 -1
  95. package/dialog/package.json +24 -0
  96. package/dialog/types/dialog.d.ts +95 -0
  97. package/drawer/README.md +11 -0
  98. package/drawer/fesm2022/drawer.mjs +271 -0
  99. package/drawer/fesm2022/drawer.mjs.map +1 -0
  100. package/drawer/package.json +25 -0
  101. package/drawer/types/drawer.d.ts +76 -0
  102. package/dropdown-menu/README.md +11 -0
  103. package/dropdown-menu/fesm2022/dropdown-menu.mjs +542 -0
  104. package/dropdown-menu/fesm2022/dropdown-menu.mjs.map +1 -0
  105. package/dropdown-menu/package.json +25 -0
  106. package/dropdown-menu/types/dropdown-menu.d.ts +176 -0
  107. package/empty/README.md +11 -0
  108. package/empty/fesm2022/empty.mjs +151 -0
  109. package/empty/fesm2022/empty.mjs.map +1 -0
  110. package/empty/package.json +25 -0
  111. package/empty/types/empty.d.ts +54 -0
  112. package/field/README.md +11 -0
  113. package/field/fesm2022/field.mjs +367 -0
  114. package/field/fesm2022/field.mjs.map +1 -0
  115. package/field/package.json +25 -0
  116. package/field/types/field.d.ts +107 -0
  117. package/form-checkbox/fesm2022/form-checkbox.mjs +39 -22
  118. package/form-checkbox/fesm2022/form-checkbox.mjs.map +1 -1
  119. package/form-checkbox/package.json +24 -0
  120. package/form-date-picker/fesm2022/form-date-picker.mjs +58 -51
  121. package/form-date-picker/fesm2022/form-date-picker.mjs.map +1 -1
  122. package/form-date-picker/package.json +24 -0
  123. package/form-field/fesm2022/form-field.mjs +39 -27
  124. package/form-field/fesm2022/form-field.mjs.map +1 -1
  125. package/form-field/package.json +25 -0
  126. package/form-field/{index.d.ts → types/form-field.d.ts} +4 -3
  127. package/form-field-simple/fesm2022/form-field-simple.mjs +15 -10
  128. package/form-field-simple/fesm2022/form-field-simple.mjs.map +1 -1
  129. package/form-field-simple/package.json +24 -0
  130. package/form-searchable-multiselect/fesm2022/form-searchable-multiselect.mjs +44 -25
  131. package/form-searchable-multiselect/fesm2022/form-searchable-multiselect.mjs.map +1 -1
  132. package/form-searchable-multiselect/package.json +24 -0
  133. package/form-select/fesm2022/form-select.mjs +132 -71
  134. package/form-select/fesm2022/form-select.mjs.map +1 -1
  135. package/form-select/package.json +24 -0
  136. package/form-text-input/fesm2022/form-text-input.mjs +68 -39
  137. package/form-text-input/fesm2022/form-text-input.mjs.map +1 -1
  138. package/form-text-input/package.json +24 -0
  139. package/form-textarea/fesm2022/form-textarea.mjs +54 -30
  140. package/form-textarea/fesm2022/form-textarea.mjs.map +1 -1
  141. package/form-textarea/package.json +24 -0
  142. package/hover-card/README.md +11 -0
  143. package/hover-card/fesm2022/hover-card.mjs +123 -0
  144. package/hover-card/fesm2022/hover-card.mjs.map +1 -0
  145. package/hover-card/package.json +25 -0
  146. package/hover-card/types/hover-card.d.ts +36 -0
  147. package/icon/fesm2022/icon.mjs +12 -10
  148. package/icon/fesm2022/icon.mjs.map +1 -1
  149. package/icon/package.json +25 -0
  150. package/input/fesm2022/input.mjs +20 -70
  151. package/input/fesm2022/input.mjs.map +1 -1
  152. package/input/package.json +25 -0
  153. package/input/types/input.d.ts +18 -0
  154. package/input-group/README.md +11 -0
  155. package/input-group/fesm2022/input-group.mjs +199 -0
  156. package/input-group/fesm2022/input-group.mjs.map +1 -0
  157. package/input-group/package.json +25 -0
  158. package/input-group/types/input-group.d.ts +52 -0
  159. package/input-otp/README.md +11 -0
  160. package/input-otp/fesm2022/input-otp.mjs +141 -0
  161. package/input-otp/fesm2022/input-otp.mjs.map +1 -0
  162. package/input-otp/package.json +25 -0
  163. package/input-otp/types/input-otp.d.ts +43 -0
  164. package/item/README.md +11 -0
  165. package/item/fesm2022/item.mjs +278 -0
  166. package/item/fesm2022/item.mjs.map +1 -0
  167. package/item/package.json +25 -0
  168. package/item/types/item.d.ts +101 -0
  169. package/kbd/README.md +11 -0
  170. package/kbd/fesm2022/kbd.mjs +61 -0
  171. package/kbd/fesm2022/kbd.mjs.map +1 -0
  172. package/kbd/package.json +25 -0
  173. package/kbd/types/kbd.d.ts +22 -0
  174. package/label/fesm2022/label.mjs +11 -10
  175. package/label/fesm2022/label.mjs.map +1 -1
  176. package/label/package.json +25 -0
  177. package/layout-simple/fesm2022/layout-simple.mjs +438 -325
  178. package/layout-simple/fesm2022/layout-simple.mjs.map +1 -1
  179. package/layout-simple/package.json +24 -0
  180. package/layout-simple/{index.d.ts → types/layout-simple.d.ts} +28 -17
  181. package/menubar/README.md +11 -0
  182. package/menubar/fesm2022/menubar.mjs +108 -0
  183. package/menubar/fesm2022/menubar.mjs.map +1 -0
  184. package/menubar/package.json +25 -0
  185. package/menubar/types/menubar.d.ts +40 -0
  186. package/native-select/README.md +11 -0
  187. package/native-select/fesm2022/native-select.mjs +207 -0
  188. package/native-select/fesm2022/native-select.mjs.map +1 -0
  189. package/native-select/package.json +25 -0
  190. package/native-select/types/native-select.d.ts +70 -0
  191. package/navigation-menu/README.md +11 -0
  192. package/navigation-menu/fesm2022/navigation-menu.mjs +206 -0
  193. package/navigation-menu/fesm2022/navigation-menu.mjs.map +1 -0
  194. package/navigation-menu/package.json +25 -0
  195. package/navigation-menu/types/navigation-menu.d.ts +54 -0
  196. package/package.json +223 -81
  197. package/pagination/README.md +11 -0
  198. package/pagination/fesm2022/pagination.mjs +808 -0
  199. package/pagination/fesm2022/pagination.mjs.map +1 -0
  200. package/pagination/package.json +25 -0
  201. package/pagination/types/pagination.d.ts +192 -0
  202. package/popover/fesm2022/popover.mjs +121 -27
  203. package/popover/fesm2022/popover.mjs.map +1 -1
  204. package/popover/package.json +24 -0
  205. package/popover/types/popover.d.ts +54 -0
  206. package/progress/README.md +11 -0
  207. package/progress/fesm2022/progress.mjs +77 -0
  208. package/progress/fesm2022/progress.mjs.map +1 -0
  209. package/progress/package.json +25 -0
  210. package/progress/types/progress.d.ts +27 -0
  211. package/radio-group/fesm2022/radio-group.mjs +96 -62
  212. package/radio-group/fesm2022/radio-group.mjs.map +1 -1
  213. package/radio-group/package.json +25 -0
  214. package/radio-group/{index.d.ts → types/radio-group.d.ts} +22 -14
  215. package/resizable/README.md +11 -0
  216. package/resizable/fesm2022/resizable.mjs +111 -0
  217. package/resizable/fesm2022/resizable.mjs.map +1 -0
  218. package/resizable/package.json +25 -0
  219. package/resizable/types/resizable.d.ts +32 -0
  220. package/scroll-area/README.md +11 -0
  221. package/scroll-area/fesm2022/scroll-area.mjs +51 -0
  222. package/scroll-area/fesm2022/scroll-area.mjs.map +1 -0
  223. package/scroll-area/package.json +25 -0
  224. package/scroll-area/types/scroll-area.d.ts +16 -0
  225. package/searchable-multiselect/fesm2022/searchable-multiselect.mjs +92 -88
  226. package/searchable-multiselect/fesm2022/searchable-multiselect.mjs.map +1 -1
  227. package/searchable-multiselect/package.json +24 -0
  228. package/searchable-multiselect/{index.d.ts → types/searchable-multiselect.d.ts} +13 -24
  229. package/select/fesm2022/select.mjs +371 -189
  230. package/select/fesm2022/select.mjs.map +1 -1
  231. package/select/package.json +25 -0
  232. package/select/types/select.d.ts +119 -0
  233. package/separator/fesm2022/separator.mjs +16 -14
  234. package/separator/fesm2022/separator.mjs.map +1 -1
  235. package/separator/package.json +24 -0
  236. package/separator/{index.d.ts → types/separator.d.ts} +4 -5
  237. package/sheet/fesm2022/sheet.mjs +57 -51
  238. package/sheet/fesm2022/sheet.mjs.map +1 -1
  239. package/sheet/package.json +24 -0
  240. package/sidebar/README.md +11 -0
  241. package/sidebar/fesm2022/sidebar.mjs +948 -0
  242. package/sidebar/fesm2022/sidebar.mjs.map +1 -0
  243. package/sidebar/package.json +25 -0
  244. package/sidebar/types/sidebar.d.ts +237 -0
  245. package/skeleton/README.md +11 -0
  246. package/skeleton/fesm2022/skeleton.mjs +44 -0
  247. package/skeleton/fesm2022/skeleton.mjs.map +1 -0
  248. package/skeleton/package.json +25 -0
  249. package/skeleton/types/skeleton.d.ts +16 -0
  250. package/slider/README.md +11 -0
  251. package/slider/fesm2022/slider.mjs +144 -0
  252. package/slider/fesm2022/slider.mjs.map +1 -0
  253. package/slider/package.json +25 -0
  254. package/slider/types/slider.d.ts +19 -0
  255. package/sonner/fesm2022/sonner.mjs +30 -35
  256. package/sonner/fesm2022/sonner.mjs.map +1 -1
  257. package/sonner/package.json +25 -0
  258. package/spinner/fesm2022/spinner.mjs +18 -14
  259. package/spinner/fesm2022/spinner.mjs.map +1 -1
  260. package/spinner/package.json +25 -0
  261. package/switch/fesm2022/switch.mjs +29 -26
  262. package/switch/fesm2022/switch.mjs.map +1 -1
  263. package/switch/package.json +25 -0
  264. package/table/README.md +11 -0
  265. package/table/fesm2022/table.mjs +211 -0
  266. package/table/fesm2022/table.mjs.map +1 -0
  267. package/table/package.json +25 -0
  268. package/table/types/table.d.ts +87 -0
  269. package/tabs/fesm2022/tabs.mjs +131 -103
  270. package/tabs/fesm2022/tabs.mjs.map +1 -1
  271. package/tabs/package.json +25 -0
  272. package/tabs/types/tabs.d.ts +71 -0
  273. package/textarea/README.md +11 -0
  274. package/textarea/fesm2022/textarea.mjs +47 -0
  275. package/textarea/fesm2022/textarea.mjs.map +1 -0
  276. package/textarea/package.json +25 -0
  277. package/textarea/types/textarea.d.ts +18 -0
  278. package/toggle/README.md +11 -0
  279. package/toggle/fesm2022/toggle.mjs +78 -0
  280. package/toggle/fesm2022/toggle.mjs.map +1 -0
  281. package/toggle/package.json +25 -0
  282. package/toggle/types/toggle.d.ts +27 -0
  283. package/toggle-group/README.md +11 -0
  284. package/toggle-group/fesm2022/toggle-group.mjs +117 -0
  285. package/toggle-group/fesm2022/toggle-group.mjs.map +1 -0
  286. package/toggle-group/package.json +25 -0
  287. package/toggle-group/types/toggle-group.d.ts +39 -0
  288. package/tooltip/fesm2022/tooltip.mjs +33 -54
  289. package/tooltip/fesm2022/tooltip.mjs.map +1 -1
  290. package/tooltip/package.json +25 -0
  291. package/tooltip/types/tooltip.d.ts +22 -0
  292. package/typography/README.md +11 -0
  293. package/typography/fesm2022/typography.mjs +242 -0
  294. package/typography/fesm2022/typography.mjs.map +1 -0
  295. package/typography/package.json +25 -0
  296. package/typography/types/typography.d.ts +94 -0
  297. package/utils/fesm2022/utils.mjs +184 -1
  298. package/utils/fesm2022/utils.mjs.map +1 -1
  299. package/utils/package.json +25 -0
  300. package/utils/types/utils.d.ts +13 -0
  301. package/autocomplete/index.d.ts +0 -162
  302. package/calendar/index.d.ts +0 -111
  303. package/date-picker/index.d.ts +0 -227
  304. package/dialog/index.d.ts +0 -89
  305. package/exports.json +0 -1
  306. package/input/index.d.ts +0 -41
  307. package/menu/README.md +0 -64
  308. package/menu/fesm2022/menu.mjs +0 -449
  309. package/menu/fesm2022/menu.mjs.map +0 -1
  310. package/menu/index.d.ts +0 -137
  311. package/popover/index.d.ts +0 -30
  312. package/select/index.d.ts +0 -92
  313. package/tabs/index.d.ts +0 -71
  314. package/tooltip/index.d.ts +0 -21
  315. package/utils/index.d.ts +0 -5
  316. /package/alert/{index.d.ts → types/alert.d.ts} +0 -0
  317. /package/badge/{index.d.ts → types/badge.d.ts} +0 -0
  318. /package/basic-alert/{index.d.ts → types/basic-alert.d.ts} +0 -0
  319. /package/checkbox/{index.d.ts → types/checkbox.d.ts} +0 -0
  320. /package/confirmation-dialog/{index.d.ts → types/confirmation-dialog.d.ts} +0 -0
  321. /package/form-checkbox/{index.d.ts → types/form-checkbox.d.ts} +0 -0
  322. /package/form-date-picker/{index.d.ts → types/form-date-picker.d.ts} +0 -0
  323. /package/form-field-simple/{index.d.ts → types/form-field-simple.d.ts} +0 -0
  324. /package/form-searchable-multiselect/{index.d.ts → types/form-searchable-multiselect.d.ts} +0 -0
  325. /package/form-select/{index.d.ts → types/form-select.d.ts} +0 -0
  326. /package/form-text-input/{index.d.ts → types/form-text-input.d.ts} +0 -0
  327. /package/form-textarea/{index.d.ts → types/form-textarea.d.ts} +0 -0
  328. /package/icon/{index.d.ts → types/icon.d.ts} +0 -0
  329. /package/label/{index.d.ts → types/label.d.ts} +0 -0
  330. /package/sheet/{index.d.ts → types/sheet.d.ts} +0 -0
  331. /package/sonner/{index.d.ts → types/sonner.d.ts} +0 -0
  332. /package/spinner/{index.d.ts → types/spinner.d.ts} +0 -0
  333. /package/switch/{index.d.ts → types/switch.d.ts} +0 -0
@@ -1,23 +1,21 @@
1
1
  import * as i0 from '@angular/core';
2
- import { input, Component, viewChild, output, inject, signal, resource, ChangeDetectionStrategy, effect, computed } from '@angular/core';
2
+ import { input, Component, signal, computed, output, ChangeDetectionStrategy, viewChild, effect } from '@angular/core';
3
3
  import { RouterLink, RouterModule } from '@angular/router';
4
4
  import * as i1$2 from '@angular/cdk/layout';
5
5
  import { Breakpoints } from '@angular/cdk/layout';
6
6
  import { NgIcon, provideIcons } from '@ng-icons/core';
7
- import { lucideUser, lucideMenu } from '@ng-icons/lucide';
7
+ import { lucideUser, lucideSearch, lucideMenu } from '@ng-icons/lucide';
8
8
  import { hlm } from '@egose/shadcn-theme-ng/utils';
9
9
  import * as i4 from '@egose/shadcn-theme-ng/button';
10
10
  import { HlmButton, HlmButtonImports } from '@egose/shadcn-theme-ng/button';
11
- import { HlmMenu, HlmMenuItem, HlmMenuLabel, HlmMenuSeparator, HlmMenuGroup } from '@egose/shadcn-theme-ng/menu';
12
11
  import * as i1 from '@angular/common';
13
12
  import { CommonModule } from '@angular/common';
14
- import { BrnMenuTrigger } from '@spartan-ng/brain/menu';
15
- import * as i2 from '@angular/forms';
16
- import { FormBuilder, Validators, ReactiveFormsModule } from '@angular/forms';
17
- import * as i1$1 from '@egose/shadcn-theme-ng/autocomplete';
18
- import { provideHlmAutocompleteConfig, HlmAutocompleteImports } from '@egose/shadcn-theme-ng/autocomplete';
19
- import { HlmSpinner } from '@egose/shadcn-theme-ng/spinner';
20
- import * as i2$1 from '@spartan-ng/brain/sheet';
13
+ import { HlmDropdownMenu, HlmDropdownMenuTrigger, HlmDropdownMenuItem, HlmDropdownMenuLabel, HlmDropdownMenuSeparator, HlmDropdownMenuGroup } from '@egose/shadcn-theme-ng/dropdown-menu';
14
+ import * as i1$1 from '@angular/forms';
15
+ import { FormsModule } from '@angular/forms';
16
+ import { HlmPopover, HlmPopoverTrigger, HlmPopoverContent } from '@egose/shadcn-theme-ng/popover';
17
+ import { HlmInput } from '@egose/shadcn-theme-ng/input';
18
+ import * as i2 from '@spartan-ng/brain/sheet';
21
19
  import { BrnSheet, BrnSheetImports } from '@spartan-ng/brain/sheet';
22
20
  import { HlmLabelImports } from '@egose/shadcn-theme-ng/label';
23
21
  import * as i3 from '@egose/shadcn-theme-ng/sheet';
@@ -26,10 +24,12 @@ import { HlmSheetImports } from '@egose/shadcn-theme-ng/sheet';
26
24
  class EgLayoutSimpleUserMenu {
27
25
  hlm = hlm;
28
26
  lucideUser = lucideUser;
29
- menus = input([], ...(ngDevMode ? [{ debugName: "menus" }] : []));
30
- menuTrigger = input(...(ngDevMode ? [undefined, { debugName: "menuTrigger" }] : []));
31
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: EgLayoutSimpleUserMenu, deps: [], target: i0.ɵɵFactoryTarget.Component });
32
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.1", type: EgLayoutSimpleUserMenu, isStandalone: true, selector: "eg-layout-simple-user-menu", inputs: { menus: { classPropertyName: "menus", publicName: "menus", isSignal: true, isRequired: false, transformFunction: null }, menuTrigger: { classPropertyName: "menuTrigger", publicName: "menuTrigger", isSignal: true, isRequired: false, transformFunction: null } }, providers: [
27
+ menus = input([], /* @ts-ignore */
28
+ ...(ngDevMode ? [{ debugName: "menus" }] : /* istanbul ignore next */ []));
29
+ menuTrigger = input(/* @ts-ignore */
30
+ ...(ngDevMode ? [undefined, { debugName: "menuTrigger" }] : /* istanbul ignore next */ []));
31
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: EgLayoutSimpleUserMenu, deps: [], target: i0.ɵɵFactoryTarget.Component });
32
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: EgLayoutSimpleUserMenu, isStandalone: true, selector: "eg-layout-simple-user-menu", inputs: { menus: { classPropertyName: "menus", publicName: "menus", isSignal: true, isRequired: false, transformFunction: null }, menuTrigger: { classPropertyName: "menuTrigger", publicName: "menuTrigger", isSignal: true, isRequired: false, transformFunction: null } }, providers: [
33
33
  provideIcons({
34
34
  lucideUser,
35
35
  }),
@@ -42,87 +42,98 @@ class EgLayoutSimpleUserMenu {
42
42
 
43
43
  <div class="flex w-full items-center justify-center">
44
44
  @if (_menuTrigger) {
45
- <div [brnMenuTriggerFor]="menu"><ng-container *ngTemplateOutlet="_menuTrigger"></ng-container></div>
45
+ <button
46
+ type="button"
47
+ [hlmDropdownMenuTrigger]="menu"
48
+ class="cursor-pointer bg-transparent border-0 p-0"
49
+ >
50
+ <ng-container *ngTemplateOutlet="_menuTrigger" />
51
+ </button>
46
52
  } @else {
47
53
  <button
48
54
  hlmButton
49
55
  variant="primary"
50
56
  size="icon"
51
- align="end"
52
- [brnMenuTriggerFor]="menu"
57
+ [hlmDropdownMenuTrigger]="menu"
53
58
  [icon]="iconTemplate"
54
59
  class="rounded-full border border-gray-400"
55
60
  ></button>
56
61
  }
57
- </div>
58
62
 
59
- <ng-template #menu>
60
- <hlm-menu class="w-56">
61
- @for (section of menus(); track section) {
62
- @if (section.label) {
63
- <hlm-menu-label>{{ section.label }}</hlm-menu-label>
64
- }
65
- @if (section.items?.length) {
66
- <hlm-menu-group>
67
- @for (item of section.items; track item) {
68
- @if (item.link) {
69
- <a
70
- hlmMenuItem
71
- [routerLink]="item.link"
72
- [class]="hlm('cursor-pointer no-underline', item.class)"
73
- >
74
- @if (item.icon) {
75
- <ng-icon
76
- [svg]="item.icon"
77
- size="1rem"
78
- [class]="
79
- hlm('[_svg]:text-[inherit]! [_svg]:bg-[inherit]! cursor-pointer mr-2', item.class)
80
- "
81
- />
82
- }
83
- <span>{{ item.label }}</span>
84
- </a>
85
- } @else {
86
- <button
87
- hlmMenuItem
88
- (click)="item.action?.()"
89
- [class]="hlm('cursor-pointer no-underline', item.class)"
90
- >
91
- @if (item.icon) {
92
- <ng-icon
93
- [svg]="item.icon"
94
- size="1rem"
95
- [class]="
96
- hlm('[_svg]:text-[inherit]! [_svg]:bg-[inherit]! cursor-pointer mr-2', item.class)
97
- "
98
- />
99
- }
100
- <span>{{ item.label }}</span>
101
- </button>
63
+ <ng-template #menu>
64
+ <div hlmDropdownMenu class="w-56">
65
+ @for (section of menus(); track section) {
66
+ @if (section.label) {
67
+ <div hlmDropdownMenuLabel>{{ section.label }}</div>
68
+ }
69
+ @if (section.items?.length) {
70
+ <div hlmDropdownMenuGroup>
71
+ @for (item of section.items; track item) {
72
+ @if (item.link) {
73
+ <a
74
+ hlmDropdownMenuItem
75
+ [routerLink]="item.link"
76
+ [class]="hlm('cursor-pointer no-underline', item.class)"
77
+ >
78
+ @if (item.icon) {
79
+ <ng-icon
80
+ [svg]="item.icon"
81
+ size="1rem"
82
+ [class]="
83
+ hlm(
84
+ '[_svg]:text-[inherit]! [_svg]:bg-[inherit]! cursor-pointer mr-2',
85
+ item.class
86
+ )
87
+ "
88
+ />
89
+ }
90
+ <span>{{ item.label }}</span>
91
+ </a>
92
+ } @else {
93
+ <button
94
+ hlmDropdownMenuItem
95
+ (click)="item.action?.()"
96
+ [class]="hlm('cursor-pointer no-underline', item.class)"
97
+ >
98
+ @if (item.icon) {
99
+ <ng-icon
100
+ [svg]="item.icon"
101
+ size="1rem"
102
+ [class]="
103
+ hlm(
104
+ '[_svg]:text-[inherit]! [_svg]:bg-[inherit]! cursor-pointer mr-2',
105
+ item.class
106
+ )
107
+ "
108
+ />
109
+ }
110
+ <span>{{ item.label }}</span>
111
+ </button>
112
+ }
102
113
  }
103
- }
104
- </hlm-menu-group>
105
- }
106
- @if (section.separator) {
107
- <hlm-menu-separator />
114
+ </div>
115
+ }
116
+ @if (section.separator) {
117
+ <div hlmDropdownMenuSeparator></div>
118
+ }
108
119
  }
109
- }
110
- </hlm-menu>
111
- </ng-template>
112
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: BrnMenuTrigger, selector: "[brnMenuTriggerFor]", inputs: ["align"] }, { kind: "component", type: HlmMenu, selector: "hlm-menu", inputs: ["class", "variant"] }, { kind: "directive", type: HlmMenuItem, selector: "[hlmMenuItem]", inputs: ["variant", "inset", "class"] }, { kind: "component", type: HlmMenuLabel, selector: "hlm-menu-label", inputs: ["inset", "class"] }, { kind: "component", type: HlmMenuSeparator, selector: "hlm-menu-separator", inputs: ["class"] }, { kind: "component", type: HlmMenuGroup, selector: "hlm-menu-group" }, { kind: "component", type: HlmButton, selector: "button[hlmButton], a[hlmButton]", inputs: ["variant", "size", "appearance", "loading", "icon", "iconPosition", "class", "spinnerUserClass", "disabled", "type"] }, { kind: "component", type: NgIcon, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }] });
120
+ </div>
121
+ </ng-template>
122
+ </div>
123
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: HlmDropdownMenu, selector: "[hlmDropdownMenu],hlm-dropdown-menu", inputs: ["sideOffset"] }, { kind: "directive", type: HlmDropdownMenuTrigger, selector: "[hlmDropdownMenuTrigger]", inputs: ["align", "side"] }, { kind: "directive", type: HlmDropdownMenuItem, selector: "[hlmDropdownMenuItem],hlm-dropdown-menu-item", inputs: ["disabled", "variant", "inset"] }, { kind: "directive", type: HlmDropdownMenuLabel, selector: "[hlmDropdownMenuLabel],hlm-dropdown-menu-label", inputs: ["inset"] }, { kind: "directive", type: HlmDropdownMenuSeparator, selector: "[hlmDropdownMenuSeparator],hlm-dropdown-menu-separator" }, { kind: "directive", type: HlmDropdownMenuGroup, selector: "[hlmDropdownMenuGroup],hlm-dropdown-menu-group" }, { kind: "component", type: HlmButton, selector: "button[hlmButton], a[hlmButton]", inputs: ["variant", "size", "appearance", "loading", "icon", "iconPosition", "class", "spinnerUserClass", "disabled", "type"] }, { kind: "component", type: NgIcon, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "browserUrl", "routerLink"] }] });
113
124
  }
114
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: EgLayoutSimpleUserMenu, decorators: [{
125
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: EgLayoutSimpleUserMenu, decorators: [{
115
126
  type: Component,
116
127
  args: [{
117
128
  selector: 'eg-layout-simple-user-menu',
118
129
  imports: [
119
130
  CommonModule,
120
- BrnMenuTrigger,
121
- HlmMenu,
122
- HlmMenuItem,
123
- HlmMenuLabel,
124
- HlmMenuSeparator,
125
- HlmMenuGroup,
131
+ HlmDropdownMenu,
132
+ HlmDropdownMenuTrigger,
133
+ HlmDropdownMenuItem,
134
+ HlmDropdownMenuLabel,
135
+ HlmDropdownMenuSeparator,
136
+ HlmDropdownMenuGroup,
126
137
  HlmButton,
127
138
  NgIcon,
128
139
  RouterLink,
@@ -141,186 +152,239 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImpor
141
152
 
142
153
  <div class="flex w-full items-center justify-center">
143
154
  @if (_menuTrigger) {
144
- <div [brnMenuTriggerFor]="menu"><ng-container *ngTemplateOutlet="_menuTrigger"></ng-container></div>
155
+ <button
156
+ type="button"
157
+ [hlmDropdownMenuTrigger]="menu"
158
+ class="cursor-pointer bg-transparent border-0 p-0"
159
+ >
160
+ <ng-container *ngTemplateOutlet="_menuTrigger" />
161
+ </button>
145
162
  } @else {
146
163
  <button
147
164
  hlmButton
148
165
  variant="primary"
149
166
  size="icon"
150
- align="end"
151
- [brnMenuTriggerFor]="menu"
167
+ [hlmDropdownMenuTrigger]="menu"
152
168
  [icon]="iconTemplate"
153
169
  class="rounded-full border border-gray-400"
154
170
  ></button>
155
171
  }
156
- </div>
157
172
 
158
- <ng-template #menu>
159
- <hlm-menu class="w-56">
160
- @for (section of menus(); track section) {
161
- @if (section.label) {
162
- <hlm-menu-label>{{ section.label }}</hlm-menu-label>
163
- }
164
- @if (section.items?.length) {
165
- <hlm-menu-group>
166
- @for (item of section.items; track item) {
167
- @if (item.link) {
168
- <a
169
- hlmMenuItem
170
- [routerLink]="item.link"
171
- [class]="hlm('cursor-pointer no-underline', item.class)"
172
- >
173
- @if (item.icon) {
174
- <ng-icon
175
- [svg]="item.icon"
176
- size="1rem"
177
- [class]="
178
- hlm('[_svg]:text-[inherit]! [_svg]:bg-[inherit]! cursor-pointer mr-2', item.class)
179
- "
180
- />
181
- }
182
- <span>{{ item.label }}</span>
183
- </a>
184
- } @else {
185
- <button
186
- hlmMenuItem
187
- (click)="item.action?.()"
188
- [class]="hlm('cursor-pointer no-underline', item.class)"
189
- >
190
- @if (item.icon) {
191
- <ng-icon
192
- [svg]="item.icon"
193
- size="1rem"
194
- [class]="
195
- hlm('[_svg]:text-[inherit]! [_svg]:bg-[inherit]! cursor-pointer mr-2', item.class)
196
- "
197
- />
198
- }
199
- <span>{{ item.label }}</span>
200
- </button>
173
+ <ng-template #menu>
174
+ <div hlmDropdownMenu class="w-56">
175
+ @for (section of menus(); track section) {
176
+ @if (section.label) {
177
+ <div hlmDropdownMenuLabel>{{ section.label }}</div>
178
+ }
179
+ @if (section.items?.length) {
180
+ <div hlmDropdownMenuGroup>
181
+ @for (item of section.items; track item) {
182
+ @if (item.link) {
183
+ <a
184
+ hlmDropdownMenuItem
185
+ [routerLink]="item.link"
186
+ [class]="hlm('cursor-pointer no-underline', item.class)"
187
+ >
188
+ @if (item.icon) {
189
+ <ng-icon
190
+ [svg]="item.icon"
191
+ size="1rem"
192
+ [class]="
193
+ hlm(
194
+ '[_svg]:text-[inherit]! [_svg]:bg-[inherit]! cursor-pointer mr-2',
195
+ item.class
196
+ )
197
+ "
198
+ />
199
+ }
200
+ <span>{{ item.label }}</span>
201
+ </a>
202
+ } @else {
203
+ <button
204
+ hlmDropdownMenuItem
205
+ (click)="item.action?.()"
206
+ [class]="hlm('cursor-pointer no-underline', item.class)"
207
+ >
208
+ @if (item.icon) {
209
+ <ng-icon
210
+ [svg]="item.icon"
211
+ size="1rem"
212
+ [class]="
213
+ hlm(
214
+ '[_svg]:text-[inherit]! [_svg]:bg-[inherit]! cursor-pointer mr-2',
215
+ item.class
216
+ )
217
+ "
218
+ />
219
+ }
220
+ <span>{{ item.label }}</span>
221
+ </button>
222
+ }
201
223
  }
202
- }
203
- </hlm-menu-group>
204
- }
205
- @if (section.separator) {
206
- <hlm-menu-separator />
224
+ </div>
225
+ }
226
+ @if (section.separator) {
227
+ <div hlmDropdownMenuSeparator></div>
228
+ }
207
229
  }
208
- }
209
- </hlm-menu>
210
- </ng-template>
230
+ </div>
231
+ </ng-template>
232
+ </div>
211
233
  `,
212
234
  }]
213
- }] });
235
+ }], propDecorators: { menus: [{ type: i0.Input, args: [{ isSignal: true, alias: "menus", required: false }] }], menuTrigger: [{ type: i0.Input, args: [{ isSignal: true, alias: "menuTrigger", required: false }] }] } });
214
236
 
215
- const transformValueToSearchMap = {};
216
237
  class EgGenericAutocomplete {
217
- defaultOptionTemplate = viewChild('defaultOption', ...(ngDevMode ? [{ debugName: "defaultOptionTemplate" }] : []));
218
- controlId = input(crypto.randomUUID(), ...(ngDevMode ? [{ debugName: "controlId" }] : []));
219
- placeholderText = input('Select an option', ...(ngDevMode ? [{ debugName: "placeholderText" }] : []));
220
- emptyText = input('No options found', ...(ngDevMode ? [{ debugName: "emptyText" }] : []));
221
- optionTemplate = input(this.defaultOptionTemplate, ...(ngDevMode ? [{ debugName: "optionTemplate" }] : []));
222
- loaderFn = input(async () => [], ...(ngDevMode ? [{ debugName: "loaderFn" }] : []));
223
- transformValueToSearch = input((value) => String(value), ...(ngDevMode ? [{ debugName: "transformValueToSearch" }] : []));
238
+ placeholderText = input('Select an option', /* @ts-ignore */
239
+ ...(ngDevMode ? [{ debugName: "placeholderText" }] : /* istanbul ignore next */ []));
240
+ emptyText = input('No options found', /* @ts-ignore */
241
+ ...(ngDevMode ? [{ debugName: "emptyText" }] : /* istanbul ignore next */ []));
242
+ /** Loader function: takes search string, returns options. */
243
+ loaderFn = input(async () => [], /* @ts-ignore */
244
+ ...(ngDevMode ? [{ debugName: "loaderFn" }] : /* istanbul ignore next */ []));
245
+ transformValueToSearch = input((value) => String(value), /* @ts-ignore */
246
+ ...(ngDevMode ? [{ debugName: "transformValueToSearch" }] : /* istanbul ignore next */ []));
247
+ search = signal('', /* @ts-ignore */
248
+ ...(ngDevMode ? [{ debugName: "search" }] : /* istanbul ignore next */ []));
249
+ options = signal([], /* @ts-ignore */
250
+ ...(ngDevMode ? [{ debugName: "options" }] : /* istanbul ignore next */ []));
251
+ filtered = computed(() => {
252
+ const opts = this.options();
253
+ const search = this.search().toLowerCase();
254
+ const transform = this.transformValueToSearch() ?? ((value) => String(value));
255
+ const mapped = opts.map((o) => ({ label: transform(o), value: o, raw: o }));
256
+ if (!search)
257
+ return mapped;
258
+ return mapped.filter((o) => o.label.toLowerCase().includes(search));
259
+ }, /* @ts-ignore */
260
+ ...(ngDevMode ? [{ debugName: "filtered" }] : /* istanbul ignore next */ []));
224
261
  optionChange = output();
225
- _formBuilder = inject(FormBuilder);
226
- form = this._formBuilder.group({
227
- option: [null, Validators.required],
228
- });
229
- search = signal('', ...(ngDevMode ? [{ debugName: "search" }] : []));
230
- options = resource({
231
- defaultValue: [],
232
- params: () => ({ search: this.search(), negajjang: '1111' }),
233
- loader: async ({ params }) => {
234
- const fn = this.loaderFn();
235
- if (!fn) {
236
- return [];
237
- }
238
- return fn(params);
239
- },
240
- });
241
- ngOnInit() {
242
- transformValueToSearchMap[this.controlId()] = this.transformValueToSearch();
243
- this.form.controls['option'].valueChanges.subscribe((value) => {
244
- if (value !== null) {
245
- this.optionChange.emit(value);
246
- }
247
- });
262
+ constructor() {
263
+ // Trigger initial load
264
+ this.loadOptions();
265
+ }
266
+ async loadOptions() {
267
+ const fn = this.loaderFn();
268
+ if (!fn) {
269
+ this.options.set([]);
270
+ return;
271
+ }
272
+ try {
273
+ const params = { search: this.search() };
274
+ const result = await fn(params);
275
+ this.options.set(result ?? []);
276
+ }
277
+ catch {
278
+ this.options.set([]);
279
+ }
248
280
  }
249
- ngOnDestroy() {
250
- delete transformValueToSearchMap[this.controlId()];
281
+ select(opt) {
282
+ this.optionChange.emit(opt.value);
283
+ this.search.set('');
251
284
  }
252
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: EgGenericAutocomplete, deps: [], target: i0.ɵɵFactoryTarget.Component });
253
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "20.3.1", type: EgGenericAutocomplete, isStandalone: true, selector: "eg-generic-autocomplete", inputs: { controlId: { classPropertyName: "controlId", publicName: "controlId", isSignal: true, isRequired: false, transformFunction: null }, placeholderText: { classPropertyName: "placeholderText", publicName: "placeholderText", isSignal: true, isRequired: false, transformFunction: null }, emptyText: { classPropertyName: "emptyText", publicName: "emptyText", isSignal: true, isRequired: false, transformFunction: null }, optionTemplate: { classPropertyName: "optionTemplate", publicName: "optionTemplate", isSignal: true, isRequired: false, transformFunction: null }, loaderFn: { classPropertyName: "loaderFn", publicName: "loaderFn", isSignal: true, isRequired: false, transformFunction: null }, transformValueToSearch: { classPropertyName: "transformValueToSearch", publicName: "transformValueToSearch", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { optionChange: "optionChange" }, viewQueries: [{ propertyName: "defaultOptionTemplate", first: true, predicate: ["defaultOption"], descendants: true, isSignal: true }], ngImport: i0, template: `
254
- <form [formGroup]="form" class="space-y-8">
255
- <hlm-autocomplete
256
- [inputId]="controlId()"
257
- [filteredOptions]="options.value()"
258
- [optionTemplate]="optionTemplate()"
259
- [loading]="options.isLoading()"
260
- [(search)]="search"
261
- [searchPlaceholderText]="placeholderText()"
262
- [emptyText]="emptyText()"
263
- formControlName="option"
264
- class="bg-white"
285
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: EgGenericAutocomplete, deps: [], target: i0.ɵɵFactoryTarget.Component });
286
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: EgGenericAutocomplete, isStandalone: true, selector: "eg-generic-autocomplete", inputs: { placeholderText: { classPropertyName: "placeholderText", publicName: "placeholderText", isSignal: true, isRequired: false, transformFunction: null }, emptyText: { classPropertyName: "emptyText", publicName: "emptyText", isSignal: true, isRequired: false, transformFunction: null }, loaderFn: { classPropertyName: "loaderFn", publicName: "loaderFn", isSignal: true, isRequired: false, transformFunction: null }, transformValueToSearch: { classPropertyName: "transformValueToSearch", publicName: "transformValueToSearch", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { optionChange: "optionChange" }, providers: [provideIcons({ lucideSearch })], ngImport: i0, template: `
287
+ <hlm-popover>
288
+ <button
289
+ hlmPopoverTrigger
290
+ hlmButton
291
+ variant="secondary"
292
+ appearance="outline"
293
+ type="button"
294
+ class="w-64 justify-start gap-2 text-muted-foreground"
265
295
  >
266
- <hlm-spinner loading />
267
- </hlm-autocomplete>
268
- </form>
269
- <ng-template #defaultOption let-option>
270
- {{ option }}
271
- </ng-template>
272
- `, isInline: true, dependencies: [{ kind: "component", type: HlmSpinner, selector: "hlm-spinner", inputs: ["size", "show", "class", "spinnerClass"] }, { kind: "component", type: i1$1.HlmAutocomplete, selector: "hlm-autocomplete", inputs: ["onSelect", "class", "autocompleteListClass", "autocompleteEmptyClass", "filteredOptions", "value", "search", "transformValueToSearch", "optionTemplate", "loading", "searchPlaceholderText", "loadingText", "emptyText", "ariaLabelToggleButton", "inputId", "disabled"], outputs: ["valueChange", "searchChange"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }], viewProviders: [
273
- provideHlmAutocompleteConfig({
274
- transformValueToSearch: (params, inputId) => {
275
- const fn = transformValueToSearchMap[inputId];
276
- return fn(params);
277
- },
278
- }),
279
- ], changeDetection: i0.ChangeDetectionStrategy.OnPush });
296
+ <ng-icon name="lucideSearch" size="14px" />
297
+ <span class="truncate">{{ placeholderText() }}</span>
298
+ </button>
299
+
300
+ <hlm-popover-content class="w-64 p-2">
301
+ <input
302
+ hlmInput
303
+ [ngModel]="search()"
304
+ (ngModelChange)="search.set($event)"
305
+ [placeholder]="placeholderText()"
306
+ class="mb-2"
307
+ />
308
+ <div class="max-h-60 overflow-auto flex flex-col">
309
+ @if (filtered().length === 0) {
310
+ <span class="text-xs text-muted-foreground px-2 py-2">{{ emptyText() }}</span>
311
+ } @else {
312
+ @for (opt of filtered(); track opt.label) {
313
+ <button
314
+ type="button"
315
+ (click)="select(opt)"
316
+ class="text-left px-2 py-1.5 text-sm rounded-sm hover:bg-secondary cursor-pointer"
317
+ >
318
+ {{ opt.label }}
319
+ </button>
320
+ }
321
+ }
322
+ </div>
323
+ </hlm-popover-content>
324
+ </hlm-popover>
325
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox]):not([ngNoCva])[formControlName],textarea:not([ngNoCva])[formControlName],input:not([type=checkbox]):not([ngNoCva])[formControl],textarea:not([ngNoCva])[formControl],input:not([type=checkbox]):not([ngNoCva])[ngModel],textarea:not([ngNoCva])[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: HlmPopover, selector: "[hlmPopover],hlm-popover" }, { kind: "directive", type: HlmPopoverTrigger, selector: "button[hlmPopoverTrigger],button[hlmPopoverTriggerFor]" }, { kind: "directive", type: HlmPopoverContent, selector: "[hlmPopoverContent],hlm-popover-content" }, { kind: "directive", type: HlmInput, selector: "[hlmInput]" }, { kind: "component", type: HlmButton, selector: "button[hlmButton], a[hlmButton]", inputs: ["variant", "size", "appearance", "loading", "icon", "iconPosition", "class", "spinnerUserClass", "disabled", "type"] }, { kind: "component", type: NgIcon, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
280
326
  }
281
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: EgGenericAutocomplete, decorators: [{
327
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: EgGenericAutocomplete, decorators: [{
282
328
  type: Component,
283
329
  args: [{
284
330
  selector: 'eg-generic-autocomplete',
285
- imports: [HlmSpinner, HlmAutocompleteImports, ReactiveFormsModule],
331
+ imports: [FormsModule, HlmPopover, HlmPopoverTrigger, HlmPopoverContent, HlmInput, HlmButton, NgIcon],
332
+ providers: [provideIcons({ lucideSearch })],
286
333
  template: `
287
- <form [formGroup]="form" class="space-y-8">
288
- <hlm-autocomplete
289
- [inputId]="controlId()"
290
- [filteredOptions]="options.value()"
291
- [optionTemplate]="optionTemplate()"
292
- [loading]="options.isLoading()"
293
- [(search)]="search"
294
- [searchPlaceholderText]="placeholderText()"
295
- [emptyText]="emptyText()"
296
- formControlName="option"
297
- class="bg-white"
334
+ <hlm-popover>
335
+ <button
336
+ hlmPopoverTrigger
337
+ hlmButton
338
+ variant="secondary"
339
+ appearance="outline"
340
+ type="button"
341
+ class="w-64 justify-start gap-2 text-muted-foreground"
298
342
  >
299
- <hlm-spinner loading />
300
- </hlm-autocomplete>
301
- </form>
302
- <ng-template #defaultOption let-option>
303
- {{ option }}
304
- </ng-template>
343
+ <ng-icon name="lucideSearch" size="14px" />
344
+ <span class="truncate">{{ placeholderText() }}</span>
345
+ </button>
346
+
347
+ <hlm-popover-content class="w-64 p-2">
348
+ <input
349
+ hlmInput
350
+ [ngModel]="search()"
351
+ (ngModelChange)="search.set($event)"
352
+ [placeholder]="placeholderText()"
353
+ class="mb-2"
354
+ />
355
+ <div class="max-h-60 overflow-auto flex flex-col">
356
+ @if (filtered().length === 0) {
357
+ <span class="text-xs text-muted-foreground px-2 py-2">{{ emptyText() }}</span>
358
+ } @else {
359
+ @for (opt of filtered(); track opt.label) {
360
+ <button
361
+ type="button"
362
+ (click)="select(opt)"
363
+ class="text-left px-2 py-1.5 text-sm rounded-sm hover:bg-secondary cursor-pointer"
364
+ >
365
+ {{ opt.label }}
366
+ </button>
367
+ }
368
+ }
369
+ </div>
370
+ </hlm-popover-content>
371
+ </hlm-popover>
305
372
  `,
306
373
  changeDetection: ChangeDetectionStrategy.OnPush,
307
- viewProviders: [
308
- provideHlmAutocompleteConfig({
309
- transformValueToSearch: (params, inputId) => {
310
- const fn = transformValueToSearchMap[inputId];
311
- return fn(params);
312
- },
313
- }),
314
- ],
315
374
  }]
316
- }] });
375
+ }], ctorParameters: () => [], propDecorators: { placeholderText: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholderText", required: false }] }], emptyText: [{ type: i0.Input, args: [{ isSignal: true, alias: "emptyText", required: false }] }], loaderFn: [{ type: i0.Input, args: [{ isSignal: true, alias: "loaderFn", required: false }] }], transformValueToSearch: [{ type: i0.Input, args: [{ isSignal: true, alias: "transformValueToSearch", required: false }] }], optionChange: [{ type: i0.Output, args: ["optionChange"] }] } });
317
376
 
318
377
  class EgLayoutSimpleSidebar {
319
- viewchildSheetRef = viewChild(BrnSheet, ...(ngDevMode ? [{ debugName: "viewchildSheetRef" }] : []));
320
- side = input('left', ...(ngDevMode ? [{ debugName: "side" }] : []));
321
- title = input('', ...(ngDevMode ? [{ debugName: "title" }] : []));
322
- content = input(...(ngDevMode ? [undefined, { debugName: "content" }] : []));
323
- contentContext = input(...(ngDevMode ? [undefined, { debugName: "contentContext" }] : []));
378
+ viewchildSheetRef = viewChild(BrnSheet, /* @ts-ignore */
379
+ ...(ngDevMode ? [{ debugName: "viewchildSheetRef" }] : /* istanbul ignore next */ []));
380
+ side = input('left', /* @ts-ignore */
381
+ ...(ngDevMode ? [{ debugName: "side" }] : /* istanbul ignore next */ []));
382
+ title = input('', /* @ts-ignore */
383
+ ...(ngDevMode ? [{ debugName: "title" }] : /* istanbul ignore next */ []));
384
+ content = input(/* @ts-ignore */
385
+ ...(ngDevMode ? [undefined, { debugName: "content" }] : /* istanbul ignore next */ []));
386
+ contentContext = input(/* @ts-ignore */
387
+ ...(ngDevMode ? [undefined, { debugName: "contentContext" }] : /* istanbul ignore next */ []));
324
388
  constructor() {
325
389
  effect(() => { });
326
390
  }
@@ -330,8 +394,8 @@ class EgLayoutSimpleSidebar {
330
394
  closeSheet() {
331
395
  this.viewchildSheetRef()?.close();
332
396
  }
333
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: EgLayoutSimpleSidebar, deps: [], target: i0.ɵɵFactoryTarget.Component });
334
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.1", type: EgLayoutSimpleSidebar, isStandalone: true, selector: "eg-layout-simple-sidebar", inputs: { side: { classPropertyName: "side", publicName: "side", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, content: { classPropertyName: "content", publicName: "content", isSignal: true, isRequired: false, transformFunction: null }, contentContext: { classPropertyName: "contentContext", publicName: "contentContext", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "viewchildSheetRef", first: true, predicate: BrnSheet, descendants: true, isSignal: true }], ngImport: i0, template: `
397
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: EgLayoutSimpleSidebar, deps: [], target: i0.ɵɵFactoryTarget.Component });
398
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: EgLayoutSimpleSidebar, isStandalone: true, selector: "eg-layout-simple-sidebar", inputs: { side: { classPropertyName: "side", publicName: "side", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, content: { classPropertyName: "content", publicName: "content", isSignal: true, isRequired: false, transformFunction: null }, contentContext: { classPropertyName: "contentContext", publicName: "contentContext", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "viewchildSheetRef", first: true, predicate: BrnSheet, descendants: true, isSignal: true }], ngImport: i0, template: `
335
399
  @let _title = title();
336
400
  @let _content = content();
337
401
 
@@ -352,9 +416,9 @@ class EgLayoutSimpleSidebar {
352
416
  </hlm-sheet-footer>
353
417
  </hlm-sheet-content>
354
418
  </hlm-sheet>
355
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i2$1.BrnSheetClose, selector: "button[brnSheetClose]" }, { kind: "directive", type: i2$1.BrnSheetContent, selector: "[brnSheetContent]" }, { kind: "component", type: i3.HlmSheet, selector: "hlm-sheet", exportAs: ["hlmSheet"] }, { kind: "component", type: i3.HlmSheetContent, selector: "hlm-sheet-content", inputs: ["class"] }, { kind: "component", type: i3.HlmSheetFooter, selector: "hlm-sheet-footer", inputs: ["class"] }, { kind: "component", type: i3.HlmSheetHeader, selector: "hlm-sheet-header", inputs: ["class"] }, { kind: "directive", type: i3.HlmSheetTitle, selector: "[hlmSheetTitle]", inputs: ["class"] }, { kind: "component", type: i4.HlmButton, selector: "button[hlmButton], a[hlmButton]", inputs: ["variant", "size", "appearance", "loading", "icon", "iconPosition", "class", "spinnerUserClass", "disabled", "type"] }] });
419
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i2.BrnSheetClose, selector: "button[brnSheetClose]" }, { kind: "directive", type: i2.BrnSheetContent, selector: "[brnSheetContent]" }, { kind: "component", type: i3.HlmSheet, selector: "hlm-sheet", exportAs: ["hlmSheet"] }, { kind: "component", type: i3.HlmSheetContent, selector: "hlm-sheet-content", inputs: ["class"] }, { kind: "component", type: i3.HlmSheetFooter, selector: "hlm-sheet-footer", inputs: ["class"] }, { kind: "component", type: i3.HlmSheetHeader, selector: "hlm-sheet-header", inputs: ["class"] }, { kind: "directive", type: i3.HlmSheetTitle, selector: "[hlmSheetTitle]", inputs: ["class"] }, { kind: "component", type: i4.HlmButton, selector: "button[hlmButton], a[hlmButton]", inputs: ["variant", "size", "appearance", "loading", "icon", "iconPosition", "class", "spinnerUserClass", "disabled", "type"] }] });
356
420
  }
357
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: EgLayoutSimpleSidebar, decorators: [{
421
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: EgLayoutSimpleSidebar, decorators: [{
358
422
  type: Component,
359
423
  args: [{
360
424
  selector: 'eg-layout-simple-sidebar',
@@ -383,68 +447,71 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImpor
383
447
  </hlm-sheet>
384
448
  `,
385
449
  }]
386
- }], ctorParameters: () => [] });
450
+ }], ctorParameters: () => [], propDecorators: { viewchildSheetRef: [{ type: i0.ViewChild, args: [i0.forwardRef(() => BrnSheet), { isSignal: true }] }], side: [{ type: i0.Input, args: [{ isSignal: true, alias: "side", required: false }] }], title: [{ type: i0.Input, args: [{ isSignal: true, alias: "title", required: false }] }], content: [{ type: i0.Input, args: [{ isSignal: true, alias: "content", required: false }] }], contentContext: [{ type: i0.Input, args: [{ isSignal: true, alias: "contentContext", required: false }] }] } });
387
451
 
388
452
  class EgLayoutSimpleMobileMenuGroup {
389
453
  hlm = hlm;
390
- label = input('', ...(ngDevMode ? [{ debugName: "label" }] : []));
391
- items = input(...(ngDevMode ? [undefined, { debugName: "items" }] : []));
454
+ label = input('', /* @ts-ignore */
455
+ ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
456
+ items = input(/* @ts-ignore */
457
+ ...(ngDevMode ? [undefined, { debugName: "items" }] : /* istanbul ignore next */ []));
392
458
  itemClick = output();
393
459
  handleClick(item) {
394
460
  item.action?.();
395
461
  this.itemClick.emit(item);
396
462
  }
397
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: EgLayoutSimpleMobileMenuGroup, deps: [], target: i0.ɵɵFactoryTarget.Component });
398
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.1", type: EgLayoutSimpleMobileMenuGroup, isStandalone: true, selector: "eg-layout-simple-mobile-menu-group", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { itemClick: "itemClick" }, providers: [], ngImport: i0, template: `
463
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: EgLayoutSimpleMobileMenuGroup, deps: [], target: i0.ɵɵFactoryTarget.Component });
464
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: EgLayoutSimpleMobileMenuGroup, isStandalone: true, selector: "eg-layout-simple-mobile-menu-group", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { itemClick: "itemClick" }, providers: [], ngImport: i0, template: `
399
465
  @let _label = label();
400
466
  @let _items = items();
401
467
 
402
468
  @if (_items && _items.length > 0) {
403
469
  @if (_label) {
404
- <hlm-menu-label>{{ _label }}</hlm-menu-label>
470
+ <div class="px-3 py-1 text-xs font-semibold text-muted-foreground">{{ _label }}</div>
405
471
  }
406
- <hlm-menu-group>
472
+ <div class="flex flex-col">
407
473
  @for (item of _items; track item.label) {
408
474
  @if (item.link) {
409
475
  <a
410
- hlmMenuItem
411
476
  [routerLink]="item.link"
412
- [class]="hlm('cursor-pointer no-underline')"
477
+ [class]="
478
+ hlm(
479
+ 'cursor-pointer no-underline px-3 py-2 text-sm hover:bg-secondary rounded-sm flex items-center gap-2'
480
+ )
481
+ "
413
482
  (click)="handleClick(item)"
414
483
  >
415
484
  @if (item.icon) {
416
- <ng-icon
417
- [svg]="item.icon"
418
- size="1rem"
419
- [class]="hlm('[_svg]:text-[inherit]! [_svg]:bg-[inherit]! cursor-pointer mr-2')"
420
- >
421
- </ng-icon>
485
+ <ng-icon [svg]="item.icon" size="1rem" [class]="hlm('cursor-pointer mr-2')"> </ng-icon>
422
486
  }
423
487
  <span>{{ item.label }}</span>
424
488
  </a>
425
489
  } @else {
426
- <button hlmMenuItem (click)="handleClick(item)" [class]="hlm('cursor-pointer no-underline')">
490
+ <button
491
+ type="button"
492
+ (click)="handleClick(item)"
493
+ [class]="
494
+ hlm(
495
+ 'cursor-pointer no-underline px-3 py-2 text-sm hover:bg-secondary rounded-sm flex items-center gap-2 bg-transparent border-0 text-left w-full'
496
+ )
497
+ "
498
+ >
427
499
  @if (item.icon) {
428
- <ng-icon
429
- [svg]="item.icon"
430
- size="1rem"
431
- [class]="hlm('[_svg]:text-[inherit]! [_svg]:bg-[inherit]! cursor-pointer mr-2')"
432
- >
433
- </ng-icon>
500
+ <ng-icon [svg]="item.icon" size="1rem" [class]="hlm('cursor-pointer mr-2')"> </ng-icon>
434
501
  }
435
502
  <span>{{ item.label }}</span>
436
503
  </button>
437
504
  }
438
505
  }
439
- </hlm-menu-group>
506
+ </div>
440
507
  }
441
- `, isInline: true, dependencies: [{ kind: "directive", type: HlmMenuItem, selector: "[hlmMenuItem]", inputs: ["variant", "inset", "class"] }, { kind: "component", type: HlmMenuLabel, selector: "hlm-menu-label", inputs: ["inset", "class"] }, { kind: "component", type: HlmMenuGroup, selector: "hlm-menu-group" }, { kind: "component", type: NgIcon, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }] });
508
+ `, isInline: true, dependencies: [{ kind: "component", type: NgIcon, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "browserUrl", "routerLink"] }] });
442
509
  }
443
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: EgLayoutSimpleMobileMenuGroup, decorators: [{
510
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: EgLayoutSimpleMobileMenuGroup, decorators: [{
444
511
  type: Component,
445
512
  args: [{
446
513
  selector: 'eg-layout-simple-mobile-menu-group',
447
- imports: [HlmMenuItem, HlmMenuLabel, HlmMenuGroup, NgIcon, RouterLink],
514
+ imports: [NgIcon, RouterLink],
448
515
  providers: [],
449
516
  template: `
450
517
  @let _label = label();
@@ -452,46 +519,47 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImpor
452
519
 
453
520
  @if (_items && _items.length > 0) {
454
521
  @if (_label) {
455
- <hlm-menu-label>{{ _label }}</hlm-menu-label>
522
+ <div class="px-3 py-1 text-xs font-semibold text-muted-foreground">{{ _label }}</div>
456
523
  }
457
- <hlm-menu-group>
524
+ <div class="flex flex-col">
458
525
  @for (item of _items; track item.label) {
459
526
  @if (item.link) {
460
527
  <a
461
- hlmMenuItem
462
528
  [routerLink]="item.link"
463
- [class]="hlm('cursor-pointer no-underline')"
529
+ [class]="
530
+ hlm(
531
+ 'cursor-pointer no-underline px-3 py-2 text-sm hover:bg-secondary rounded-sm flex items-center gap-2'
532
+ )
533
+ "
464
534
  (click)="handleClick(item)"
465
535
  >
466
536
  @if (item.icon) {
467
- <ng-icon
468
- [svg]="item.icon"
469
- size="1rem"
470
- [class]="hlm('[_svg]:text-[inherit]! [_svg]:bg-[inherit]! cursor-pointer mr-2')"
471
- >
472
- </ng-icon>
537
+ <ng-icon [svg]="item.icon" size="1rem" [class]="hlm('cursor-pointer mr-2')"> </ng-icon>
473
538
  }
474
539
  <span>{{ item.label }}</span>
475
540
  </a>
476
541
  } @else {
477
- <button hlmMenuItem (click)="handleClick(item)" [class]="hlm('cursor-pointer no-underline')">
542
+ <button
543
+ type="button"
544
+ (click)="handleClick(item)"
545
+ [class]="
546
+ hlm(
547
+ 'cursor-pointer no-underline px-3 py-2 text-sm hover:bg-secondary rounded-sm flex items-center gap-2 bg-transparent border-0 text-left w-full'
548
+ )
549
+ "
550
+ >
478
551
  @if (item.icon) {
479
- <ng-icon
480
- [svg]="item.icon"
481
- size="1rem"
482
- [class]="hlm('[_svg]:text-[inherit]! [_svg]:bg-[inherit]! cursor-pointer mr-2')"
483
- >
484
- </ng-icon>
552
+ <ng-icon [svg]="item.icon" size="1rem" [class]="hlm('cursor-pointer mr-2')"> </ng-icon>
485
553
  }
486
554
  <span>{{ item.label }}</span>
487
555
  </button>
488
556
  }
489
557
  }
490
- </hlm-menu-group>
558
+ </div>
491
559
  }
492
560
  `,
493
561
  }]
494
- }] });
562
+ }], propDecorators: { label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], items: [{ type: i0.Input, args: [{ isSignal: true, alias: "items", required: false }] }], itemClick: [{ type: i0.Output, args: ["itemClick"] }] } });
495
563
 
496
564
  const commonLinkGroupClasses = 'hidden md:flex space-x-4 items-center';
497
565
  const commonLinkClasses = 'text-left text-secondary visited:text-secondary hover:text-primary cursor-pointer no-underline';
@@ -499,57 +567,102 @@ class EgLayoutSimple {
499
567
  breakpointObserver;
500
568
  hlm = hlm;
501
569
  menuIcon = lucideMenu;
502
- sidebarEnabled = input(false, ...(ngDevMode ? [{ debugName: "sidebarEnabled" }] : []));
503
- sidebarTitle = input('Menu', ...(ngDevMode ? [{ debugName: "sidebarTitle" }] : []));
504
- sidebarContent = input(...(ngDevMode ? [undefined, { debugName: "sidebarContent" }] : []));
505
- userMenuTrigger = input(...(ngDevMode ? [undefined, { debugName: "userMenuTrigger" }] : []));
570
+ sidebarEnabled = input(false, /* @ts-ignore */
571
+ ...(ngDevMode ? [{ debugName: "sidebarEnabled" }] : /* istanbul ignore next */ []));
572
+ sidebarTitle = input('Menu', /* @ts-ignore */
573
+ ...(ngDevMode ? [{ debugName: "sidebarTitle" }] : /* istanbul ignore next */ []));
574
+ sidebarContent = input(/* @ts-ignore */
575
+ ...(ngDevMode ? [undefined, { debugName: "sidebarContent" }] : /* istanbul ignore next */ []));
576
+ userMenuTrigger = input(/* @ts-ignore */
577
+ ...(ngDevMode ? [undefined, { debugName: "userMenuTrigger" }] : /* istanbul ignore next */ []));
506
578
  /** Menu data inputs */
507
- leftMenus = input([], ...(ngDevMode ? [{ debugName: "leftMenus" }] : []));
508
- rightMenus = input([], ...(ngDevMode ? [{ debugName: "rightMenus" }] : []));
509
- userMenus = input([], ...(ngDevMode ? [{ debugName: "userMenus" }] : []));
510
- logo = input('assets/logo.png', ...(ngDevMode ? [{ debugName: "logo" }] : []));
511
- logoLink = input('/', ...(ngDevMode ? [{ debugName: "logoLink" }] : []));
512
- logoClass = input('', ...(ngDevMode ? [{ debugName: "logoClass", alias: 'logoClass' }] : [{ alias: 'logoClass' }]));
513
- headerClass = input('', ...(ngDevMode ? [{ debugName: "headerClass", alias: 'headerClass' }] : [{ alias: 'headerClass' }]));
514
- contentClass = input('', ...(ngDevMode ? [{ debugName: "contentClass", alias: 'contentClass' }] : [{ alias: 'contentClass' }]));
515
- contentBottomClass = input('', ...(ngDevMode ? [{ debugName: "contentBottomClass", alias: 'contentBottomClass' }] : [{ alias: 'contentBottomClass' }]));
579
+ leftMenus = input([], /* @ts-ignore */
580
+ ...(ngDevMode ? [{ debugName: "leftMenus" }] : /* istanbul ignore next */ []));
581
+ leftMenuGroups = input([], /* @ts-ignore */
582
+ ...(ngDevMode ? [{ debugName: "leftMenuGroups" }] : /* istanbul ignore next */ []));
583
+ rightMenus = input([], /* @ts-ignore */
584
+ ...(ngDevMode ? [{ debugName: "rightMenus" }] : /* istanbul ignore next */ []));
585
+ topMenus = input([], /* @ts-ignore */
586
+ ...(ngDevMode ? [{ debugName: "topMenus" }] : /* istanbul ignore next */ []));
587
+ topSecondaryMenus = input([], /* @ts-ignore */
588
+ ...(ngDevMode ? [{ debugName: "topSecondaryMenus" }] : /* istanbul ignore next */ []));
589
+ userMenus = input([], /* @ts-ignore */
590
+ ...(ngDevMode ? [{ debugName: "userMenus" }] : /* istanbul ignore next */ []));
591
+ logo = input('assets/logo.png', /* @ts-ignore */
592
+ ...(ngDevMode ? [{ debugName: "logo" }] : /* istanbul ignore next */ []));
593
+ logoLink = input('/', /* @ts-ignore */
594
+ ...(ngDevMode ? [{ debugName: "logoLink" }] : /* istanbul ignore next */ []));
595
+ logoClass = input('', { ...(ngDevMode ? { debugName: "logoClass" } : /* istanbul ignore next */ {}), alias: 'logoClass' });
596
+ headerClass = input('', { ...(ngDevMode ? { debugName: "headerClass" } : /* istanbul ignore next */ {}), alias: 'headerClass' });
597
+ contentClass = input('', { ...(ngDevMode ? { debugName: "contentClass" } : /* istanbul ignore next */ {}), alias: 'contentClass' });
598
+ contentBottomClass = input('', { ...(ngDevMode ? { debugName: "contentBottomClass" } : /* istanbul ignore next */ {}), alias: 'contentBottomClass' });
516
599
  /** Container class inputs */
517
- leftMenuClass = input('', ...(ngDevMode ? [{ debugName: "leftMenuClass", alias: 'leftClass' }] : [{ alias: 'leftClass' }]));
518
- rightMenuClass = input('', ...(ngDevMode ? [{ debugName: "rightMenuClass", alias: 'rightClass' }] : [{ alias: 'rightClass' }]));
600
+ leftMenuClass = input('', { ...(ngDevMode ? { debugName: "leftMenuClass" } : /* istanbul ignore next */ {}), alias: 'leftClass' });
601
+ rightMenuClass = input('', { ...(ngDevMode ? { debugName: "rightMenuClass" } : /* istanbul ignore next */ {}), alias: 'rightClass' });
602
+ topMenuClass = input('', { ...(ngDevMode ? { debugName: "topMenuClass" } : /* istanbul ignore next */ {}), alias: 'topClass' });
519
603
  /** Link/button base class inputs */
520
- leftLinkClass = input('', ...(ngDevMode ? [{ debugName: "leftLinkClass", alias: 'leftLinkClass' }] : [{ alias: 'leftLinkClass' }]));
521
- rightLinkClass = input('', ...(ngDevMode ? [{ debugName: "rightLinkClass", alias: 'rightLinkClass' }] : [{ alias: 'rightLinkClass' }]));
522
- searchEnabled = input(false, ...(ngDevMode ? [{ debugName: "searchEnabled" }] : []));
523
- loading = input(false, ...(ngDevMode ? [{ debugName: "loading" }] : []));
524
- searchPlaceholderText = input('Select an page', ...(ngDevMode ? [{ debugName: "searchPlaceholderText" }] : []));
525
- searchEmptyText = input('No pages found', ...(ngDevMode ? [{ debugName: "searchEmptyText" }] : []));
526
- searchOptionTemplate = input(...(ngDevMode ? [undefined, { debugName: "searchOptionTemplate" }] : []));
527
- searchLoaderFn = input(...(ngDevMode ? [undefined, { debugName: "searchLoaderFn" }] : []));
528
- searchTransformValueToSearch = input(...(ngDevMode ? [undefined, { debugName: "searchTransformValueToSearch" }] : []));
604
+ leftLinkClass = input('', { ...(ngDevMode ? { debugName: "leftLinkClass" } : /* istanbul ignore next */ {}), alias: 'leftLinkClass' });
605
+ rightLinkClass = input('', { ...(ngDevMode ? { debugName: "rightLinkClass" } : /* istanbul ignore next */ {}), alias: 'rightLinkClass' });
606
+ topLinkClass = input('', { ...(ngDevMode ? { debugName: "topLinkClass" } : /* istanbul ignore next */ {}), alias: 'topLinkClass' });
607
+ searchEnabled = input(false, /* @ts-ignore */
608
+ ...(ngDevMode ? [{ debugName: "searchEnabled" }] : /* istanbul ignore next */ []));
609
+ loading = input(false, /* @ts-ignore */
610
+ ...(ngDevMode ? [{ debugName: "loading" }] : /* istanbul ignore next */ []));
611
+ searchPlaceholderText = input('Select an page', /* @ts-ignore */
612
+ ...(ngDevMode ? [{ debugName: "searchPlaceholderText" }] : /* istanbul ignore next */ []));
613
+ searchEmptyText = input('No pages found', /* @ts-ignore */
614
+ ...(ngDevMode ? [{ debugName: "searchEmptyText" }] : /* istanbul ignore next */ []));
615
+ searchOptionTemplate = input(/* @ts-ignore */
616
+ ...(ngDevMode ? [undefined, { debugName: "searchOptionTemplate" }] : /* istanbul ignore next */ []));
617
+ searchLoaderFn = input(/* @ts-ignore */
618
+ ...(ngDevMode ? [undefined, { debugName: "searchLoaderFn" }] : /* istanbul ignore next */ []));
619
+ searchTransformValueToSearch = input(/* @ts-ignore */
620
+ ...(ngDevMode ? [undefined, { debugName: "searchTransformValueToSearch" }] : /* istanbul ignore next */ []));
529
621
  searchOptionChange = output();
530
- _logoClass = computed(() => hlm('h-10', this.logoClass()), ...(ngDevMode ? [{ debugName: "_logoClass" }] : []));
531
- _headerClass = computed(() => hlm('px-4 py-2 flex items-center justify-between bg-gray-100 border-b border-gray-300', this.headerClass()), ...(ngDevMode ? [{ debugName: "_headerClass" }] : []));
532
- _contentClass = computed(() => hlm('p-4 flex flex-col flex-1', this.contentClass()), ...(ngDevMode ? [{ debugName: "_contentClass" }] : []));
533
- _contentBottomClass = computed(() => hlm('flex-1', this.contentBottomClass()), ...(ngDevMode ? [{ debugName: "_contentBottomClass" }] : []));
622
+ _logoClass = computed(() => hlm('h-10', this.logoClass()), /* @ts-ignore */
623
+ ...(ngDevMode ? [{ debugName: "_logoClass" }] : /* istanbul ignore next */ []));
624
+ _headerClass = computed(() => hlm('px-4 py-2 flex items-center justify-between bg-gray-100 border-b border-gray-300', this.headerClass()), /* @ts-ignore */
625
+ ...(ngDevMode ? [{ debugName: "_headerClass" }] : /* istanbul ignore next */ []));
626
+ _contentClass = computed(() => hlm('p-4 flex flex-col flex-1', this.contentClass()), /* @ts-ignore */
627
+ ...(ngDevMode ? [{ debugName: "_contentClass" }] : /* istanbul ignore next */ []));
628
+ _contentBottomClass = computed(() => hlm('flex-1', this.contentBottomClass()), /* @ts-ignore */
629
+ ...(ngDevMode ? [{ debugName: "_contentBottomClass" }] : /* istanbul ignore next */ []));
534
630
  /** Computed merged classes for containers */
535
- _computedLeftClass = computed(() => hlm(commonLinkGroupClasses, this.leftMenuClass()), ...(ngDevMode ? [{ debugName: "_computedLeftClass" }] : []));
536
- _computedRightClass = computed(() => hlm(commonLinkGroupClasses, this.rightMenuClass()), ...(ngDevMode ? [{ debugName: "_computedRightClass" }] : []));
631
+ _computedLeftClass = computed(() => hlm(commonLinkGroupClasses, this.leftMenuClass()), /* @ts-ignore */
632
+ ...(ngDevMode ? [{ debugName: "_computedLeftClass" }] : /* istanbul ignore next */ []));
633
+ _computedRightClass = computed(() => hlm(commonLinkGroupClasses, this.rightMenuClass()), /* @ts-ignore */
634
+ ...(ngDevMode ? [{ debugName: "_computedRightClass" }] : /* istanbul ignore next */ []));
635
+ _computedTopClass = computed(() => hlm('flex flex-wrap items-center gap-x-4 gap-y-1 px-4 py-2 bg-gray-50 border-b border-gray-200', this.topMenuClass()), /* @ts-ignore */
636
+ ...(ngDevMode ? [{ debugName: "_computedTopClass" }] : /* istanbul ignore next */ []));
637
+ _computedTopSecondaryClass = computed(() => hlm('flex flex-wrap items-center gap-x-4 gap-y-1 px-4 py-1.5 bg-gray-100/60 border-b border-gray-200', this.topMenuClass()), /* @ts-ignore */
638
+ ...(ngDevMode ? [{ debugName: "_computedTopSecondaryClass" }] : /* istanbul ignore next */ []));
537
639
  /** Computed merged classes for link/button elements */
538
- _computedLeftLinkClass = computed(() => hlm(commonLinkClasses, this.leftLinkClass()), ...(ngDevMode ? [{ debugName: "_computedLeftLinkClass" }] : []));
539
- _computedRightLinkClass = computed(() => hlm(commonLinkClasses, this.rightLinkClass()), ...(ngDevMode ? [{ debugName: "_computedRightLinkClass" }] : []));
640
+ _computedLeftLinkClass = computed(() => hlm(commonLinkClasses, this.leftLinkClass()), /* @ts-ignore */
641
+ ...(ngDevMode ? [{ debugName: "_computedLeftLinkClass" }] : /* istanbul ignore next */ []));
642
+ _computedRightLinkClass = computed(() => hlm(commonLinkClasses, this.rightLinkClass()), /* @ts-ignore */
643
+ ...(ngDevMode ? [{ debugName: "_computedRightLinkClass" }] : /* istanbul ignore next */ []));
644
+ _computedTopLinkClass = computed(() => hlm('text-secondary visited:text-secondary hover:text-primary cursor-pointer no-underline text-sm', this.topLinkClass()), /* @ts-ignore */
645
+ ...(ngDevMode ? [{ debugName: "_computedTopLinkClass" }] : /* istanbul ignore next */ []));
540
646
  mobileMenuItemClass = commonLinkClasses;
541
- footerEnabled = input(false, ...(ngDevMode ? [{ debugName: "footerEnabled" }] : []));
542
- footerMenus = input([], ...(ngDevMode ? [{ debugName: "footerMenus" }] : []));
543
- footerMenuClass = input('', ...(ngDevMode ? [{ debugName: "footerMenuClass", alias: 'footerMenuClass' }] : [{ alias: 'footerMenuClass' }]));
544
- footerLinkClass = input('', ...(ngDevMode ? [{ debugName: "footerLinkClass", alias: 'footerLinkClass' }] : [{ alias: 'footerLinkClass' }]));
545
- footerContent = input('© 2024 My Company', ...(ngDevMode ? [{ debugName: "footerContent" }] : []));
546
- footerClass = input('', ...(ngDevMode ? [{ debugName: "footerClass", alias: 'footerClass' }] : [{ alias: 'footerClass' }]));
547
- _footerClass = computed(() => hlm('px-4 py-4 bg-gray-100 border-t border-gray-300 text-sm text-gray-600', this.footerClass()), ...(ngDevMode ? [{ debugName: "_footerClass" }] : []));
548
- _computedFooterMenuClass = computed(() => hlm('flex flex-wrap justify-center space-x-4', this.footerMenuClass()), ...(ngDevMode ? [{ debugName: "_computedFooterMenuClass" }] : []));
549
- _computedFooterLinkClass = computed(() => hlm('text-secondary hover:text-primary cursor-pointer no-underline', this.footerLinkClass()), ...(ngDevMode ? [{ debugName: "_computedFooterLinkClass" }] : []));
647
+ footerEnabled = input(false, /* @ts-ignore */
648
+ ...(ngDevMode ? [{ debugName: "footerEnabled" }] : /* istanbul ignore next */ []));
649
+ footerMenus = input([], /* @ts-ignore */
650
+ ...(ngDevMode ? [{ debugName: "footerMenus" }] : /* istanbul ignore next */ []));
651
+ footerMenuClass = input('', { ...(ngDevMode ? { debugName: "footerMenuClass" } : /* istanbul ignore next */ {}), alias: 'footerMenuClass' });
652
+ footerLinkClass = input('', { ...(ngDevMode ? { debugName: "footerLinkClass" } : /* istanbul ignore next */ {}), alias: 'footerLinkClass' });
653
+ footerContent = input('© 2024 My Company', /* @ts-ignore */
654
+ ...(ngDevMode ? [{ debugName: "footerContent" }] : /* istanbul ignore next */ []));
655
+ footerClass = input('', { ...(ngDevMode ? { debugName: "footerClass" } : /* istanbul ignore next */ {}), alias: 'footerClass' });
656
+ _footerClass = computed(() => hlm('px-4 py-4 bg-gray-100 border-t border-gray-300 text-sm text-gray-600', this.footerClass()), /* @ts-ignore */
657
+ ...(ngDevMode ? [{ debugName: "_footerClass" }] : /* istanbul ignore next */ []));
658
+ _computedFooterMenuClass = computed(() => hlm('flex flex-wrap justify-center space-x-4', this.footerMenuClass()), /* @ts-ignore */
659
+ ...(ngDevMode ? [{ debugName: "_computedFooterMenuClass" }] : /* istanbul ignore next */ []));
660
+ _computedFooterLinkClass = computed(() => hlm('text-secondary hover:text-primary cursor-pointer no-underline', this.footerLinkClass()), /* @ts-ignore */
661
+ ...(ngDevMode ? [{ debugName: "_computedFooterLinkClass" }] : /* istanbul ignore next */ []));
550
662
  /** Mobile menu state */
551
663
  mobileMenuOpen = false;
552
- isMobile = signal(false, ...(ngDevMode ? [{ debugName: "isMobile" }] : []));
664
+ isMobile = signal(false, /* @ts-ignore */
665
+ ...(ngDevMode ? [{ debugName: "isMobile" }] : /* istanbul ignore next */ []));
553
666
  constructor(breakpointObserver) {
554
667
  this.breakpointObserver = breakpointObserver;
555
668
  this.breakpointObserver.observe([Breakpoints.Handset]).subscribe((result) => {
@@ -562,21 +675,22 @@ class EgLayoutSimple {
562
675
  onSearchOptionChange(value) {
563
676
  this.searchOptionChange.emit(value);
564
677
  }
565
- viewchildSheetRef = viewChild(EgLayoutSimpleSidebar, ...(ngDevMode ? [{ debugName: "viewchildSheetRef" }] : []));
678
+ viewchildSheetRef = viewChild(EgLayoutSimpleSidebar, /* @ts-ignore */
679
+ ...(ngDevMode ? [{ debugName: "viewchildSheetRef" }] : /* istanbul ignore next */ []));
566
680
  openSidebar() {
567
681
  this.viewchildSheetRef()?.openSheet();
568
682
  }
569
683
  closeSidebar() {
570
684
  this.viewchildSheetRef()?.closeSheet();
571
685
  }
572
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: EgLayoutSimple, deps: [{ token: i1$2.BreakpointObserver }], target: i0.ɵɵFactoryTarget.Component });
573
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.1", type: EgLayoutSimple, isStandalone: true, selector: "eg-layout-simple", inputs: { sidebarEnabled: { classPropertyName: "sidebarEnabled", publicName: "sidebarEnabled", isSignal: true, isRequired: false, transformFunction: null }, sidebarTitle: { classPropertyName: "sidebarTitle", publicName: "sidebarTitle", isSignal: true, isRequired: false, transformFunction: null }, sidebarContent: { classPropertyName: "sidebarContent", publicName: "sidebarContent", isSignal: true, isRequired: false, transformFunction: null }, userMenuTrigger: { classPropertyName: "userMenuTrigger", publicName: "userMenuTrigger", isSignal: true, isRequired: false, transformFunction: null }, leftMenus: { classPropertyName: "leftMenus", publicName: "leftMenus", isSignal: true, isRequired: false, transformFunction: null }, rightMenus: { classPropertyName: "rightMenus", publicName: "rightMenus", isSignal: true, isRequired: false, transformFunction: null }, userMenus: { classPropertyName: "userMenus", publicName: "userMenus", isSignal: true, isRequired: false, transformFunction: null }, logo: { classPropertyName: "logo", publicName: "logo", isSignal: true, isRequired: false, transformFunction: null }, logoLink: { classPropertyName: "logoLink", publicName: "logoLink", isSignal: true, isRequired: false, transformFunction: null }, logoClass: { classPropertyName: "logoClass", publicName: "logoClass", isSignal: true, isRequired: false, transformFunction: null }, headerClass: { classPropertyName: "headerClass", publicName: "headerClass", isSignal: true, isRequired: false, transformFunction: null }, contentClass: { classPropertyName: "contentClass", publicName: "contentClass", isSignal: true, isRequired: false, transformFunction: null }, contentBottomClass: { classPropertyName: "contentBottomClass", publicName: "contentBottomClass", isSignal: true, isRequired: false, transformFunction: null }, leftMenuClass: { classPropertyName: "leftMenuClass", publicName: "leftClass", isSignal: true, isRequired: false, transformFunction: null }, rightMenuClass: { classPropertyName: "rightMenuClass", publicName: "rightClass", isSignal: true, isRequired: false, transformFunction: null }, leftLinkClass: { classPropertyName: "leftLinkClass", publicName: "leftLinkClass", isSignal: true, isRequired: false, transformFunction: null }, rightLinkClass: { classPropertyName: "rightLinkClass", publicName: "rightLinkClass", isSignal: true, isRequired: false, transformFunction: null }, searchEnabled: { classPropertyName: "searchEnabled", publicName: "searchEnabled", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, searchPlaceholderText: { classPropertyName: "searchPlaceholderText", publicName: "searchPlaceholderText", isSignal: true, isRequired: false, transformFunction: null }, searchEmptyText: { classPropertyName: "searchEmptyText", publicName: "searchEmptyText", isSignal: true, isRequired: false, transformFunction: null }, searchOptionTemplate: { classPropertyName: "searchOptionTemplate", publicName: "searchOptionTemplate", isSignal: true, isRequired: false, transformFunction: null }, searchLoaderFn: { classPropertyName: "searchLoaderFn", publicName: "searchLoaderFn", isSignal: true, isRequired: false, transformFunction: null }, searchTransformValueToSearch: { classPropertyName: "searchTransformValueToSearch", publicName: "searchTransformValueToSearch", isSignal: true, isRequired: false, transformFunction: null }, footerEnabled: { classPropertyName: "footerEnabled", publicName: "footerEnabled", isSignal: true, isRequired: false, transformFunction: null }, footerMenus: { classPropertyName: "footerMenus", publicName: "footerMenus", isSignal: true, isRequired: false, transformFunction: null }, footerMenuClass: { classPropertyName: "footerMenuClass", publicName: "footerMenuClass", isSignal: true, isRequired: false, transformFunction: null }, footerLinkClass: { classPropertyName: "footerLinkClass", publicName: "footerLinkClass", isSignal: true, isRequired: false, transformFunction: null }, footerContent: { classPropertyName: "footerContent", publicName: "footerContent", isSignal: true, isRequired: false, transformFunction: null }, footerClass: { classPropertyName: "footerClass", publicName: "footerClass", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { searchOptionChange: "searchOptionChange" }, providers: [
686
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: EgLayoutSimple, deps: [{ token: i1$2.BreakpointObserver }], target: i0.ɵɵFactoryTarget.Component });
687
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: EgLayoutSimple, isStandalone: true, selector: "eg-layout-simple", inputs: { sidebarEnabled: { classPropertyName: "sidebarEnabled", publicName: "sidebarEnabled", isSignal: true, isRequired: false, transformFunction: null }, sidebarTitle: { classPropertyName: "sidebarTitle", publicName: "sidebarTitle", isSignal: true, isRequired: false, transformFunction: null }, sidebarContent: { classPropertyName: "sidebarContent", publicName: "sidebarContent", isSignal: true, isRequired: false, transformFunction: null }, userMenuTrigger: { classPropertyName: "userMenuTrigger", publicName: "userMenuTrigger", isSignal: true, isRequired: false, transformFunction: null }, leftMenus: { classPropertyName: "leftMenus", publicName: "leftMenus", isSignal: true, isRequired: false, transformFunction: null }, leftMenuGroups: { classPropertyName: "leftMenuGroups", publicName: "leftMenuGroups", isSignal: true, isRequired: false, transformFunction: null }, rightMenus: { classPropertyName: "rightMenus", publicName: "rightMenus", isSignal: true, isRequired: false, transformFunction: null }, topMenus: { classPropertyName: "topMenus", publicName: "topMenus", isSignal: true, isRequired: false, transformFunction: null }, topSecondaryMenus: { classPropertyName: "topSecondaryMenus", publicName: "topSecondaryMenus", isSignal: true, isRequired: false, transformFunction: null }, userMenus: { classPropertyName: "userMenus", publicName: "userMenus", isSignal: true, isRequired: false, transformFunction: null }, logo: { classPropertyName: "logo", publicName: "logo", isSignal: true, isRequired: false, transformFunction: null }, logoLink: { classPropertyName: "logoLink", publicName: "logoLink", isSignal: true, isRequired: false, transformFunction: null }, logoClass: { classPropertyName: "logoClass", publicName: "logoClass", isSignal: true, isRequired: false, transformFunction: null }, headerClass: { classPropertyName: "headerClass", publicName: "headerClass", isSignal: true, isRequired: false, transformFunction: null }, contentClass: { classPropertyName: "contentClass", publicName: "contentClass", isSignal: true, isRequired: false, transformFunction: null }, contentBottomClass: { classPropertyName: "contentBottomClass", publicName: "contentBottomClass", isSignal: true, isRequired: false, transformFunction: null }, leftMenuClass: { classPropertyName: "leftMenuClass", publicName: "leftClass", isSignal: true, isRequired: false, transformFunction: null }, rightMenuClass: { classPropertyName: "rightMenuClass", publicName: "rightClass", isSignal: true, isRequired: false, transformFunction: null }, topMenuClass: { classPropertyName: "topMenuClass", publicName: "topClass", isSignal: true, isRequired: false, transformFunction: null }, leftLinkClass: { classPropertyName: "leftLinkClass", publicName: "leftLinkClass", isSignal: true, isRequired: false, transformFunction: null }, rightLinkClass: { classPropertyName: "rightLinkClass", publicName: "rightLinkClass", isSignal: true, isRequired: false, transformFunction: null }, topLinkClass: { classPropertyName: "topLinkClass", publicName: "topLinkClass", isSignal: true, isRequired: false, transformFunction: null }, searchEnabled: { classPropertyName: "searchEnabled", publicName: "searchEnabled", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, searchPlaceholderText: { classPropertyName: "searchPlaceholderText", publicName: "searchPlaceholderText", isSignal: true, isRequired: false, transformFunction: null }, searchEmptyText: { classPropertyName: "searchEmptyText", publicName: "searchEmptyText", isSignal: true, isRequired: false, transformFunction: null }, searchOptionTemplate: { classPropertyName: "searchOptionTemplate", publicName: "searchOptionTemplate", isSignal: true, isRequired: false, transformFunction: null }, searchLoaderFn: { classPropertyName: "searchLoaderFn", publicName: "searchLoaderFn", isSignal: true, isRequired: false, transformFunction: null }, searchTransformValueToSearch: { classPropertyName: "searchTransformValueToSearch", publicName: "searchTransformValueToSearch", isSignal: true, isRequired: false, transformFunction: null }, footerEnabled: { classPropertyName: "footerEnabled", publicName: "footerEnabled", isSignal: true, isRequired: false, transformFunction: null }, footerMenus: { classPropertyName: "footerMenus", publicName: "footerMenus", isSignal: true, isRequired: false, transformFunction: null }, footerMenuClass: { classPropertyName: "footerMenuClass", publicName: "footerMenuClass", isSignal: true, isRequired: false, transformFunction: null }, footerLinkClass: { classPropertyName: "footerLinkClass", publicName: "footerLinkClass", isSignal: true, isRequired: false, transformFunction: null }, footerContent: { classPropertyName: "footerContent", publicName: "footerContent", isSignal: true, isRequired: false, transformFunction: null }, footerClass: { classPropertyName: "footerClass", publicName: "footerClass", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { searchOptionChange: "searchOptionChange" }, providers: [
574
688
  provideIcons({
575
689
  lucideMenu,
576
690
  }),
577
- ], viewQueries: [{ propertyName: "viewchildSheetRef", first: true, predicate: EgLayoutSimpleSidebar, descendants: true, isSignal: true }], ngImport: i0, template: "<ng-template #menuIconTemplate>\n <ng-icon [svg]=\"menuIcon\" size=\"20px\" class=\"[&_svg]:w-[inherit]! [&_svg]:h-[inherit]!\" />\n</ng-template>\n\n<eg-layout-simple-sidebar\n [title]=\"sidebarTitle()\"\n [content]=\"sidebarContent()\"\n [contentContext]=\"{ close: closeSidebar.bind(this) }\"\n/>\n\n<div class=\"flex flex-col min-h-screen\">\n <!-- Header -->\n <header [class]=\"_headerClass()\">\n <div class=\"flex items-center space-x-4\">\n @if (sidebarEnabled()) {\n <button\n hlmButton\n variant=\"secondary\"\n appearance=\"outline\"\n size=\"icon\"\n [icon]=\"menuIconTemplate\"\n iconPosition=\"left\"\n class=\"bg-transparent! border-gray-400! hover:border-gray-500!\"\n (click)=\"openSidebar()\"\n ></button>\n }\n\n <div class=\"logo\">\n <a [routerLink]=\"logoLink()\">\n <img [src]=\"logo()\" alt=\"Logo\" [class]=\"_logoClass()\" />\n </a>\n </div>\n <!-- Left menus (desktop) -->\n <nav [class]=\"_computedLeftClass()\">\n @for (item of leftMenus(); track item.label) {\n @if (item.link) {\n <a [routerLink]=\"item.link\" [class]=\"hlm(_computedLeftLinkClass(), item.class || '')\"> {{ item.label }} </a>\n } @else {\n <button type=\"button\" (click)=\"item.action?.()\" [class]=\"hlm(_computedLeftLinkClass(), item.class || '')\">\n {{ item.label }}\n </button>\n }\n }\n </nav>\n </div>\n\n <!-- Right menus (desktop) -->\n <nav [class]=\"_computedRightClass()\">\n @if (searchEnabled()) {\n <eg-generic-autocomplete\n [optionTemplate]=\"searchOptionTemplate()\"\n [loaderFn]=\"searchLoaderFn()\"\n [transformValueToSearch]=\"searchTransformValueToSearch()\"\n [placeholderText]=\"searchPlaceholderText()\"\n [emptyText]=\"searchEmptyText()\"\n (optionChange)=\"onSearchOptionChange($event)\"\n ></eg-generic-autocomplete>\n }\n\n @for (item of rightMenus(); track item.label) {\n @if (item.link) {\n <a [routerLink]=\"item.link\" [class]=\"hlm(_computedRightLinkClass(), item.class || '')\"> {{ item.label }} </a>\n } @else {\n <button type=\"button\" (click)=\"item.action?.()\" [class]=\"hlm(_computedRightLinkClass(), item.class || '')\">\n {{ item.label }}\n </button>\n }\n }\n\n @let uMenus = userMenus();\n @if (uMenus && uMenus.length > 0) {\n <eg-layout-simple-user-menu [menus]=\"uMenus\" [menuTrigger]=\"userMenuTrigger()\" />\n }\n </nav>\n\n <!-- Mobile menu button -->\n <button\n (click)=\"toggleMobileMenu()\"\n class=\"md:hidden p-2 text-gray-700 hover:text-primary focus:outline-none cursor-pointer\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"h-6 w-6\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M4 6h16M4 12h16M4 18h16\" />\n </svg>\n </button>\n </header>\n\n @let _topMenus = leftMenus().concat(rightMenus());\n @let _userMenus = userMenus();\n\n <!-- Mobile menu -->\n @if (isMobile() && mobileMenuOpen) {\n <hlm-menu class=\"w-full border-none\">\n <eg-layout-simple-mobile-menu-group [items]=\"_topMenus\" (itemClick)=\"toggleMobileMenu()\" />\n\n @if (_topMenus.length > 0 && _userMenus.length > 0) {\n <hr class=\"border-gray-300 my-2\" />\n }\n\n @for (section of userMenus(); track section.label) {\n <eg-layout-simple-mobile-menu-group\n [items]=\"section.items\"\n [label]=\"section.label\"\n (itemClick)=\"toggleMobileMenu()\"\n ></eg-layout-simple-mobile-menu-group>\n\n @if (section.separator) {\n <hr class=\"border-gray-300 my-2\" />\n }\n }\n </hlm-menu>\n }\n\n <!-- Main content -->\n <main [class]=\"_contentClass()\">\n @if (!loading()) {\n <div class=\"flex items-center justify-center h-full\">\n <ng-content />\n </div>\n }\n <div [class]=\"_contentBottomClass()\"></div>\n </main>\n\n @if (footerEnabled()) {\n <footer [class]=\"_footerClass()\">\n <nav [class]=\"_computedFooterMenuClass()\">\n @for (item of footerMenus(); track item.label) {\n @if (item.link) {\n <a [routerLink]=\"item.link\" [class]=\"hlm(_computedFooterLinkClass(), item.class || '')\">\n {{ item.label }}\n </a>\n } @else {\n <button type=\"button\" (click)=\"item.action?.()\" [class]=\"hlm(_computedFooterLinkClass(), item.class || '')\">\n {{ item.label }}\n </button>\n }\n }\n </nav>\n\n <div class=\"mt-2 text-center\">\n {{ footerContent() }}\n </div>\n </footer>\n }\n</div>\n", dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: EgLayoutSimpleUserMenu, selector: "eg-layout-simple-user-menu", inputs: ["menus", "menuTrigger"] }, { kind: "component", type: EgLayoutSimpleSidebar, selector: "eg-layout-simple-sidebar", inputs: ["side", "title", "content", "contentContext"] }, { kind: "component", type: EgLayoutSimpleMobileMenuGroup, selector: "eg-layout-simple-mobile-menu-group", inputs: ["label", "items"], outputs: ["itemClick"] }, { kind: "component", type: EgGenericAutocomplete, selector: "eg-generic-autocomplete", inputs: ["controlId", "placeholderText", "emptyText", "optionTemplate", "loaderFn", "transformValueToSearch"], outputs: ["optionChange"] }, { kind: "component", type: HlmButton, selector: "button[hlmButton], a[hlmButton]", inputs: ["variant", "size", "appearance", "loading", "icon", "iconPosition", "class", "spinnerUserClass", "disabled", "type"] }, { kind: "component", type: HlmMenu, selector: "hlm-menu", inputs: ["class", "variant"] }, { kind: "component", type: NgIcon, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }] });
691
+ ], viewQueries: [{ propertyName: "viewchildSheetRef", first: true, predicate: EgLayoutSimpleSidebar, descendants: true, isSignal: true }], ngImport: i0, template: "<ng-template #menuIconTemplate>\n <ng-icon [svg]=\"menuIcon\" size=\"20px\" class=\"[&_svg]:w-[inherit]! [&_svg]:h-[inherit]!\" />\n</ng-template>\n\n<eg-layout-simple-sidebar\n [title]=\"sidebarTitle()\"\n [content]=\"sidebarContent()\"\n [contentContext]=\"{ close: closeSidebar.bind(this) }\"\n/>\n\n<div class=\"flex flex-col min-h-screen\">\n <!-- Header -->\n <header [class]=\"_headerClass()\">\n <div class=\"flex items-center space-x-4\">\n @if (sidebarEnabled()) {\n <button\n hlmButton\n variant=\"secondary\"\n appearance=\"outline\"\n size=\"icon\"\n [icon]=\"menuIconTemplate\"\n iconPosition=\"left\"\n class=\"bg-transparent! border-gray-400! hover:border-gray-500!\"\n (click)=\"openSidebar()\"\n ></button>\n }\n\n <div class=\"logo\">\n <a [routerLink]=\"logoLink()\">\n <img [src]=\"logo()\" alt=\"Logo\" [class]=\"_logoClass()\" />\n </a>\n </div>\n <!-- Left menus (desktop) -->\n <nav [class]=\"_computedLeftClass()\">\n @for (item of leftMenus(); track item.label) { @if (item.link) {\n <a [routerLink]=\"item.link\" [class]=\"hlm(_computedLeftLinkClass(), item.class || '')\"> {{ item.label }} </a>\n } @else {\n <button type=\"button\" (click)=\"item.action?.()\" [class]=\"hlm(_computedLeftLinkClass(), item.class || '')\">\n {{ item.label }}\n </button>\n } } @for (group of leftMenuGroups(); track $index) {\n <div class=\"relative group\">\n <button\n type=\"button\"\n class=\"text-left text-secondary hover:text-primary cursor-pointer no-underline py-1 flex items-center gap-1\"\n >\n {{ group.label ?? 'Menu' }}\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"h-3 w-3\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n >\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M19 9l-7 7-7-7\" />\n </svg>\n </button>\n <div\n class=\"absolute left-0 top-full mt-1 hidden group-hover:flex flex-col min-w-[12rem] bg-popover text-popover-foreground border border-gray-200 rounded-md shadow-md py-1 z-50\"\n >\n @if (group.label) {\n <div class=\"px-3 py-1 text-xs font-semibold text-muted-foreground\">{{ group.label }}</div>\n } @for (item of group.items; track item.label) { @if (item.link) {\n <a\n [routerLink]=\"item.link\"\n [class]=\"hlm('px-3 py-1.5 text-sm no-underline hover:bg-secondary cursor-pointer', item.class || '')\"\n >\n {{ item.label }}\n </a>\n } @else {\n <button\n type=\"button\"\n (click)=\"item.action?.()\"\n [class]=\"hlm('px-3 py-1.5 text-sm text-left hover:bg-secondary cursor-pointer bg-transparent border-0 w-full', item.class || '')\"\n >\n {{ item.label }}\n </button>\n } }\n </div>\n </div>\n }\n </nav>\n </div>\n\n <!-- Right menus (desktop) -->\n <nav [class]=\"_computedRightClass()\">\n @if (searchEnabled()) {\n <eg-generic-autocomplete\n [loaderFn]=\"searchLoaderFn()\"\n [transformValueToSearch]=\"searchTransformValueToSearch()\"\n [placeholderText]=\"searchPlaceholderText()\"\n [emptyText]=\"searchEmptyText()\"\n (optionChange)=\"onSearchOptionChange($event)\"\n ></eg-generic-autocomplete>\n } @for (item of rightMenus(); track item.label) { @if (item.link) {\n <a [routerLink]=\"item.link\" [class]=\"hlm(_computedRightLinkClass(), item.class || '')\"> {{ item.label }} </a>\n } @else {\n <button type=\"button\" (click)=\"item.action?.()\" [class]=\"hlm(_computedRightLinkClass(), item.class || '')\">\n {{ item.label }}\n </button>\n } } @let uMenus = userMenus(); @if (uMenus && uMenus.length > 0) {\n <eg-layout-simple-user-menu [menus]=\"uMenus\" [menuTrigger]=\"userMenuTrigger()\" />\n }\n </nav>\n\n <!-- Mobile menu button -->\n <button\n (click)=\"toggleMobileMenu()\"\n class=\"md:hidden p-2 text-gray-700 hover:text-primary focus:outline-none cursor-pointer\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"h-6 w-6\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M4 6h16M4 12h16M4 18h16\" />\n </svg>\n </button>\n </header>\n\n @let _topMenus = leftMenus().concat(rightMenus()); @let _userMenus = userMenus(); @let _leftMenuGroups =\n leftMenuGroups(); @let _topMenuItems = topMenus(); @let _topSecondaryGroups = topSecondaryMenus();\n\n <!-- Top menus (desktop) -->\n @if (_topMenuItems.length > 0) {\n <nav [class]=\"_computedTopClass()\">\n @for (item of _topMenuItems; track item.label) { @if (item.link) {\n <a [routerLink]=\"item.link\" [class]=\"hlm(_computedTopLinkClass(), item.class || '')\"> {{ item.label }} </a>\n } @else {\n <span [class]=\"hlm(_computedTopLinkClass(), item.class || '')\">{{ item.label }}</span>\n } }\n </nav>\n }\n\n <!-- Top secondary menus (desktop) \u2014 second row showing items grouped by parent label -->\n @if (_topSecondaryGroups.length > 0) {\n <nav [class]=\"_computedTopSecondaryClass()\">\n @for (group of _topSecondaryGroups; track group.label) {\n <span class=\"flex flex-wrap items-center gap-x-3\">\n @if (group.label) {\n <span class=\"text-xs font-semibold uppercase text-muted-foreground\">{{ group.label }}</span>\n } @for (item of group.items; track item.label) { @if (item.link) {\n <a\n [routerLink]=\"item.link\"\n [class]=\"hlm(_computedTopLinkClass(), 'text-xs hover:underline', item.class || '')\"\n >\n {{ item.label }}\n </a>\n } @else {\n <button\n type=\"button\"\n (click)=\"item.action?.()\"\n [class]=\"hlm(_computedTopLinkClass(), 'text-xs hover:underline', item.class || '')\"\n >\n {{ item.label }}\n </button>\n } }\n </span>\n }\n </nav>\n }\n\n <!-- Mobile menu -->\n @if (isMobile() && mobileMenuOpen) {\n <div class=\"w-full border-none\">\n @if (_topMenuItems.length > 0) {\n <eg-layout-simple-mobile-menu-group [items]=\"_topMenuItems\" (itemClick)=\"toggleMobileMenu()\" />\n }\n\n @for (group of _topSecondaryGroups; track group.label) { @if (group.items && group.items.length > 0) {\n <eg-layout-simple-mobile-menu-group\n [items]=\"group.items\"\n [label]=\"group.label\"\n (itemClick)=\"toggleMobileMenu()\"\n ></eg-layout-simple-mobile-menu-group>\n } }\n\n <eg-layout-simple-mobile-menu-group [items]=\"_topMenus\" (itemClick)=\"toggleMobileMenu()\" />\n\n @for (group of _leftMenuGroups; track $index) { @if (group.items && group.items.length > 0) {\n <eg-layout-simple-mobile-menu-group\n [items]=\"group.items\"\n [label]=\"group.label\"\n (itemClick)=\"toggleMobileMenu()\"\n ></eg-layout-simple-mobile-menu-group>\n } } @if ((_topMenus.length > 0 || _leftMenuGroups.length > 0) && _userMenus.length > 0) {\n <hr class=\"border-gray-300 my-2\" />\n } @for (section of userMenus(); track section.label) {\n <eg-layout-simple-mobile-menu-group\n [items]=\"section.items\"\n [label]=\"section.label\"\n (itemClick)=\"toggleMobileMenu()\"\n ></eg-layout-simple-mobile-menu-group>\n\n @if (section.separator) {\n <hr class=\"border-gray-300 my-2\" />\n } }\n </div>\n }\n\n <!-- Main content -->\n <main [class]=\"_contentClass()\">\n @if (!loading()) {\n <div class=\"flex items-center justify-center h-full\">\n <ng-content />\n </div>\n }\n <div [class]=\"_contentBottomClass()\"></div>\n </main>\n\n @if (footerEnabled()) {\n <footer [class]=\"_footerClass()\">\n <nav [class]=\"_computedFooterMenuClass()\">\n @for (item of footerMenus(); track item.label) { @if (item.link) {\n <a [routerLink]=\"item.link\" [class]=\"hlm(_computedFooterLinkClass(), item.class || '')\"> {{ item.label }} </a>\n } @else {\n <button type=\"button\" (click)=\"item.action?.()\" [class]=\"hlm(_computedFooterLinkClass(), item.class || '')\">\n {{ item.label }}\n </button>\n } }\n </nav>\n\n <div class=\"mt-2 text-center\">{{ footerContent() }}</div>\n </footer>\n }\n</div>\n", dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "browserUrl", "routerLink"] }, { kind: "component", type: EgLayoutSimpleUserMenu, selector: "eg-layout-simple-user-menu", inputs: ["menus", "menuTrigger"] }, { kind: "component", type: EgLayoutSimpleSidebar, selector: "eg-layout-simple-sidebar", inputs: ["side", "title", "content", "contentContext"] }, { kind: "component", type: EgLayoutSimpleMobileMenuGroup, selector: "eg-layout-simple-mobile-menu-group", inputs: ["label", "items"], outputs: ["itemClick"] }, { kind: "component", type: EgGenericAutocomplete, selector: "eg-generic-autocomplete", inputs: ["placeholderText", "emptyText", "loaderFn", "transformValueToSearch"], outputs: ["optionChange"] }, { kind: "component", type: HlmButton, selector: "button[hlmButton], a[hlmButton]", inputs: ["variant", "size", "appearance", "loading", "icon", "iconPosition", "class", "spinnerUserClass", "disabled", "type"] }, { kind: "component", type: NgIcon, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }] });
578
692
  }
579
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: EgLayoutSimple, decorators: [{
693
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: EgLayoutSimple, decorators: [{
580
694
  type: Component,
581
695
  args: [{ selector: 'eg-layout-simple', standalone: true, imports: [
582
696
  RouterLink,
@@ -585,14 +699,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImpor
585
699
  EgLayoutSimpleMobileMenuGroup,
586
700
  EgGenericAutocomplete,
587
701
  HlmButton,
588
- HlmMenu,
589
702
  NgIcon,
590
703
  ], providers: [
591
704
  provideIcons({
592
705
  lucideMenu,
593
706
  }),
594
- ], template: "<ng-template #menuIconTemplate>\n <ng-icon [svg]=\"menuIcon\" size=\"20px\" class=\"[&_svg]:w-[inherit]! [&_svg]:h-[inherit]!\" />\n</ng-template>\n\n<eg-layout-simple-sidebar\n [title]=\"sidebarTitle()\"\n [content]=\"sidebarContent()\"\n [contentContext]=\"{ close: closeSidebar.bind(this) }\"\n/>\n\n<div class=\"flex flex-col min-h-screen\">\n <!-- Header -->\n <header [class]=\"_headerClass()\">\n <div class=\"flex items-center space-x-4\">\n @if (sidebarEnabled()) {\n <button\n hlmButton\n variant=\"secondary\"\n appearance=\"outline\"\n size=\"icon\"\n [icon]=\"menuIconTemplate\"\n iconPosition=\"left\"\n class=\"bg-transparent! border-gray-400! hover:border-gray-500!\"\n (click)=\"openSidebar()\"\n ></button>\n }\n\n <div class=\"logo\">\n <a [routerLink]=\"logoLink()\">\n <img [src]=\"logo()\" alt=\"Logo\" [class]=\"_logoClass()\" />\n </a>\n </div>\n <!-- Left menus (desktop) -->\n <nav [class]=\"_computedLeftClass()\">\n @for (item of leftMenus(); track item.label) {\n @if (item.link) {\n <a [routerLink]=\"item.link\" [class]=\"hlm(_computedLeftLinkClass(), item.class || '')\"> {{ item.label }} </a>\n } @else {\n <button type=\"button\" (click)=\"item.action?.()\" [class]=\"hlm(_computedLeftLinkClass(), item.class || '')\">\n {{ item.label }}\n </button>\n }\n }\n </nav>\n </div>\n\n <!-- Right menus (desktop) -->\n <nav [class]=\"_computedRightClass()\">\n @if (searchEnabled()) {\n <eg-generic-autocomplete\n [optionTemplate]=\"searchOptionTemplate()\"\n [loaderFn]=\"searchLoaderFn()\"\n [transformValueToSearch]=\"searchTransformValueToSearch()\"\n [placeholderText]=\"searchPlaceholderText()\"\n [emptyText]=\"searchEmptyText()\"\n (optionChange)=\"onSearchOptionChange($event)\"\n ></eg-generic-autocomplete>\n }\n\n @for (item of rightMenus(); track item.label) {\n @if (item.link) {\n <a [routerLink]=\"item.link\" [class]=\"hlm(_computedRightLinkClass(), item.class || '')\"> {{ item.label }} </a>\n } @else {\n <button type=\"button\" (click)=\"item.action?.()\" [class]=\"hlm(_computedRightLinkClass(), item.class || '')\">\n {{ item.label }}\n </button>\n }\n }\n\n @let uMenus = userMenus();\n @if (uMenus && uMenus.length > 0) {\n <eg-layout-simple-user-menu [menus]=\"uMenus\" [menuTrigger]=\"userMenuTrigger()\" />\n }\n </nav>\n\n <!-- Mobile menu button -->\n <button\n (click)=\"toggleMobileMenu()\"\n class=\"md:hidden p-2 text-gray-700 hover:text-primary focus:outline-none cursor-pointer\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"h-6 w-6\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M4 6h16M4 12h16M4 18h16\" />\n </svg>\n </button>\n </header>\n\n @let _topMenus = leftMenus().concat(rightMenus());\n @let _userMenus = userMenus();\n\n <!-- Mobile menu -->\n @if (isMobile() && mobileMenuOpen) {\n <hlm-menu class=\"w-full border-none\">\n <eg-layout-simple-mobile-menu-group [items]=\"_topMenus\" (itemClick)=\"toggleMobileMenu()\" />\n\n @if (_topMenus.length > 0 && _userMenus.length > 0) {\n <hr class=\"border-gray-300 my-2\" />\n }\n\n @for (section of userMenus(); track section.label) {\n <eg-layout-simple-mobile-menu-group\n [items]=\"section.items\"\n [label]=\"section.label\"\n (itemClick)=\"toggleMobileMenu()\"\n ></eg-layout-simple-mobile-menu-group>\n\n @if (section.separator) {\n <hr class=\"border-gray-300 my-2\" />\n }\n }\n </hlm-menu>\n }\n\n <!-- Main content -->\n <main [class]=\"_contentClass()\">\n @if (!loading()) {\n <div class=\"flex items-center justify-center h-full\">\n <ng-content />\n </div>\n }\n <div [class]=\"_contentBottomClass()\"></div>\n </main>\n\n @if (footerEnabled()) {\n <footer [class]=\"_footerClass()\">\n <nav [class]=\"_computedFooterMenuClass()\">\n @for (item of footerMenus(); track item.label) {\n @if (item.link) {\n <a [routerLink]=\"item.link\" [class]=\"hlm(_computedFooterLinkClass(), item.class || '')\">\n {{ item.label }}\n </a>\n } @else {\n <button type=\"button\" (click)=\"item.action?.()\" [class]=\"hlm(_computedFooterLinkClass(), item.class || '')\">\n {{ item.label }}\n </button>\n }\n }\n </nav>\n\n <div class=\"mt-2 text-center\">\n {{ footerContent() }}\n </div>\n </footer>\n }\n</div>\n" }]
595
- }], ctorParameters: () => [{ type: i1$2.BreakpointObserver }] });
707
+ ], template: "<ng-template #menuIconTemplate>\n <ng-icon [svg]=\"menuIcon\" size=\"20px\" class=\"[&_svg]:w-[inherit]! [&_svg]:h-[inherit]!\" />\n</ng-template>\n\n<eg-layout-simple-sidebar\n [title]=\"sidebarTitle()\"\n [content]=\"sidebarContent()\"\n [contentContext]=\"{ close: closeSidebar.bind(this) }\"\n/>\n\n<div class=\"flex flex-col min-h-screen\">\n <!-- Header -->\n <header [class]=\"_headerClass()\">\n <div class=\"flex items-center space-x-4\">\n @if (sidebarEnabled()) {\n <button\n hlmButton\n variant=\"secondary\"\n appearance=\"outline\"\n size=\"icon\"\n [icon]=\"menuIconTemplate\"\n iconPosition=\"left\"\n class=\"bg-transparent! border-gray-400! hover:border-gray-500!\"\n (click)=\"openSidebar()\"\n ></button>\n }\n\n <div class=\"logo\">\n <a [routerLink]=\"logoLink()\">\n <img [src]=\"logo()\" alt=\"Logo\" [class]=\"_logoClass()\" />\n </a>\n </div>\n <!-- Left menus (desktop) -->\n <nav [class]=\"_computedLeftClass()\">\n @for (item of leftMenus(); track item.label) { @if (item.link) {\n <a [routerLink]=\"item.link\" [class]=\"hlm(_computedLeftLinkClass(), item.class || '')\"> {{ item.label }} </a>\n } @else {\n <button type=\"button\" (click)=\"item.action?.()\" [class]=\"hlm(_computedLeftLinkClass(), item.class || '')\">\n {{ item.label }}\n </button>\n } } @for (group of leftMenuGroups(); track $index) {\n <div class=\"relative group\">\n <button\n type=\"button\"\n class=\"text-left text-secondary hover:text-primary cursor-pointer no-underline py-1 flex items-center gap-1\"\n >\n {{ group.label ?? 'Menu' }}\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"h-3 w-3\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n >\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M19 9l-7 7-7-7\" />\n </svg>\n </button>\n <div\n class=\"absolute left-0 top-full mt-1 hidden group-hover:flex flex-col min-w-[12rem] bg-popover text-popover-foreground border border-gray-200 rounded-md shadow-md py-1 z-50\"\n >\n @if (group.label) {\n <div class=\"px-3 py-1 text-xs font-semibold text-muted-foreground\">{{ group.label }}</div>\n } @for (item of group.items; track item.label) { @if (item.link) {\n <a\n [routerLink]=\"item.link\"\n [class]=\"hlm('px-3 py-1.5 text-sm no-underline hover:bg-secondary cursor-pointer', item.class || '')\"\n >\n {{ item.label }}\n </a>\n } @else {\n <button\n type=\"button\"\n (click)=\"item.action?.()\"\n [class]=\"hlm('px-3 py-1.5 text-sm text-left hover:bg-secondary cursor-pointer bg-transparent border-0 w-full', item.class || '')\"\n >\n {{ item.label }}\n </button>\n } }\n </div>\n </div>\n }\n </nav>\n </div>\n\n <!-- Right menus (desktop) -->\n <nav [class]=\"_computedRightClass()\">\n @if (searchEnabled()) {\n <eg-generic-autocomplete\n [loaderFn]=\"searchLoaderFn()\"\n [transformValueToSearch]=\"searchTransformValueToSearch()\"\n [placeholderText]=\"searchPlaceholderText()\"\n [emptyText]=\"searchEmptyText()\"\n (optionChange)=\"onSearchOptionChange($event)\"\n ></eg-generic-autocomplete>\n } @for (item of rightMenus(); track item.label) { @if (item.link) {\n <a [routerLink]=\"item.link\" [class]=\"hlm(_computedRightLinkClass(), item.class || '')\"> {{ item.label }} </a>\n } @else {\n <button type=\"button\" (click)=\"item.action?.()\" [class]=\"hlm(_computedRightLinkClass(), item.class || '')\">\n {{ item.label }}\n </button>\n } } @let uMenus = userMenus(); @if (uMenus && uMenus.length > 0) {\n <eg-layout-simple-user-menu [menus]=\"uMenus\" [menuTrigger]=\"userMenuTrigger()\" />\n }\n </nav>\n\n <!-- Mobile menu button -->\n <button\n (click)=\"toggleMobileMenu()\"\n class=\"md:hidden p-2 text-gray-700 hover:text-primary focus:outline-none cursor-pointer\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"h-6 w-6\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M4 6h16M4 12h16M4 18h16\" />\n </svg>\n </button>\n </header>\n\n @let _topMenus = leftMenus().concat(rightMenus()); @let _userMenus = userMenus(); @let _leftMenuGroups =\n leftMenuGroups(); @let _topMenuItems = topMenus(); @let _topSecondaryGroups = topSecondaryMenus();\n\n <!-- Top menus (desktop) -->\n @if (_topMenuItems.length > 0) {\n <nav [class]=\"_computedTopClass()\">\n @for (item of _topMenuItems; track item.label) { @if (item.link) {\n <a [routerLink]=\"item.link\" [class]=\"hlm(_computedTopLinkClass(), item.class || '')\"> {{ item.label }} </a>\n } @else {\n <span [class]=\"hlm(_computedTopLinkClass(), item.class || '')\">{{ item.label }}</span>\n } }\n </nav>\n }\n\n <!-- Top secondary menus (desktop) \u2014 second row showing items grouped by parent label -->\n @if (_topSecondaryGroups.length > 0) {\n <nav [class]=\"_computedTopSecondaryClass()\">\n @for (group of _topSecondaryGroups; track group.label) {\n <span class=\"flex flex-wrap items-center gap-x-3\">\n @if (group.label) {\n <span class=\"text-xs font-semibold uppercase text-muted-foreground\">{{ group.label }}</span>\n } @for (item of group.items; track item.label) { @if (item.link) {\n <a\n [routerLink]=\"item.link\"\n [class]=\"hlm(_computedTopLinkClass(), 'text-xs hover:underline', item.class || '')\"\n >\n {{ item.label }}\n </a>\n } @else {\n <button\n type=\"button\"\n (click)=\"item.action?.()\"\n [class]=\"hlm(_computedTopLinkClass(), 'text-xs hover:underline', item.class || '')\"\n >\n {{ item.label }}\n </button>\n } }\n </span>\n }\n </nav>\n }\n\n <!-- Mobile menu -->\n @if (isMobile() && mobileMenuOpen) {\n <div class=\"w-full border-none\">\n @if (_topMenuItems.length > 0) {\n <eg-layout-simple-mobile-menu-group [items]=\"_topMenuItems\" (itemClick)=\"toggleMobileMenu()\" />\n }\n\n @for (group of _topSecondaryGroups; track group.label) { @if (group.items && group.items.length > 0) {\n <eg-layout-simple-mobile-menu-group\n [items]=\"group.items\"\n [label]=\"group.label\"\n (itemClick)=\"toggleMobileMenu()\"\n ></eg-layout-simple-mobile-menu-group>\n } }\n\n <eg-layout-simple-mobile-menu-group [items]=\"_topMenus\" (itemClick)=\"toggleMobileMenu()\" />\n\n @for (group of _leftMenuGroups; track $index) { @if (group.items && group.items.length > 0) {\n <eg-layout-simple-mobile-menu-group\n [items]=\"group.items\"\n [label]=\"group.label\"\n (itemClick)=\"toggleMobileMenu()\"\n ></eg-layout-simple-mobile-menu-group>\n } } @if ((_topMenus.length > 0 || _leftMenuGroups.length > 0) && _userMenus.length > 0) {\n <hr class=\"border-gray-300 my-2\" />\n } @for (section of userMenus(); track section.label) {\n <eg-layout-simple-mobile-menu-group\n [items]=\"section.items\"\n [label]=\"section.label\"\n (itemClick)=\"toggleMobileMenu()\"\n ></eg-layout-simple-mobile-menu-group>\n\n @if (section.separator) {\n <hr class=\"border-gray-300 my-2\" />\n } }\n </div>\n }\n\n <!-- Main content -->\n <main [class]=\"_contentClass()\">\n @if (!loading()) {\n <div class=\"flex items-center justify-center h-full\">\n <ng-content />\n </div>\n }\n <div [class]=\"_contentBottomClass()\"></div>\n </main>\n\n @if (footerEnabled()) {\n <footer [class]=\"_footerClass()\">\n <nav [class]=\"_computedFooterMenuClass()\">\n @for (item of footerMenus(); track item.label) { @if (item.link) {\n <a [routerLink]=\"item.link\" [class]=\"hlm(_computedFooterLinkClass(), item.class || '')\"> {{ item.label }} </a>\n } @else {\n <button type=\"button\" (click)=\"item.action?.()\" [class]=\"hlm(_computedFooterLinkClass(), item.class || '')\">\n {{ item.label }}\n </button>\n } }\n </nav>\n\n <div class=\"mt-2 text-center\">{{ footerContent() }}</div>\n </footer>\n }\n</div>\n" }]
708
+ }], ctorParameters: () => [{ type: i1$2.BreakpointObserver }], propDecorators: { sidebarEnabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "sidebarEnabled", required: false }] }], sidebarTitle: [{ type: i0.Input, args: [{ isSignal: true, alias: "sidebarTitle", required: false }] }], sidebarContent: [{ type: i0.Input, args: [{ isSignal: true, alias: "sidebarContent", required: false }] }], userMenuTrigger: [{ type: i0.Input, args: [{ isSignal: true, alias: "userMenuTrigger", required: false }] }], leftMenus: [{ type: i0.Input, args: [{ isSignal: true, alias: "leftMenus", required: false }] }], leftMenuGroups: [{ type: i0.Input, args: [{ isSignal: true, alias: "leftMenuGroups", required: false }] }], rightMenus: [{ type: i0.Input, args: [{ isSignal: true, alias: "rightMenus", required: false }] }], topMenus: [{ type: i0.Input, args: [{ isSignal: true, alias: "topMenus", required: false }] }], topSecondaryMenus: [{ type: i0.Input, args: [{ isSignal: true, alias: "topSecondaryMenus", required: false }] }], userMenus: [{ type: i0.Input, args: [{ isSignal: true, alias: "userMenus", required: false }] }], logo: [{ type: i0.Input, args: [{ isSignal: true, alias: "logo", required: false }] }], logoLink: [{ type: i0.Input, args: [{ isSignal: true, alias: "logoLink", required: false }] }], logoClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "logoClass", required: false }] }], headerClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "headerClass", required: false }] }], contentClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "contentClass", required: false }] }], contentBottomClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "contentBottomClass", required: false }] }], leftMenuClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "leftClass", required: false }] }], rightMenuClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "rightClass", required: false }] }], topMenuClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "topClass", required: false }] }], leftLinkClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "leftLinkClass", required: false }] }], rightLinkClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "rightLinkClass", required: false }] }], topLinkClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "topLinkClass", required: false }] }], searchEnabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchEnabled", required: false }] }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }], searchPlaceholderText: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchPlaceholderText", required: false }] }], searchEmptyText: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchEmptyText", required: false }] }], searchOptionTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchOptionTemplate", required: false }] }], searchLoaderFn: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchLoaderFn", required: false }] }], searchTransformValueToSearch: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchTransformValueToSearch", required: false }] }], searchOptionChange: [{ type: i0.Output, args: ["searchOptionChange"] }], footerEnabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "footerEnabled", required: false }] }], footerMenus: [{ type: i0.Input, args: [{ isSignal: true, alias: "footerMenus", required: false }] }], footerMenuClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "footerMenuClass", required: false }] }], footerLinkClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "footerLinkClass", required: false }] }], footerContent: [{ type: i0.Input, args: [{ isSignal: true, alias: "footerContent", required: false }] }], footerClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "footerClass", required: false }] }], viewchildSheetRef: [{ type: i0.ViewChild, args: [i0.forwardRef(() => EgLayoutSimpleSidebar), { isSignal: true }] }] } });
596
709
 
597
710
  /*
598
711
  * Public API Surface of layout-simple